0

私のコードは画像配列を生成するのに少し複雑ですが、一般的な考え方は、テーブルのグラフの列に表示する必要がある8つの円グラフを作成することです。HTMLに画像を表示するために何が間違っているのですか。この関数は、htmlと同じファイルにあります。

画像の作成

$FileHandle = fopen($FileName, 'r') or die("can't open file!!");

//Getting total for each question
$i = 0;
$start = 0;
$finish = 0;

while (($row = fgetcsv($FileHandle, 1024, ",")) !== FALSE) {
    $total[] = $row[0] + $row[1] + $row[2] + $row[3] + $row[4];
    $average[] = round(((1 * $row[0] + 2 * $row[1] + 3 * $row[2] + 4 * $row[3] + 5 * $row[4]) / $total[$i]), 2, PHP_ROUND_HALF_UP);

    $start = 0;
    $finish = 0;

    $myImage[$i] = ImageCreate(200, 200);

    $white = ImageColorAllocate($myImage[$i], 255, 255, 255);
    $red = ImageColorAllocate($myImage[$i], 255, 0, 0);
    $orange = ImageColorAllocate($myImage[$i], 191, 64, 0);
    $olive = ImageColorAllocate($myImage[$i], 128, 128, 0);
    $green = ImageColorAllocate($myImage[$i], 64, 191, 0);
    $lt_green = ImageColorAllocate($myImage[$i], 0, 255, 0);

    $finish = ($row[0] / $total[$i]) * 360;
    //echo $start . ' ' . $finish . '<br>';
    if ($finish != $start) {
    ImageFilledArc($myImage[$i], 100, 100, 50, 50, $start, $finish, $red, IMG_ARC_PIE);
    $start = $finish;
    $finish += ($row[1] / $total[$i]) * 360;
    }
else{
    $start = $finish;
        $finish += ($row[1] / $total[$i]) * 360;
}
    if ($finish != $start) {
        ImageFilledArc($myImage[$i], 100, 100, 50, 50, $start, $finish, $orange, IMG_ARC_PIE);
        $start = $finish;
        $finish += ($row[2] / $total[$i]) * 360;
    }
    else{
        $start = $finish;
        $finish += ($row[2] / $total[$i]) * 360;
    }
    if ($finish != $start) {
        ImageFilledArc($myImage[$i], 100, 100, 50, 50, $start, $finish, $olive, IMG_ARC_PIE);
        $start = $finish;
        $finish += ($row[3] / $total[$i]) * 360;
    }
    else{
        $start = $finish;
        $finish += ($row[3] / $total[$i]) * 360;
    }
    if ($finish != $start) {
        ImageFilledArc($myImage[$i], 100, 100, 50, 50, $start, $finish, $green, IMG_ARC_PIE);
        $start = $finish;
        $finish += ($row[4] / $total[$i]) * 360;
    }
    else{
        $start = $finish;
        $finish += ($row[4] / $total[$i]) * 360;
    }
    if ($finish != $start) {
        ImageFilledArc($myImage[$i], 100, 100, 50, 50, $start, $finish, $lt_green, IMG_ARC_PIE);
    }
    $i++;
}

これがhtmlブロックで試したものです

<td><?php echo $average[0] ?></td>
<td><?php imagepng($myImage[0]); ?></td>
<td><?php echo $total[0] ?></td>
4

2 に答える 2

0

実際問題として、imagepng()関数には、スクリプトがPNGファイルを送信していることをブラウザーに通知するheader()が必要です。PNGファイルをechoステートメントを使用してブラウザー出力ストリームに混合する場合、これはうまく機能しません。これを行ったら、PNGファイルをサーバー上のディレクトリに書き込み、PNGファイルのURLを含む標準のHTMLタグを送信します。これは、おそらく円グラフをクライアントに提供する最も簡単な方法です。

よろしく、〜レイ

于 2012-12-16T16:19:38.790 に答える
0

画像生成に別のファイルを使用し、それを次のように呼び出す必要がありました

<img src = "chart.php">
于 2012-12-16T17:03:08.403 に答える