2012-03-10 3 views
5

Sto provando a generare un'immagine completamente casuale di una determinata dimensione.Come generare un'immagine completamente casuale?

Ecco quello che ho finora:

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

Il problema è che dopo 4 righe smette di essere casuale e si riempie di un colore solido come questo
Sample of problem

+3

Usa 'imagesetpixel()' invece del rettangolo pieno. molto meno overhead per impostare un singolo pixel rispetto a un rettangolo 1x1. –

+0

@MarcB Grazie per il suggerimento, ha reso più veloce, ma soffre ancora dello stesso problema – Gricey

+1

4x64 = 256, che è il limite per un'immagine a 8 bit (dato che non stai usando imagecreateTRUECOLOR()) è tutto ciò che puoi avere. –

risposta

5

se si cambia imagecreate a imagecreatetruecolor dovrebbe funzionare (tutto il resto è lo stesso, compresi i parametri)

+0

Huh, non l'avrei mai immaginato. Funziona perfettamente, grazie – Gricey

1

Assegnando un nuovo colore per ciascun pixel, si sta esaurendo rapidamente il palato dei colori. 4 righe a 64 pixel per riga sono 256. Dopo che il palato è pieno, qualsiasi nuovo colore utilizzerà l'ultimo colore sul palato.

La risposta di Mishu utilizza un'immagine a colori, piuttosto che un'immagine a colori indicizzata, motivo per cui è possibile allocare più colori.

Vedere questa risposta nella documentazione di PHP http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

Entrambi creare immagini con diverse palletes. Il colore vero ha più gamme di colori, quindi è meglio usare imagecreatetruecolor()