0

我正在尝试使用 PHP 和 GD 库创建图像

当我写这段代码时没有发现错误

<?php
header("Content-Type: image/png");
$im = @imagecreate(120,120) or die("Cannot Initialize new GD image stream");
for ($i =0; $i<120; $i++) {
    for ($j = 0; $j<120; $j++) {
        $color = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); 
               imagesetpixel($im, $i,$j,$color);              
}
}
imagepng($im);
imagedestroy($im2);
?>

但是我需要为每个不同的像素设置随机颜色,但是当我将宽度和高度设置为 120px 时,我不知道为什么循环在 15 处停止

问题是什么?

4

1 回答 1

2

这是因为在某些时候imagecolorallocate会返回 false 或另一个负值。

http://www.php.net/manual/en/function.imagecolorallocate.php

警告此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

实际上,您会一遍又一遍地尝试为图像创建相同的颜色。因此,只需考虑您可能已经在循环中分配/创建了随机颜色:

for ($i=0; $i<120; $i++) {
    for ($j = 0; $j<120; $j++) {
        $color = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)); 
        if ($color) {
            imagesetpixel($im, $i, $j, $color);
        } else {
            imagesetpixel($im, $i, $j, rand(0, 255));
        }
    }
}

在此处输入图像描述

于 2013-09-10T10:10:12.083 回答