#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. У вас заканчиваются цвета для выделения в конце, и он перерабатывает последний цвет в палитре для оставшихся блоков.