Рисование на изображении с помощью библиотеки GD в PHP

#php #image #gd

#php #изображение #gd

Вопрос:

Я создал код для генерации случайного изображения шаблона. он создает изображение с заданной шириной и высотой и заполняет его небольшими прямоугольниками размером 40×40 пикселей. это мой код:

 <?php 

$width = 1000; 
$height = 600;

$image_p = imagecreate($width, $height); 
$baseR = 255 - rand(0, 100);
$baseG = 255 - rand(0, 100);
$baseB = 255 - rand(0, 100);

for ($i = 0; $i <= floor($width / 40); $i  ){
for ($j = 0; $j <= floor($height / 40); $j  ){
  $val = floor(100 * (rand(0, 100) / 100));
  $r = $baseR - $val;
  $g = $baseG - $val;
  $b = $baseB - $val;
  $color = imagecolorallocate($image_p, $r, $g, $b); 
  imagefilledrectangle($image_p, $i * 40, $j * 40, (($i   1) * 40), (($j   1) * 40), $color);

}
}

imagejpeg($image_p, 'my_dir/test.jpg'); 
 

?>

нет никаких проблем, когда я устанавливаю ширину на значение, например, 640, а высоту на 400. но если я установлю ширину на 1000, а высоту на 800, в правой части изображения останется пустая область, которая не закрыта прямоугольниками. Я реализовал тот же код в delphi, и он отлично работал, но в PHP …!

Комментарии:

1. является ли эта пустая область размером, кратным 40? если это так, то есть какая-то ошибка math / fencepost. если это шаткий размер, отличный от 40x, то происходит что-то очень странное.

2. Я так не думаю, потому что я даже использовал этот код, и он тоже не работал: for ($ i = 0; $ i <= 1000; $ i ){ for ($ j = 0; $ j <= 1000; $ j ){

3. Я думаю, что это должно быть < , а не <= , но не могу это проверить.

4. Я даже протестировал это! это просто работает очень красиво и плавно в Delphi! 🙁

Ответ №1:

Изменить imagecreate на imagecreatetruecolor

Вы создаете изображение на основе палитры с максимальным количеством цветов 255. У вас заканчиваются цвета для выделения в конце, и он перерабатывает последний цвет в палитре для оставшихся блоков.