Рубрики
Без рубрики

Рисование фигур на изображениях с питоном и подушкой

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Подушка обеспечивает модуль рисования под названием ImagedRaw что вы можете использовать для создания простой 2D графики на вашем Изображение объекты. Согласно документации подушки, «Вы можете использовать этот модуль для создания новых изображений, аннотировать или ретушировать существующие изображения и генерировать графику на лету для использования в Интернете».

Если вам нужны более продвинутые возможности рисования, чем то, что входит в подушку, вы можете получить отдельный пакет под названием AGGDAW Отказ

Вы сосредоточитесь на том, что подушевится подушками в этой статье. В частности, вы узнаете о следующем:

  • Общие параметры
  • Линии рисования
  • Рисование дуги
  • Рисование аккордов
  • Рисование эллипсов
  • Нанесение ломтиков пирога
  • Рисование полигонов
  • Рисование прямоугольников

При рисовании подушкой он использует одну и ту же систему координат, которую вы используете с остальной подушкой. В верхнем левом углу все еще (0,0), например. Если вы нарисуете за пределами границ изображения, эти пиксели будут отбрасываться.

Если вы хотите указать цвет, вы можете использовать серию номеров или кортежей, поскольку вы будете использовать Pil.image.new () Отказ Для изображений «1», «L» и «I» используйте целые числа. Для изображений «RGB» используйте 3-TUPLE, содержащие целочисленные значения. Вы также можете использовать цветные имена, которые поддерживаются подушкой, о которых вы узнали в Глава 2 Отказ

Общие параметры

Когда вы идете использовать различные методы рисования, вы обнаружите, что у них много общих параметров, которые они делятся. Вместо того, чтобы объяснить те же параметры в каждом разделе, вы узнаете о них up-Front!

семинатор

Большинство методов рисования имеют XY Параметр, который устанавливает прямоугольную область, в которой можно нарисовать фигуру. Это может быть определено следующим двумя способами:

  • ((верхний левый х, верхний левый Y), (нижний правый х, нижний правый y)) или просто ((x1, y1), (x2, y2)))
  • Коробка кортежа (x1, y1, x2, y2)

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

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

линия () Метод будет нарисовать прямую линию, соединяя каждую точку. Polygon () нарисует многоугольник, где подключена каждая точка. Наконец, Point () нарисует точку 1 пикселя на каждой точке.

наполнять

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

  • RGB : Установите каждое значение цвета (0-255), используя (R, g, b) или цветное имя
  • Л (оттенки серого): установите значение (0-255) как целое число

По умолчанию есть Нет или нет заполнения.

контур

Наброски Устанавливает цвет границы вашего рисунка. Его спецификация такая же, как тот, который вы используете для заполнить Отказ

По умолчанию есть Нет , что означает не границы.

Теперь, когда вы знаете об общих параметрах, вы можете двигаться дальше и узнать, как начать рисовать!

Линии рисования

Первый тип рисунка вы узнаете о том, как нарисовать линии в подушке. Все формы состоят из строк. В корпусе подушки линия нарисована, рассказывая подушку на начало и окончание координат, чтобы нарисовать линию между. В качестве альтернативы вы можете пройти через серию координат XY и подушку нарисут линии для подключения точек.

Ниже приведен линия () Определение метода:

def line(self, xy, fill=None, width=0, joint=None):
    """Draw a line, or a connected sequence of line segments."""

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

Прежде чем узнать, как использовать Совместное , вы должны научиться рисовать линии без него. Но сначала вам понадобится образ, чтобы нарисовать. Вы будете использовать это изображение одного из мостов округа Мэдисон:

Теперь отправьте свой редактор Python и создайте новый файл с именем draw_line.py И добавьте этот код к нему:

# draw_line.py

import random
from PIL import Image, ImageDraw


def line(image_path, output_path):
    image = Image.open(image_path)
    draw = ImageDraw.Draw(image)
    colors = ["red", "green", "blue", "yellow",
              "purple", "orange"]

    for i in range(0, 100, 20):
        draw.line((i, 0) + image.size, width=5, 
                  fill=random.choice(colors))

    image.save(output_path)

if __name__ == "__main__":
    line("madison_county_bridge_2.jpg", "lines.jpg")

Здесь вы открываете изображение в подушке, а затем пройти Изображение объект к Imagedraw.draw () , который возвращает ImagedRaw объект. Теперь вы можете нарисовать строки на вашем изображении. В этом случае вы используете для петля, чтобы нарисовать пять линий на изображении. Начальное изображение начинается с (0,0) в первом петле. Затем положение X изменяется в каждой итерации. Конечная точка – это размер изображения.

Вы используете Случайные Модуль для выбора случайный цвет из списка цветов. Когда вы запускаете этот код, вывод будет выглядеть что-то подобное:

Теперь вы можете попробовать создать серию точек и рисовать линии таким образом. Создать новый файл с именем draw_jointed_line.py и поместите этот код в свой файл:

# draw_jointed_line.py

from PIL import Image, ImageDraw


def line(output_path):
    image = Image.new("RGB", (400, 400), "red")
    points = [(100, 100), (150, 200), (200, 50), (400, 400)]
    draw = ImageDraw.Draw(image)
    draw.line(points, width=15, fill="green", joint="curve")
    image.save(output_path)

if __name__ == "__main__":
    line("jointed_lines.jpg")

На этот раз вы создаете изображение, используя подушку, а не рисунку на одном из ваших собственных. Затем вы создаете список точек. Чтобы сделать линейные соединения выглядеть приятнее, вы можете установить Совместное Параметр на «кривую». Если вы посмотрите на исходный код для линия () Метод, вы обнаружите, что «кривая» – единственное допустимое значение, чтобы дать ему, кроме Нет Отказ Это может измениться в будущей версии подушки.

Когда вы запустите этот код, ваше изображение будет выглядеть так:

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

Установка Совместное Для «кривой» вывод будет немного больше приятным для глаз.

Теперь вы готовы узнать о рисунке дуги с подушкой!

Рисование дуги

Дуга – изогнутая линия. Вы можете рисовать дуги тоже с подушкой. Вот ARC () Спецификация метода:

def arc(self, xy, start, end, fill=None, width=1):
    """Draw an arc."""

ARC () Также можно сделать с использованием XY точки. Начать Параметр определяет начальный угол, в градусах. конец Параметр рассказывает подушку, какой конечный угол, который также находится в градусах. Другие два параметра являются теми, которые уже были введены.

Чтобы увидеть, как вы можете нарисовать дугу, создать новый файл с именем draw_arc.py И добавьте этот код к нему:

# draw_arc.py

from PIL import Image, ImageDraw


def arc(output_path):
    image = Image.new("RGB", (400, 400), "white")
    draw = ImageDraw.Draw(image)
    draw.arc((25, 50, 175, 200), start=30, end=250, fill="green")

    draw.arc((100, 150, 275, 300), start=20, end=100, width=5, 
             fill="yellow")

    image.save(output_path)

if __name__ == "__main__":
    arc("arc.jpg")

В этом коде вы создаете новое изображение с белым фоном. Тогда вы создаете свой Рисовать объект. Далее вы создаете две разные дуги. Первая дуга будет наполнена зеленым. Вторая дуга будет заполнена желтым, но его ширина линии будет 5. Когда вы нарисуете дугу, наполнитель ссылается на цвет линии дуги. Вы не заполняете саму дугу.

Когда вы запускаете этот код, ваше выходное изображение будет выглядеть так:

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

Теперь давайте будем двигаться дальше и узнать о рисовании аккордов!

Рисование аккордов

Подушка также поддерживает концепцию аккорды Отказ Аккорд такой же, как дуга, за исключением того, что конечные точки связаны с прямой.

Вот определение метода аккорд () :

def chord(self, xy, start, end, fill=None, outline=None, width=1):
    """Draw a chord."""

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

Создайте новый файл и назовите его draw_chord.py Отказ Затем добавьте этот код, чтобы вы могли видеть, как вы сами делаете аккорды:

# draw_chard.py

from PIL import Image, ImageDraw


def chord(output_path):
    image = Image.new("RGB", (400, 400), "green")
    draw = ImageDraw.Draw(image)
    draw.chord((25, 50, 175, 200), start=30, end=250, fill="red")

    draw.chord((100, 150, 275, 300), start=20, end=100, width=5, fill="yellow",
                outline="blue")

    image.save(output_path)

if __name__ == "__main__":
    chord("chord.jpg")

Этот пример нарисут два аккорда на зеленом изображении. Первый аккорд заполнен красным цветом. Второй аккорд заполнен желтым, но изложена в синем. Синий контур имеет ширину 5.

Когда вы запускаете этот код, вы создадите следующее изображение:

Это выглядит довольно хорошо. Идите вперед и играйте с этим примером тоже. Вы скоро будете освоить аккорды с подушкой с небольшой практикой.

Теперь давайте продолжим и узнаем о рисовании эллипсов!

Рисование эллипсов

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

Вот Эллипс () Определение метода:

def ellipse(self, xy, fill=None, outline=None, width=1):
    """Draw an ellipse."""

Эллипс () Позволяет заполнить его цвет, добавить цветную границу ( наброски ) и изменить ширина из этого Наброски Отказ

Чтобы увидеть, как вы можете создать Эллипс () Сделайте новый файл с именем draw_ellipse.py И добавьте этот код к нему:

# draw_ellipse.py

from PIL import Image, ImageDraw


def ellipse(output_path):
    image = Image.new("RGB", (400, 400), "white")
    draw = ImageDraw.Draw(image)
    draw.ellipse((25, 50, 175, 200), fill="red")

    draw.ellipse((100, 150, 275, 300), outline="black", width=5,
                 fill="yellow")

    image.save(output_path)

if __name__ == "__main__":
    ellipse("ellipse.jpg")

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

Когда вы запустите этот код, изображение, которое оно создает, будет выглядеть так:

Вы можете создавать овалы и круги, используя Эллипс () Отказ Попробуйте посмотрите, что вы можете сделать с этим.

Теперь давайте узнаем, как создавать ломтики пирога!

Нанесение ломтиков пирога

Ломтик пирога такой же, как ARC ()) , но также рисует прямые линии между конечными точками и центром ограничительной коробки.

Вот как Pieslice () Метод определен:

def pieslice(self, xy, start, end, fill=None, outline=None, width=1):
    """Draw a pieslice."""

Вы использовали все эти параметры на других чертежах. Для рассмотрения, заполнить Добавляет цвет во внутреннюю часть Pieslice () в то время как Наброски Добавляет цветную границу на рисунок.

Чтобы начать практиковать эту форму, создайте новый файл с именем draw_pieslice.py И добавьте этот код в свой файл:

# draw_pieslice.py

from PIL import Image, ImageDraw


def pieslice(output_path):
    image = Image.new("RGB", (400, 400), "grey")
    draw = ImageDraw.Draw(image)
    draw.pieslice((25, 50, 175, 200), start=30, end=250, fill="green")

    draw.pieslice((100, 150, 275, 300), start=20, end=100, width=5, 
                  outline="yellow")

    image.save(output_path)

if __name__ == "__main__":
    pieslice("pieslice.jpg")

В этом коде вы генерируете серое изображение, чтобы нарисовать. Тогда вы создаете два ломтика пирога. Первый Pieslice () заполняется зеленым. Второй не заполнен, но у него есть желтый Наброски Отказ Обратите внимание, что каждый Pieslice () имеет другой стартовый и окончательный степени.

Когда вы запускаете этот код, вы получите следующее изображение:

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

Теперь давайте узнаем, как нарисовать полигоны с подушкой!

Рисование полигонов

Полигон – это геометрическая форма, которая имеет ряд точек (вершин) и равное количество сегментов или сторон линии. Квадрат, треугольник и шестиугольник – все виды полигонов. Подушка позволяет создавать свои собственные полигоны. Документация подушки определяет многоугольник, как это: Схема Polygon состоит из прямых линий между заданными координатами, а также прямой линией между последней и первой координатой Отказ

Вот определение кода Polygon () Метод:

def polygon(self, xy, fill=None, outline=None):
    """Draw a polygon."""

Все эти параметры должны быть знакомы вам сейчас. Продолжай и создайте новый файл Python и назовите его draw_polygon.py Отказ Затем добавьте этот код:

# draw_polygon.py

from PIL import Image, ImageDraw


def polygon(output_path):
    image = Image.new("RGB", (400, 400), "grey")
    draw = ImageDraw.Draw(image)
    draw.polygon(((100, 100), (200, 50), (125, 25)), fill="green")

    draw.polygon(((175, 100), (225, 50), (200, 25)),
                  outline="yellow")

    image.save(output_path)

if __name__ == "__main__":
    polygon("polygons.jpg")

Этот код создаст серый образ, такой как последний пример в предыдущем разделе. Затем он создаст многоугольник, который заполнен цветным цветом. Затем он создаст второй многоугольник и выравнивает его желтым, не заполняя его.

В обоих чертежах вы снабжете три точки. Это создаст два треугольника.

Когда вы запускаете этот код, вы получите этот вывод:

Попробуйте изменить код, добавив дополнительные точки на один или несколько полигонов в коде выше. С небольшой практикой вы сможете быстро создавать сложные многоугольники с подушкой.

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

Прямоугольник () Метод позволяет нарисовать прямоугольник или квадрат, используя подушку. Вот как Прямоугольник () определено:

def rectangle(self, xy, fill=None, outline=None, width=1):
    """Draw a rectangle."""

Вы можете пройти через две кортежи, которые определяют начало и окончательные координаты, чтобы нарисовать прямоугольник. Или вы можете предоставить четыре координаты в качестве коробки кортеж (4 пункта кортежа). Тогда вы можете добавить Наброски , заполнить Это с цветом и измените контур ширина Отказ

Создайте новый файл и назовите его draw_rectangle.py Отказ Затем заполните его с помощью этого кода, чтобы вы могли начать рисовать прямоугольники:

# draw_rectangle.py

from PIL import Image, ImageDraw


def rectangle(output_path):
    image = Image.new("RGB", (400, 400), "blue")
    draw = ImageDraw.Draw(image)
    draw.rectangle((200, 100, 300, 200), fill="red")
    draw.rectangle((50, 50, 150, 150), fill="green", outline="yellow",
                   width=3)
    image.save(output_path)

if __name__ == "__main__":
    rectangle("rectangle.jpg")

Этот код создаст синее изображение, которое составляет 400 × 400 пикселей. Тогда это нарисует два прямоугольника. Первый прямоугольник будет наполнен красным. Второе будет наполнено зеленым и изложенным с желтым.

Когда вы запускаете этот код, вы получите это изображение в качестве вывода:

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

Обертывание

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

В этой статье вы узнали о следующих тем:

  • Общие параметры
  • Линии рисования
  • Рисование дуги
  • Рисование аккордов
  • Рисование эллипсов
  • Нанесение ломтиков пирога
  • Рисование полигонов
  • Рисование прямоугольников

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

Связанное чтение

  • Рисование текста на изображениях с питоном и подушкой
  • Pysimplegui: Рисование текста на изображениях с Python GUI

Подушка: обработка изображений с покупкой Python сейчас на leancub