У меня есть код ниже, чтобы вытащить шестнадцатеричные значения из базы данных и создать изображение этого цвета. Существует более тысячи значений, поэтому для их создания нужно создать цикл. Кажется, что он отлично работает, за исключением того, что он просто перезаписывает первое изображение (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++; } ?>
$x = 0;
выполняется на каждой итерации цикла while. Вам нужно переместить инициализацию перед циклом.
Вам просто нужно переместить $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++; }