Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Pillow – это продвинутая библиотека, позволяющая создавать и обрабатывать изображения. С ее помощью можно, в том числе, рисовать круг, квадрат и прямую линию. Для этого используется модуль ImageDraw. Сегодня мы поговорим подробно о нем.

Как создавать объект Draw в Python?

Если нам надо создать фигуру, необходимо сначала создать объект Image, который будет служить фоном для нашего рисунка. Далее, для создания конкретных фигур мы станем пользоваться объектом Draw.

Перед тем, как начинать работать над созданием объектов, необходимо импортировать модули Image и ImageDraw. А сам код будет таковым. 

from PIL import Image, ImageDraw

 

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

im.show()

Этот код создает пустое изображение размером 500 на 300. Также он устанавливает темно-желтый цвет фона.

Как рисовать фигуры в Pillow?

Чтобы осуществлять рисование фигур в Python, необходимо в объекте Draw библиотеки Pillow использовать соответствующие методы рисования. Для начала давайте попробуем нарисовать эллипс, прямоугольник и прямую линию. 

from PIL import Image, ImageDraw

 

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

 

# Рисуем красный эллипс с черной окантовкой.

draw.ellipse((100, 100, 150, 200), fill='red', outline=(0, 0, 0))

 

# Рисуем синий прямоугольник с белой окантовкой.

draw.rectangle((200, 100, 300, 200), fill='blue', outline=(255, 255, 255))

 

# Рисуем розовую линию с шириной в 10 пиксель.

draw.line((350, 200, 450, 100), fill='pink', width=10)

 

im.save('draw-ellipse-rectangle-line.jpg', quality=95)

После выполнения этого кода мы получим следующий результат.Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Параметры методов рисования – справочник

Да, способы рисования отличаются в зависимости от метода, который используется. Тем не менее, такие параметры являются общими для всех.

Область рисования

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

Есть такие форматы: 

(((Верхняя левая x координата, Верхняя левая y координата), (нижняя правая x координата, нижняя правая y координата));

(Верхняя левая x координата, Верхняя левая y координата, нижняя правая x координата, нижняя правая y координата).

Если рисуется линия, многоугольник или точка, то используются множественные координаты вместо двух точек, которые представляют прямоугольную область. 

(x1, y1, x2, y2, x3, y3...);

((x1, y1), (x2, y2), (x3, y3)...).

Принцип работы следующий:

  1. Линия. Реализуется с помощью метода line, который связывает точки между собой.
  2. Многоугольник. Чтобы его создать, необходимо использовать метод polygon(). Он работает по похожему принципу, соединяя линиями указанные точки, только в конечном итоге линия должна получиться замкнутой.
  3. Точка. Реализуется с использованием метода point(). Она рисует точку размером в 1 пиксель для каждой точки, которая указывается.

Заполнение фигуры с помощью параметра fill

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

Здесь на спецификацию формата цвета влияет режим изображения, который указывается для объекта Image.

  1. RGB. В этом случае формируется цветное изображение. В этом случае цвет указывается в формате: красный-зеленый-синий (R,G,B).
  2. L. Генерируется черно-белая геометрическая фигура. Здесь нужно указать одну цифру в пределах от 0 до 255. Допускаются исключительно целочисленные значения.

По умолчанию используется значение None, что означает отсутствие фона фигуры. То есть, она не заполняется никаким цветом, принимая тот фон того участка, что находится под ней.

К слову, цвет можно указать тремя способами: передать его цветом, использовать шестнадцатеричный формат или указать интенсивность красного, зеленого и синего оттенков в палитре RGB.

Учитывайте то, что текстовый формат не предусматривает наличия всех цветов. Перечень тех, которые доступны, ограничен.

Задание цвета границ с использованием параметра outline

Если нужно указать, какого цвета должна быть граница многоугольника, используется параметр outline

Цвет задается абсолютно так же, как это происходит в случае с параметром fill, который обсуждался ранее. По умолчанию используется значение None. То есть, границы отсутствуют.

Указание толщины границ с использованием параметра width

Нет разницы, какая фигура вами будет рисоваться. Вы всегда имеете возможность задать размер ее границы с помощью этого параметра. Толщина задается в пикселях.

Как рисовать эллипс и прямоугольник в Python?

Эллипс (Круг): ellipse(xy, fill, outline);

Прямоугольник (Квадрат): rectangle(xy, fill, outline).

С помощью метода ellipse() разработчик может нарисовать эллипс. В параметре xy задается место в системе координат, которой будет генерироваться фигура. Если нами будут заданы четыре координаты, соответствующие квадрату, то получится ровный круг.

Давайте попробуем с помощью кругов создать маленький смайлик. 

from PIL import Image, ImageDraw

 

image = Image.new('RGB', (90, 90), 'white')

draw = ImageDraw.Draw(image)

 

draw.ellipse((0, 0, 90, 90), 'yellow', 'blue')

draw.ellipse((25, 20, 35, 30), 'yellow', 'blue')

draw.ellipse((50, 20, 60, 30), 'yellow', 'blue')

draw.arc((20, 40, 70, 70), 0, 180, 0)

image.save('draw-smile.jpg')

Результат:Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Как нарисовать линию, многоугольник и точку в Python?

Предположим, нам надо нарисовать линию. Что для этого нужно сделать? Правильно, использовать функцию line, аргументы которой следующие:

  • xy. Точка по осям абсцисс и ординат. Необходимо, чтобы таких  точек было, по крайней мере 2. Точки указываются в скобках, и каждая пара x и y также заключается в скобки ((x1, y1), (x2, y2), (x3, y3)…). Далее линия рисуется таким образом, чтобы соединить все эти точки.
  • width. Здесь указывается ширина линии в пикселях. Учтите, что если ширина линии становится больше и указывать 3 точки или более, то получившаяся фигура будет выглядеть хуже. 

Для отрисовки многоугольника используется метод polygon(xy, fill, outline).

  1. Параметр xy. С его помощью разработчик задает несколько координат нескольких точек. Минимальное количество для образования многоугольника – 3. В этом случае будет нарисован треугольник. Далее эти точки соединяются линиями таким образом, чтобы получилась геометрическая фигура.
  2. fill. Заполнитель, который нами был рассмотрен ранее.
  3. outline. Значение то же самое, что и было описано выше.

Проще всего нарисовать точку. Для этого используется метод point(xy, fill). Можно рисовать несколько точек, задав несколько координат таким же способом, как было описано выше (через множественные скобки). Одна точка рисуется для каждой пары координат.

Ниже вы можете увидеть примеры рисования этих геометрических фигур. Каждая точка являет собой 1 пиксель. Поэтому их тяжело увидеть, но они все равно нарисованы справа. 

from PIL import Image, ImageDraw

 

# Пустой желтый фон.

im = Image.new('RGB', (500, 300), (219, 193, 27))

draw = ImageDraw.Draw(im)

 

# Три черные линии в шириной в 1 пиксель.

draw.line(

    xy=(

        (30, 200),

        (130, 100),

        (80, 50)

    ), fill='black')

 

# Три красные линии с размером в 5 пикселей.

draw.line(

    xy=(

        (80, 200),

        (180, 100),

        (130, 50)

    ), fill='red', width=10)

 

# Имея три точки и связь между ними, у нас получится синий треугольник.

draw.polygon(

    xy=(

        (200, 200),

        (300, 100),

        (250, 50)

    ), fill='blue', outline=(0, 0, 0)

)

 

# Рисуем три точки.

draw.point(

    xy=(

        (350, 200),

        (450, 100),

        (400, 50)

    ), fill='black'

)

 

im.save('draw-dots.jpg', quality=95)

Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Что нужно для отрисовки дуги, хорды и «пирога» в Pillow?

А теперь давайте рассмотрим пример для рисования дуги, хорды, pieslice. Для рисования фигуры используется параметр xy.

  • Дуга: arc(xy, start, end, fill):
    • Параметры start и end
    • Указание угла дуги в градусах;
  • Хорда: chord(xy, start, end, fill, outline):
    • Начальные и конечные точки дуги связываются прямой линией.
  • Пирог: pieslice(xy, start, end, fill, outline):
    • Начальные и конечные точки дуги связываются прямой линией с центром круга.

А теперь приведем пример кода, который рисует картинку, приведенную ниже. 

from PIL import Image, ImageDraw

 

# Пустой желтый фон.

im = Image.new('RGB', (610, 240), (219, 193, 27))

draw = ImageDraw.Draw(im)

 

# Рисуем дугу.

draw.arc(

    xy=(25, 50, 175, 200),

    start=30, end=270,

    fill='red'

)

 

# Рисуем хорду.

draw.chord(

    xy=(225, 50, 375, 200),

    start=30, end=270, fill=(255, 255, 0),

    outline=(0, 0, 0)

)

 

# Рисуем "кусок пирога".

draw.pieslice(

    xy=(425, 50, 575, 200),

    start=30, end=270, fill=(255, 255, 0),

    outline=(0, 0, 0)

)

 

im.save('draw-arc.jpg', quality=95)

И такой результат мы получаем в итоге.

Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Рисование поверх изображения

Рисовать можно не только по пустому полотну, но уже и по существующему изображению. Для этого необходимо воспользоваться методом open() объекта Image

В качестве примера мы воспользуемся изображением создателя Python Гвидо ван Россума.

Для начала сохраните это изображение у себя.

Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

from PIL import Image, ImageDraw

 

im = Image.open('guido-van-rossum.jpg')

draw = ImageDraw.Draw(im)

 

draw.pieslice(

    xy=(15, 50, 140, 175),

    start=30, end=330,

    fill='red'

)

 

im.save('guido-with-pieslice.jpg', quality=95)

В результате, у нас получится такая картинка.Рисуем круг, прямоугольник, линии и дуги в Python с помощью Pillow. Геометрические фигуры в Python

Выводы

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

ОфисГуру
Adblock
detector