7

我正在尝试生成给定大小的完全随机图像。

这是我到目前为止所拥有的:

<?php
$Width = 64;
$Height = 32;

$Image = imagecreate($Width, $Height);
for($Row = 1; $Row <= $Height; $Row++) {
    for($Column = 1; $Column <= $Width; $Column++) {
        $Red = mt_rand(0,255);
        $Green = mt_rand(0,255);
        $Blue = mt_rand(0,255);
        $Colour = imagecolorallocate ($Image, $Red , $Green, $Blue);
        imagesetpixel($Image,$Column - 1 , $Row - 1, $Colour);
    }
}

header('Content-type: image/png');
imagepng($Image);
?>

问题是,在 4 行之后,它不再是随机的,而是用这样的纯色填充
问题样本

4

3 回答 3

7

如果您将 imagecreate 更改为 imagecreatetruecolor 它应该可以工作(其他一切都是一样的,包括参数)

于 2012-03-10T05:22:28.643 回答
3

通过为每个像素分配一种新颜色,您很快就会耗尽色觉。4 行,每行 64 像素为 256。 上颚满后,任何新颜色都会使用上颚上的最后一种颜色。

Mishu 的答案使用全彩色图像,而不是索引彩色图像,这就是您能够分配更多颜色的原因。

在 PHP 文档http://us.php.net/manual/en/function.imagecolorallocate.php#94785中查看这个答案

于 2012-03-10T05:28:12.130 回答
0

两者都使用不同的托盘创建图像。真彩色有更多的颜色范围,所以最好使用 imagecreatetruecolor()

于 2012-03-10T05:28:59.207 回答