Creación de imágenes PHP desde valores hexadecimales en la base de datos

votos
0

Tengo el siguiente código para extraer valores hexadecimales de una base de datos y crear una imagen de ese color. Hay más de mil valores, por lo que es un bucle para crear una imagen para todos ellos. Parece funcionar bien, excepto que simplemente sobrescribe la primera imagen (0.jpg) en lugar de crear nuevas 0.jpg, 1.jpg 2.jpg etc. ¿Alguna idea de dónde me estoy equivocando?

Ah, sí, también estoy convirtiendo el hexágono a rgb, que funciona bien.

<?php

    require ('connect.php');

    $sql = mysql_query(SELECT * FROM hex)
    or die(mysql_error());

    while($colors = mysql_fetch_array( $sql ))
        {

        $x = 0;

        $imgname = $x..jpg;

        $color = $colors['value'];

            if (strlen($color) == 6)
                list($r, $g, $b) = array($color[0].$color[1],
                                         $color[2].$color[3],
                                         $color[4].$color[5]);

            $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);

        header(Content-type: image/jpeg);
        $image = imagecreate( 720, 576 );
        imagecolorallocate($image,$r, $g, $b);
        imagejpeg($image, $imgname);
        imagedestroy($image);

        $x++;

        }
    ?>
Publicado el 03/12/2009 a las 10:38
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
3

Solo necesitas moverte $x = 0;antes del inicio del ciclo.

Parece que hay algunas otras cosas mal, también

$x = 0;

while($colors = mysql_fetch_array( $sql ))
{
    $imgname = $x.".jpg";

    $color = $colors['value'];

    // Skip the whole lot if the colour is invalid
    if (strlen($color) != 6)
        continue;

    // No need to create an array just to call list()
    $r = hexdec($color[0].$color[1]);
    $g = hexdec($color[2].$color[3]);
    $b = hexdec($color[4].$color[5]);

    // There's no need to header() if you're writing to a file
    //header("Content-type: image/jpeg");
    $image = imagecreate( 720, 576 );
    $colour = imagecolorallocate($image, $r, $g, $b);

    // You don't actually fill the image with the colour
    imagefilledrectangle($image, 0, 0, 719, 575, $colour);

    imagejpeg($image, $imgname);
    imagedestroy($image);

    $x++;
}
Respondida el 03/12/2009 a las 10:42
fuente por usuario

votos
3

$x = 0;se ejecuta en cada iteración del ciclo while. Necesita mover la inicialización al frente del ciclo.

Respondida el 03/12/2009 a las 10:42
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more