В этом уроке помимо стандартных способов рисования точек и линий
рассматриваются более сложные - рисование сглаженной линии,
рисование линий произвольной ширины. Кроме того, приведен пример
частичного затемнения картинки для создании подписи.
Для рисования точки используется функция imagesetpixel:
int imagesetpixel ( resource image, int x, int y, int color)
imagesetpixel() рисует на изображении image точку с
координатам x, y и цветом color. Верхний левый
угол имеет координаты 0,0.
Результат работы этой программы выглядит следующим образом:
Рисование линии
Для рисования линии используется функция imageline:
int imageline ( resource image, int x1, int y1, int x2, int y2, int color)
imageline() рисует на изображении image отрезок,
начинающийся в точке x1:y1, заканчивающийся в точке x2:y2 и имеющий
цвет color. Верхний левый угол имеет координаты 0:0.
Иногда появляется необходимость рисования линии произвольной
толщины (пример будет рассмотрен в уроке 13). Функции рисования
такой линии нет, но мы может сами написать ее:
Результат работы этой программы выглядит следующим образом:
Рисование сглаженной линии
Пример рисования сглаженной линии вы можете найти здесь.
Результат работы этой программы выглядит следующим образом:
На картинке хорошо видно, что линии в верхней части более
гладкие. Я не рекомендую злоупотреблять функцией imagesmoothline этого примера. Она работает слишком медленно.
Дождитесь лучше урока 13.
Заключение
В заключении хотелось бы привести пример простой программы,
позволяющей выводить подпись на затемненной части изображения.
Помимо функции imagesetpixel в примере используются еще две:
imagecolorat - возвращает значение цвета в текущей
точке.
imagecolorsforindex - возвращает ассоциативный массив с
индексами "red", "green", "blue" и "alpha". В качестве параметра
передается цвет, полученный с помощью функции imagecolorat
Пример 5. Затемнение изображения
<?php
// Коэффициент затемнения. Вычитается из каждой компоненты (R,G и B)
$DARKNESS=40;
header ("Content-type: image/png");
$img = imagecreatefromjpeg("test.jpg");
for ($i=0;$i<100;$i++)
for ($j=0;$j<40;$j++) {
$x=$i+530-110;
$y=$j+10;
$rgb = imagecolorat($img, $x, $y);
$rgb = imagecolorsforindex($img, $rgb);
// Если значение цвета в текущей точке больше коэффицинта затемнения
// то просто вычитаем его. Иначе ставим в точку 0.
$rgb["red"] = $rgb["red"] > $DARKNESS ? $rgb["red"]-$DARKNESS : 0;
$rgb["green"] = $rgb["green"] > $DARKNESS ? $rgb["green"]-$DARKNESS : 0;
$rgb["blue"] = $rgb["blue"] > $DARKNESS ? $rgb["blue"]-$DARKNESS : 0;
$c=imagecolorallocate($img,$rgb["red"],$rgb["green"],$rgb["blue"]);
imagesetpixel($img, $x, $y, $c);
}
$white=imagecolorallocate($img,255,255,255);
imagestring($img,2,530-100,18,"www.codenet.ru",$white);
imagestring($img,2,530-100,28,"(c) 2005",$white);
imagepng($img);
imagedestroy($img);
?>
Результат работы этой программы выглядит следующим образом: