базовый курс

ГРУППА КУРСА

Рисование фигур

При рисовании фигур указываются их координаты. Точкой отсчёта является левый верхний угол изображения. Он имеет координаты 0, 0. А максимальные координаты - это размер изображения минус 1. Если картинка имеет размеры 500 на 400 пикселей, то координата правого нижнего угла: 499, 399. Если фигура не помещается в изображение, то это не приводит к ошибке, просто часть фигуры не будет видна.

Прямоугольник

Функция imageRectangle() рисует прямоугольник по двум углам. Возвращает true в случае успеха.

imageRectangle (изображение, x1, y1, x2, y2, цвет)

Параметры:

изображение - дескриптор изображения

x1 - координата x первого угла

y2 - координата y первого угла

x2 - координата x второго угла

y2 - координата y второго угла

цвет - дескриптор цвета

Функция imageFilledRectangle() также рисует прямоугольник, только закрашенный. Она имеет те же самые параметры.

Нарисуем серый закрашенный прямоугольник размером во весь рисунок. Он будет фоном для других объектов. Добавим ещё один прямоугольник синего цвета. Выведем изображение на экран:

1
2
3
4
5
6
7
8
9
10
<?php
header('Content-type: image/png');
$image = imageCreateTrueColor(500, 400);
$blue = imageColorAllocate($image, 0, 0, 250);
$greyblue = imageColorAllocate($image, 0xDB, 0xE3, 0xEA);
imageFilledRectangle($image, 0, 0, 499, 399, $greyblue);
imageRectangle($image, 10, 10, 150, 90, $blue);
imagepng($image);
imageDestroy($image);
?>

Должна получиться такая картинка:

Прямоугольник

Эллипс

Функция imageEllipse() рисует эллипс.

imageEllipse (изображение, x, y, ширина, высота, цвет)

Параметры:

изображение - дескриптор изображения

x - координата x центра эллипса

y - координата y центра эллипса

ширина - ширина эллипса

высота - высота эллипса

цвет - дескриптор цвета

Функция imageFilledEllipse() создаёт закрашенный эллипс. Параметры задаются точно так же.

Добавим в рисунок прозрачный круг и разместим его так, чтобы он пересёкся с прямоугольником. Ещё нарисуем эллипс:

8
9
10
$yellowalpha = imageColorAllocateAlpha($image, 255, 255, 0, 10);
imageFilledEllipse($image, 160, 70, 100, 95, $yellowalpha);
imageEllipse($image, 90, 150, 130, 80, $blue);

Результат

Эллипс

Многоугольник

Функция imagePolygon() рисует многоугольник с любым количеством углов.

imagePolygon (изображение, точки, количество точек, цвет)

Параметры:

изображение - дескриптор изображения

точки - массив с координатами точек, по которым строится многоугольник. Координаты в массиве перечисляются так (x1, y1, x2, y2, x3, y3, x4, y4 ...)

количество точек - не меньше трёх

цвет - дескриптор цвета

Функция imageFilledPolygon() создаёт закрашенный многоугольник. Имеет те же параметры.

Пример:

11
12
13
14
15
16
17
18
19
20
21
22
$points = array(
215, 20,
275, 5,
350, 40,
350, 100,
290, 65,
230, 120);
imageFilledPolygon($image, $points, 6, $blue);
$points = array(360, 10,
495, 50,
410, 60);
imagePolygon($image, $points, 3, $blue);

Пролучаются следующие фигуры:

Многоугольник

Линии

Функция imageLine() рисует прямую линию по двум точкам.

imageLine (изображение, x1, y1, x2, y2, цвет)

Нарисуем линию, пересекающую эллипс:

23
24
$fiol = imageColorAllocate($image, 156, 15, 199);
imageLine($image, 10, 160, 200, 192, $fiol);

Результат будет выглядеть так:

Линия

По умолчанию линии имеют толщину 1 пиксель. Но её можно изменить. Это делает функция imageSetThickness(). Она устанавливает толщину всех прямых линий. Она не влияет на дугообразные линии, например, эллипс.

imageSetThickness (изображение, толщина)

После того как Вы установите толщину, все линии будут создаваться с такой толщиной до тех пор, пока Вы снова её не измените. Пример:

25
26
27
28
29
30
31
32
imageSetThickness($image, 5);
imageLine($image, 219, 230, 371, 230, $fiol);
imageRectangle($image, 360, 140, 480, 210, $fiol);
$points = array(
270, 137,
320, 218,
212, 200);
imagePolygon($image, $points, 3, $blue);

Фигуры должны выглядеть так:

Толщина

Точка

Функция imageSetPixel() добавляет в рисунок точку размером в один пиксель. Толщина, установленная функцией imageSetThickness(), на размер точки не влияет.

imageSetPixel (изображение, x, y, цвет)

Параметры:

изображение - дескриптор изображения

x - x координата точки

y - y координата точки

цвет - дескриптор цвета

Нарисуем точку внутри синего эллипса:

33
imageSetPixel($image, 80, 140, $fiol);

Заливка

Функция imageFill() производит заливку части рисунка внутри замкнутого контура.

imageFill (изображение, x, y, цвет)

Параметры:

изображение - дескриптор изображения

x - координата x точки заливки

y - координата y точки заливки

цвет - дескриптор цвета

Закрасим синий треугольник зелёным цветом:

34
35
$green = imageColorAllocate($image, 50, 237, 35);
imageFill($image,390, 30, $green);

Результат:

Заливка

Функция imageFillToBorder() тоже производит заливку. Но она ограничивается не ближайшим контуром, а контуром указанного цвета. Всё, что находится внутри этого контура, будет залито.

imageFillToBorder (изображение, x, y, цвет контура, цвет заливки)

При использовании данной функции нужно убедиться, что фигура, которую вы заливаете, является замкнутой. Иначе заливка выйдет за её пределы. Например, если попытаться залить синий эллипс, то закрасится практически весь рисунок. Ведь эллипс пересекает фиолетовая линия и синий контур получается не замкнутым.

Закрасим всё, что есть внутри фиолетового прямоугольника:

36
imageFillToBorder($image, 380, 160, $fiol, $green);

Прямоугольник должен выглядеть так:

Заливка цвета