Проблемы с imagesetpixel и отображением изображения с php5 и gd 2.0 (или выше, видимо) - PullRequest
0 голосов
/ 07 апреля 2009

Я пытаюсь, по причинам, наиболее известным моему бессознательному, создать картину, похожую на снегопад.

Используя 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:32) в / var / www / play / snowcrash2.php на линии 51 "

Перемещение заголовка (...) в первые пару строк (при попытке поместить заголовок куда-нибудь, что может быть отправлено вовремя) приводит к следующей ошибке (в форме изображения): изображение "http://127.0.0.1/play/snowcrash2.php" не может быть отображено, поскольку содержит ошибки. "

Ммм ... помочь?


Единственная другая тема, которая возникла, - это Сгенерированное изображение с использованием PHP и GD обрезается , которое не имеет принятого ответа и, насколько я вижу, не имеет отношения к У меня проблема.

1 Ответ

1 голос
/ 07 апреля 2009

Когда браузер показывает изображение, оно загружается отдельно и размещается на странице. Из-за этого вы не можете отправить 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); 

?>
...