我要做的是从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);
}
?>
答案 0 :(得分: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);