【问题标题】:How to generate a completely random image?如何生成完全随机的图像?
【发布时间】:2012-03-10 05:10:18
【问题描述】:

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

这是我目前所拥有的:

<?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 行之后,它不再是随机的,而是用这样的纯色填充

【问题讨论】:

  • 使用imagesetpixel() 代替填充的矩形。与 1x1 矩形相比,设置单个像素的开销要少得多。
  • @MarcB 感谢您的提示,让它变得更快,但仍然遇到同样的问题
  • 4x64 = 256,这是 8 位图像的限制(因为您没有使用 imagecreateTRUECOLOR())。
  • 啊,这是我遗漏的更好的一点。感谢您的帮助
  • @MitchellGrice,我很惊讶您可能会费心尝试再次发帖。你的最后一条评论,“我不想花几个小时来学习 PHP 图像库以及它如何处理像这样微不足道的东西的颜色”,(stackoverflow.com/questions/9643978/…),绝对让我没有心情帮助你问题。我很高兴别人有,但这个网站的全部意义在于学习。如果您对此不感兴趣,请不要费心提问。无论如何,感谢您这次在您的帖子中添加了一些代码。

标签: php image-generation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2013-12-08
        • 2012-03-13
        • 1970-01-01
        相关资源
        最近更新 更多