2012-03-10 17 views
5

Próbuję wygenerować całkowicie losowy obraz o danym rozmiarze.Jak wygenerować całkowicie losowy obraz?

Oto co mam do tej pory:

<?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); 
?> 

Problem polega na tym, że po 4 rzędy przestaje być przypadkowe i wypełnia się kolorem jak ten
Sample of problem

+3

Użyj 'imagesetpixel()' zamiast wypełnionego prostokąta. znacznie mniejszy narzut, aby ustawić pojedynczy piksel niż prostokąta 1x1. –

+0

@MarcB Dzięki za tę wskazówkę, zrobiłeś to szybciej, ale nadal cierpi z powodu tego samego problemu – Gricey

+1

4x64 = 256, co jest granicą dla obrazu 8-bitowego (ponieważ nie używasz imagecreateTRUECOLOR()) to wszystko, co możesz mieć. –

Odpowiedz

5

jeśli zmienisz imagecreate do imagecreatetruecolor to powinno działać (wszystko inne jest takie samo, łącznie z parametrami)

+0

Huh, nigdy bym tego nie zgadł. Działa doskonale, dzięki – Gricey

1

Dzięki przydzieleniu nowego koloru dla każdego piksela, szybko wyczerpiesz podniebienie kolorów. 4 rzędy przy 64 pikselach na wiersz to 256. Po wypełnieniu podniebienia każdy nowy kolor użyje ostatniego koloru na podniebieniu.

Odpowiedź Mishu wykorzystuje obraz kolorowy, a nie indeksowany obraz kolorowy, dzięki czemu można przydzielić więcej kolorów.

Zobacz tę odpowiedź w docs PHP http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

Zarówno tworzenie obrazów z różnych palet. Prawdziwy kolor ma więcej zakresów kolorów, więc lepiej użyć imagecreatetruecolor()

Powiązane problemy