Рисуем геометрические фигуры в Python с помощью Pillow

Рисуем в Pillow Python

Модуль ImageDraw из библиотеки обработки изображений Pillow (PIL) предоставляет методы для рисования круга, квадрата и прямой линии в Python.

Содержание статьи

Создание объекта Draw в Python

Используя объекта Image мы создадим фоновое изображение на которой мы будем рисовать наши фигуры при помощи объекта Draw. Не забудьте импортировать модуль Image и ImageDraw в начале кода.

Здесь создается пустое изображение с размером 500 на 300 пикселей и с тёмно желтым фоном.

Создание картинки в Pillow

Рисуем фигуры в Pillow: ellipse, rectangle и line

Вызываем методы рисования из объекта Draw для рисования фигур на нашем желтом фоне.

Рисуем эллипс, прямоугольник и прямую линию в качестве примера.

Полученный результат:

Рисуем фигуры в Python

Справочник по параметрам методов рисования

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

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

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

Уточняется один из следующих форматов:

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

В методах line(), polygon() и point() используются многочисленные координаты вместо двух точек, представляющих прямоугольную область.

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

Метод line() рисует прямую линию, которая связывает каждую точку, polygon() рисует многоугольник, а метод point() рисует точку в 1 пиксель для каждой указанной точки.

Параметр fill — заполняем фигуру определенным цветом

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

Спецификация формата цвета отличается в зависимости от указанного режима изображения (объект Image):

  • RGB: Указывает значение цвета в форме (R, G, B);
  • L (Черно-белое): Указывает значение (0-255) как целое число).

Значение по умолчанию None (не заполнено).

Есть три способа указать цвет, возьмем красный цвет, его можно записать так:

  • текстовый формат: red;
  • CSS формат (Шестнадцатеричный): #FF0000
  • RGB: (255, 0, 0)

Стоит учесть тот факт, что текстовый формат не имеет все цвета, кол-во доступных цветов ограничено в коде самой библиотеки. Вот весь список: https://github.com/python-pillow/Pillow/blob/8.1.0/src/PIL/ImageColor.py#L148

Лучше всего использовать шестнадцатеричный формат #FFFFFF (белый).

Параметр outline — цвет границ

Параметр outline указывает на цвет границы фигуры.

Спецификация формата цвета такая же, как и у параметра fill которого мы обсуждали выше. Значение по умолчанию равно None (без границ).

Параметр width — размер границ

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

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

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

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

Нарисуем небольшой смайл используя круги.

Результат:

Рисуем в Pillow

Рисование линии, многоугольника и точки в Python

  • Линия: line(xy, fill, width):
    • Параметр xy
      • Указывает несколько координат двух или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
      • Рисуются линии, связывающие каждую точку между собой.
    • width: Ширина линии в пикселях
      • Обратите внимание, что если вы сделаете ширину линии толще c помощью width, указывая 3 точки или более через параметр xy, тогда соединительная линия между ними будет выглядеть не очень аккуратно.
  • Многоугольник: polygon(xy, fill, outline):
    • Параметр xy
      • Указывается несколько координат, трех или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
      • Рисуется многоугольник, в котором каждая точка соединяется между собой при помощи линии.
  • Точка: point(xy, fill):
    • Параметр xy
      • Указывается несколько координат одной или более точек как ((x1, y1), (x2, y2), (x3, y3)...);
      • Одна точка (в размере одного пикселя) рисуется для каждого координата.

Примеры рисования линий line(), многоугольника polygon() и точки point() представлены ниже. Каждая точка представляет собой 1 пиксель, потому их трудно увидеть, но они все-таки нарисованы в правой части области.

Полученный результат:

Рисуем линии в Pillow

Рисуем дугу, хорды и пироги в Pillow

Ниже мы покажем пример для рисования дуги, хорды и pieslice (фигура напоминает кусок пирога), фигуры рисуются с помощью указания параметра xy.

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

Пример рисования дуги arc(), хорды chord() и пирога pieslice() представлен ниже.

Полученный результат:

Рисуем дугу в Pillow

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

В предыдущих примерах мы рисовали фигуры на изображении со сплошным фоном, сгенерированным через метод Image.new(). Если мы откроем имеющийся изображение через Image.open(), то на неё можно что-то нарисовать.

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

Сохраните у себя файл: guido-van-rossum.jpg

Полученный результат:

Рисование в Python - Pillow