2012-03-10 17 views
5

Estoy tratando de generar una imagen completamente aleatoria de un tamaño determinado.¿Cómo generar una imagen completamente aleatoria?

Esto es lo que tengo hasta ahora:

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

El problema es que después de 4 filas que deje de ser al azar y se llena con un color sólido como esto
Sample of problem

+3

Use 'imagesetpixel()' en lugar del rectángulo relleno. mucha menos sobrecarga para establecer un solo píxel que un rectángulo de 1x1. –

+0

@MarcB Gracias por ese consejo, lo ha hecho más rápido pero todavía sufre el mismo problema – Gricey

+1

4x64 = 256, que es el límite para una imagen de 8 bits (ya que no está usando imagecreateTRUECOLOR()) es todo lo que puede tener. –

Respuesta

5

si cambia imagecreate a imagecreatetruecolor debería funcionar (todo lo demás es igual, incluidos los parámetros)

+0

Huh, nunca lo hubiera adivinado. Funciona perfectamente, gracias – Gricey

1

Al asignar un nuevo color para cada píxel, agota rápidamente el paladar de color. 4 filas a 64 píxeles por fila es 256. Después de que el paladar esté lleno, cualquier color nuevo usará el último color en el paladar.

La respuesta de Mishu utiliza una imagen a todo color, en lugar de una imagen en color indexada, por lo que puede asignar más colores.

Ver esta respuesta en la documentación de PHP http://us.php.net/manual/en/function.imagecolorallocate.php#94785

0

Ambos crean imágenes con diferentes palletes. El color verdadero tiene más rangos de color por lo que es mejor usar imagecreatetruecolor()

Cuestiones relacionadas