1

私がやろうとしているのは、csv ファイルからいくつかの値をロードし、それらを x、y 値として使用していくつかの長方形を描画することです。

ファイルを読み込んでいますが、画像を表示する代わりに生の画像データを出力しています。私はhtmlコードで使用できることを知っています

<img scr="foo.php"></script> 

画像を正しく表示するには、これを使用して csv ファイルの各行のデータに基づいて複数の四角形を描画する方法がわかりません。助けてください。

csv コード

20,40,60,80
50,100,150,175

インデックスphpコード

<html>
    <body>
        <?php
            include("parse.php");
        ?>
    </body>
</html>

PHPコードを解析する

<?php

include("draw.php");

$file = fopen("data.csv", "r");
while (!feof($file)) {
    $line = fgetcsv($file);

        drawGraph($line[0], $line[1], $line[2], $line[3]);

}
fclose($file);
?>

PHPコードを描く

<?php

function drawGraph($xPos, $yPos, $xxPos, $yyPos) {

//create a 200 x 200 canvas image
$canvas = imagecreatetruecolor(200, 200);

//set canvas background to white
$white = imagecolorallocate($canvas, 255, 255, 255);
imagefill($canvas, 0, 0, $white);

//create colors
$pink = imagecolorallocate($canvas, 255, 105, 180);

//draw rectangles
imagerectangle($canvas, $xPos, $yPos, $xxPos, $yyPos, $pink);

//ERROR - following line displays raw data of image not the actural image
imagepng($canvas);

imagedestroy($canvas);
}

?>
4

1 に答える 1

1

データが画像であることをブラウザーに伝える Content-Type ヘッダーを渡す必要があります。drawGraph 関数でこれを行うと、生データが出力されます。

<html>
    <body>
            <?php
                include("parse.php");
            ?>
        </body>
</html>

おそらく、画像自体に戻る drawGraph でそれを行いたいと思うでしょう。あなたが最初に示したよう header('Content-Type: image/png'); に、あなたが生成しているものと同等のものを使用するようにしてください。

ブラウザで直接テストしたい場合は、例からタグを削除し<?PHP include("parse.php"); ?>、php タグの外側に他の文字を入れないようにする必要があります (余分なスペースや改行を残すと、画像の一部と見なされます。

編集:ループの問題を見逃しました。

drawGraph 関数は imagepng に単一の png を作成して表示することに注意してください。つまり、例で複数回呼び出すと、すべて一緒にマッシュアップされた個別の PNG 画像になります。おそらく、画像をインスタンス化し、ループ内で長方形を描画してから、最終的に画像を出力したいと思うでしょう。

//create a 200 x 200 canvas image
$canvas = imagecreatetruecolor(200, 200);

//set canvas background to white
$white = imagecolorallocate($canvas, 255, 255, 255);
imagefill($canvas, 0, 0, $white);

//create colors
$pink = imagecolorallocate($canvas, 255, 105, 180);

$file = fopen("data.csv", "r");
while (!feof($file)) {
    $line = fgetcsv($file);

    //draw rectangles
    imagerectangle($canvas, $line[0], $line[1], $line[2], $line[3], $pink);

}

fclose($file);


/** finally output entire single png **/    
//ERROR - following line displays raw data of image not the actural image
imagepng($canvas);

imagedestroy($canvas);
于 2012-08-12T01:02:02.200 に答える