Рисование прямоугольника
Автор: mike (www.codenet.ru)
Самый простой способ нарисовать прямоугольник - это
воспользоваться функцией imagerectagle
:
int imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color)
Функция imagerectangle() рисует прямоугольник цвета color.
Координаты верхнего левого угла прямоугольника - x1:y1, координаты
нижнего правого угла прямоугольника - x2:y2. Верхний левый угол
изображения имеет координаты 0:0.
Пример 1. Рисование прямоугольника:
<?
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.
Пример 2. Рисование закрашенного прямоугольника:
<?
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);
?>
Результат работы этой программы выглядит следующим образом:
Проблемы при рисовании полупрозрачного прямоугольника
Так как прямоугольник рисуется с помощью четырех линий, которые
пересекаются в вершинах, то при использовании прозрачности четыре
угловых пикселя становятся более темными. Для решения этой проблемы
можно использовать следующую функцию:
Пример 3. Рисование полупрозрачного прямоугольника:
<?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
. Первая функция нарисует
закрашенный прямоугольник цветом фона, а вторая нарисует рамку
цветом чернил.
Пример 4. Рисование "пустого" прямоугольника:
<?
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);
?>
Результат работы этой программы выглядит следующим образом:
Прямоугольник с закругленными краями
Стандартной функции для вывода такого прямоугольника нет, но
можно воспользоваться следующей:
Пример 5. Функция вывода прямоугольника с закругленными
краями:
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
:
Пример 6. Затемнение изображения:
<?
$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);
?>
Результат работы этой функции выглядит следующим образом: