Справочник функций

Ваш аккаунт

Логин:
Пароль:
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
Убрать блок ВКонтакте навсегда

Последние темы форума

Показать новые сообщения »

Почтовая рассылка



Подписчиков: 19086
Последний выпуск: 12.01.2012

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

Автор: mike, www.codenet.ru
14 февраля 2005 года

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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог