2012-03-10 2 views
5

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

Вот то, что я до сих пор:

<?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-х строк, она перестает быть случайным и наполняется цветом, как этот
Sample of problem

+3

Используйте 'imagesetpixel()' вместо заполненного прямоугольника. гораздо меньше накладных расходов, чтобы установить один пиксель, чем прямоугольник 1x1. –

+0

@MarcB Спасибо за этот совет, сделал это быстрее, но он по-прежнему страдает от одной и той же проблемы. – Gricey

+1

4x64 = 256, что является предел для 8-битного изображения (поскольку вы не используете imagecreateTRUECOLOR()), это все, что вы можете иметь. –

ответ

5

если изменить ImageCreate к imagecreatetruecolor он должен работать (все остальное - то же самое, включая параметры)

+0

Да, никогда бы не догадался. Работает отлично, спасибо – Gricey

1

Выделяя новый цвет для каждого пикселя, вы быстро истощаете цветное небо. 4 строки по 64 пикселя на строку - 256. После того, как небо насыщено, любой новый цвет будет использовать последний цвет на небе.

Ответ Мишу использует полноцветное изображение, а не цветное изображение с индексом, поэтому вы можете выделить больше цветов.

Смотрите этот ответ в PHP документации http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

Оба создают изображения с различными palletes. Истинный цвет имеет больше цветовых диапазонов, поэтому лучше использовать imagecreatetruecolor()

Смежные вопросы