¿Cómo generar una imagen completamente aleatoria?

Estoy tratando de generar una imagen completamente aleatoria de un tamaño determinado.

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 deja de ser aleatorio y se llena de un color sólido como este
Muestra de problema

preguntado el 10 de marzo de 12 a las 05:03

Utilizan imagesetpixel() en lugar del rectángulo relleno. mucho menos sobrecarga para establecer un solo píxel que un rectángulo de 1x1. -

@MarcB Gracias por ese consejo, lo ha hecho más rápido pero aún sufre el mismo problema -

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. -

Ah, ese era el punto más fino que me faltaba. Gracias por la ayuda -

@MitchellGrice, me sorprende que te molestes en intentar publicar de nuevo. Su último comentario, "No quiero pasar horas aprendiendo todo sobre la biblioteca de imágenes PHP y cómo maneja los colores para algo tan trivial como esto", (stackoverflow.com/questions/9643978/…), definitivamente no me dejó de humor para ayudar con sus preguntas. Estoy feliz de que otros lo hayan hecho, pero el objetivo de este sitio es aprender. Si no está interesado en eso, no se moleste en hacer preguntas. En cualquier caso, gracias por agregar código a su publicación esta vez. -

3 Respuestas

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

respondido 10 mar '12, 05:03

Al asignar un nuevo color para cada píxel, está agotando rápidamente la paleta de colores. 4 filas a 64 píxeles por fila son 256. Una vez que el paladar está lleno, cualquier color nuevo utilizará el último color del paladar.

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

Vea esta respuesta en los documentos de PHP http://us.php.net/manual/en/function.imagecolorallocate.php#94785

respondido 10 mar '12, 05:03

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

respondido 10 mar '12, 05:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.