0

由于我的潜意识最清楚的原因,我正在尝试生成一个雪崩般的画面。

使用 PHP5 和 GD v2.0(或更高版本),我使用以下 php/html:

<?php

            $x = $y = 100;

            $gd = imagecreatetruecolor($x,$y);

            $w  = imagecolorallocate($gd, 255, 255, 255);
            $b  = imagecolorallocate($gd, 0, 0, 0);


            for ($r=1; $r <= $y; $r++) {

                for ($c=1; $c <= $x; $c++) {


                        if (rand(0,1) == 0) {
                            $rand = $w;
                                    }

                        else {
                            $rand = $b;
                                    }

                    imagesetpixel($gd,$r,$c,$rand);

                            }


                        }


echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/stylesheet.css" />

</head>

<body page="snowcrash2">

    <?php

        echo "<div id=\"snowcrashimg\">";



header('Content-Type: image/png');
            imagepng($gd);



        echo "</div>";


    ?>

</body>

</html>

我试图迭代图像的每个“行”的每个“列”,将像素值设置为 1 或 0 以反映黑色或白色。

但是,这会引发(有趣的)错误:“警告:无法修改标头信息 - 标头已由 /var/www/play/snowcrash2.php 中的(输出开始于 /var/www/play/snowcrash2.php:32)发送在第 51 行"

将标头(...)移动到的前几行(试图将标头放在可能及时发送的位置)会导致以下错误(以图像形式):图像“ http:// 127.0.0.1/play/snowcrash2.php “无法显示,因为它包含错误。”

嗯……救命?


出现的唯一另一个主题是这个使用 PHP 和 GD 生成的图像正在被切断,它没有可接受的答案,据我所知,与我遇到的问题无关。

4

1 回答 1

1

当浏览器显示图像时,它会单独下载并放置在页面上。因此,您无法在一个请求中发送 HTML 和图片。您需要的是一个 html/php 页面,该页面有一个标签,其中 src 设置为另一个页面,该页面只会发送图像的数据。

例如:(index.php)

<html>
<body>
<image src="pic.php" />
</body>
</html>

现在在另一个名为(pic.php)的文件中,您将生成图像并将其发送回带有“内容类型”标题的响应,并且绝对没有其他内容(可能除了其他标题)

例如取自http://www.webdeveloper.com/forum/showpost.php?p=879552&postcount=2

<?php

$number = "";
for ($i = 1; $i <= $lenght; $i++)
{
     $number .= rand(0,9)."";
}

$width = 11*$lenght;
$height = 30;

$img = ImageCreate($width, $height);
$background = imagecolorallocate($img,255,255,255);
$color_black = imagecolorallocate($img,0,0,0);
$color_grey = imagecolorallocate($img,169,169,169);
imagerectangle($img,0, 0,$width-1,$height-1,$color_grey);
imagestring($img, 5, $lenght, 7, $number, $color_black);
//////// VERY IMPORTANT
header('Content-Type: image/png');
//////// VERY IMPORTANT
imagepng($img);
imagedestroy($img); 

?>
于 2009-04-07T18:26:41.600 回答