Рисование прямоугольника

Автор: content Понедельник, Апрель 9th, 2012 Нет комментариев

Рубрика: Язык PHP

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

Результат работы этой функции выглядит следующим образом:

Затемнение изображения
Автор: mike (www.codenet.ru)

Источник: http://www.php.su/articles/?cat=graph&page=006

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты