Рисование дуг, эллипсов и окружностей

Задача
Требуется нарисовать открытые кривые и закрашенные криволинейные фигуры. Например, надо начертить секторную диаграмму, показывающую результаты голосования пользователей.

Решение
Для того чтобы нарисовать дугу, вызовите функцию ImageArc():

ImageArc($image, $x, $y, $width, $height, $start, $end, $color);

Эллипс можно нарисовать, вызвав функцию ImageArc() и установив переменную $start в 0, а переменную $end – в 360:

ImageArc($image, $x, $y, $width, $height, 0, 360, $color);

Если вызвать функцию ImageArc(), установив переменную $start в 0, переменную $end – в 360 и задав одинаковые значения для переменных $width и $height, то получится окружность:

ImageArc($image, $x, $y, $diameter, $diameter, 0, 360, $color);

Обсуждение
Функция ImageArc() отличается чрезвычайной гибкостью, – передавая ей нужные значения, можно без труда создавать простые кривые, такие как эллипсы и окружности. Как и для многих других функций библиотеки GD, первым параметром является область отображения.

Следующие два параметра – это координаты x и y центра дуги.


За ними – ширина и высота дуги. Поскольку окружность – это дуга с шириной, равной высоте, то для рисования окружности установите значения обоих параметров, соответствующие диаметру окружности.

Шестой и седьмой параметры представляют начальный и конечный углы в градусах. Значение, равное 0, означает 3 часа. Затем дуга идет по часовой стрелке, так что 90° означают 6 часов, 180° означают 9 часов, а 270° соответствуют 12 часам. (Будьте осторожны! Такое поведение свойственно не всем функциям библиотеки GD. Например, при
вращении текста используется направление, обратное вращению часо-вой стрелки.) Центр дуги находится в точке ($x,$y), поэтому если вы рисуете полуокружность от 0° до 180°, ее начало будет располагаться не в точке ($x,$y), а в точке ($x+($diameter/2),$y).
Как обычно, последний параметр – это цвет дуги.

Например, следующий фрагмент рисует в центре области отображения незакрашенную черную окружность диаметром в 100 пикселов, которая изображена в левой половине рис. 15.3:

$image = ImageCreate(100,100);
$bg = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageArc($image, 50, 50, 100, 100, 0, 360, $black);

Для получения закрашенного эллипса или окружности вызывайте функцию ImageFillToBorder():

ImageArc($image, $x, $y, $diameter, $diameter, 0, 360, $color);
ImageFillToBorder($image, $x, $y, $color, $color);

Функция ImageFillToBorder() заливает область с началом в точке ($x,$y) цветом, указанным в последнем параметре, вплоть до границы области отображения, или до встречи с линией, окрашенной цветом, заданным третьим параметром.

Вставив это в предыдущие примеры, получаем:

$image = ImageCreate(100,100);
$bg = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
ImageArc($image, 50, 50, 100, 100, 0, 360, $black);
ImageFillToBorder($image, 50, 50, $black, $black);

Пользователи версии GD 2.x могут вызвать функцию ImageFilledArc() и передать ей последний параметр, описывающий стиль заполнения.

GD 2.x поддерживает также специальные функции ImageEllipse() и ImageFilledEllipse()..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Безопасная работа с изображениями
Построение динамических изображений
Программа: создание гистограмм результатов голосования
Рисование линий, прямоугольников и многоугольников
Рисование текста

Вернуться в раздел: PHP / 15. Графика