Создание PHP-изображения из шестнадцатеричных значений в базе данных - PullRequest
0 голосов
/ 03 декабря 2009

У меня есть код ниже, чтобы извлечь шестнадцатеричные значения из базы данных и создать изображение этого цвета. Существует более тысячи значений, поэтому создание образа для них всех циклично. Кажется, он работает нормально, за исключением того, что он просто перезаписывает первое изображение (0.jpg) вместо создания новых 0.jpg, 1.jpg 2.jpg и т. Д. Есть идеи, где я ошибаюсь?

О да, я тоже конвертирую гекс в rgb, это прекрасно работает.

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

        }
    ?>

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Вам просто нужно переместиться на $x = 0; до начала цикла.

Кажется, что есть и другие неправильные вещи

$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++;
}
3 голосов
/ 03 декабря 2009

$x = 0; выполняется в каждой итерации цикла while. Вам нужно переместить инициализацию впереди цикла.

...