Рисование прямоугольника
Самый простой способ нарисовать прямоугольник - это воспользоваться функцией imagerectagle
:
int imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color)
Функция imagerectangle() рисует прямоугольник цвета color. Координаты верхнего левого угла прямоугольника - x1:y1, координаты нижнего правого угла прямоугольника - x2:y2. Верхний левый угол изображения имеет координаты 0:0.
Пример 12. Рисование прямоугольника:
<? header ("Content-type: image/png"); $im = imagecreatetruecolor(320, 240); $ink = imagecolorallocate($im, 255, 255, 255); // Стандартный прямоугольник imagerectangle($im,80,60,240,180,$ink); imagepng($im); imagedestroy($im); ?>
Результат работы этой программы выглядит следующим образом:
Рисование закрашенного прямоугольника
Для рисования закрашенного прямоугольника используется функция imagefilledrectangle
:
int imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int color)
Она рисует закрашенный прямоугольник цвета color. Координаты верхнего левого угла прямоугольника - x1:y1, координаты нижнего правого угла прямоугольника - x2:y2.
Пример 13. Рисование закрашенного прямоугольника:
<? header ("Content-type: image/png"); $im = imagecreatetruecolor(320, 240); $red = imagecolorallocate($im, 255, 0, 0); // Закрашенный прямоугольник imagefilledrectangle($im,80,60,240,180,$red); imagepng($im); imagedestroy($im); ?>
Результат работы этой программы выглядит следующим образом:
Проблемы при рисовании полупрозрачного прямоугольника
Так как прямоугольник рисуется с помощью четырех линий, которые пересекаются в вершинах, то при использовании прозрачности четыре угловых пикселя становятся более темными. Для решения этой проблемы можно использовать следующую функцию:
Пример 15. Рисование полупрозрачного прямоугольника:
<?php header ("Content-type: image/png"); $im = imagecreatetruecolor(320, 240); $ink = imagecolorallocate($im, 255, 255, 255); $col = imagecolorallocatealpha($im, 255, 255, 255, 96); // Функция рисующая "правильный" прямоугольник function imagetransparentrectanle($im,$x1,$y1,$x2,$y2,$col) { imageline($im, $x1, $y1, $x2, $y1, $col ); imageline($im, $x1, $y2, $x2, $y2, $col ); imageline($im, $x1, $y1+1, $x1, $y2-1, $col ); imageline($im, $x2, $y1+1, $x2, $y2-1, $col ); } // "Правильный" прямоугольник imagetransparentrectanle($im,10,10,100,100,$col); // Стандартный прямоугольник imagerectangle($im,110,110,200,200,$col); imagepng($im); imagedestroy($im); ?>
Результат работы этой программы выглядит следующим образом:
«Пустой» прямоугольник
Если вы хотите нарисовать "пустой" прямоугольник, то можно воспользоваться комбинацией функцийimagefilledrectangle
и imagefilledrectangle
. Первая функция нарисует закрашенный прямоугольник цветом фона, а вторая нарисует рамку
цветом чернил.
Пример 16. Рисование "пустого" прямоугольника:
<? header ("Content-type: image/png"); $im = imagecreatetruecolor(320, 240); $black = imagecolorallocate($im, 0, 0, 0); $ink = imagecolorallocate($im, 255, 255, 255); $gray = imagecolorallocate($im, 128, 128, 128); // Нарисуем 100 случайных линий for ($i=0;$i<100;$i++) { $x1=rand(0,319); $x2=rand(0,319); $y1=rand(0,239); $y2=rand(0,239); imageline($im,$x1,$x2,$y1,$y2,$gray); } // Сотрем внутреннюю часть прямоугольника imagefilledrectangle($im,80,60,240,180,$black); // Нарисуем рамку imagerectangle($im,80,60,240,180,$ink); imagepng($im); imagedestroy($im); ?>
Результат работы этой программы выглядит следующим образом:
Прямоугольник с закругленными краями
Стандартной функции для вывода такого прямоугольника нет, но можно воспользоваться следующей:
Пример 17. Функция вывода прямоугольника с закругленными краями:
function ImageRectangleWithRoundedCorners(&$im, $x1, $y1, $x2, $y2, $r, $color) { // рисуем два прямоугольника без углов imagefilledrectangle($im, $x1+$r, $y1, $x2-$r, $y2, $color); imagefilledrectangle($im, $x1, $y1+$r, $x2, $y2-$r, $color); // рисуем круги в углах imagefilledellipse($im, $x1+$r, $y1+$r, $r*2, $r*2, $color); imagefilledellipse($im, $x2-$r, $y1+$r, $r*2, $r*2, $color); imagefilledellipse($im, $x1+$r, $y2-$r, $r*2, $r*2, $color); imagefilledellipse($im, $x2-$r, $y2-$r, $r*2, $r*2, $color); }
Результат работы этой функции выглядит следующим образом:
Заключение
В заключении хотелось бы вернуться к примеру из предыдущего урока - выводу подписи на затемненной части изображения.
Вот насколько все упрощается, при использовании функции imagefilledrectangle
:
Пример 18. Затемнение изображения:
<? $DARKNESS=100; header ("Content-type: image/png"); $img = imagecreatefromjpeg("test.jpg"); $dark = imagecolorallocatealpha($img, 0, 0, 0, $DARKNESS); $red = imagecolorallocate($img, 255, 0, 0); $white=imagecolorallocate($img,255,255,255); imagefilledrectangle($img,420,15,520,45,$dark); imagestring($img,2,530-100,18,"www.codenet.ru",$white); imagestring($img,2,530-100,28,"(c) 2005",$white); imagepng($img); imagedestroy($img); ?>
Результат работы этой функции выглядит следующим образом: