Рисование прямоугольника
Самый простой способ нарисовать прямоугольник - это воспользоваться функцией 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);
?>
Результат работы этой функции выглядит следующим образом:

Оставить комментарий
Оставлять комментарии могут только зарегистрированные пользователи.
Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.
