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 回答