На этом шаге мы рассмотрим основные методы, используемые для рисования фигур.
Чтобы на изображении можно было рисовать, необходимо создать экземпляр класса Draw, передав в конструктор класса ссылку на изображение. Прежде чем использовать класс, предварительно следует импортировать модуль ImageDraw. Пример создания экземпляра класса:
>>> from PIL import Image, ImageDraw >>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) # Создаем экземпляр класса
Класс Draw предоставляет следующие методы:
>>> from PIL import Image, ImageDraw >>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) >>> for n in range(5, 31): draw.point( (n, 5), fill=(255, 0, 0) ) >>> img.show()
Результат
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255))
>>> draw = ImageDraw.Draw(img)
>>> draw.line ( (0, 0, 0, 300), fill=(0, 128, 0) )
>>> draw.line ( (297, 0, 297, 300), fill=(0, 128, 0), width=3 )
>>> img.show ()
Результат
rectangle(<Координаты>[, fill=<Цвет заливки>] [, outline=<Цвет линии>])
В параметре <Координаты> указываются координаты двух точек: левого верхнего и правого нижнего углов рисуемого прямоугольника. Нарисуем три прямоугольника: первый - с рамкой и заливкой, второй - только с заливкой, а третий - только с рамкой:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) # Создаем экземпляр класса >>> draw.rectangle ( (10, 10, 30, 30), fill=(0, 0, 255), outline=(0, 0, 0) ) >>> draw.rectangle ( (40, 10, 60, 30), fill=(0, 0, 128)) >>> draw.rectangle ( (0, 0, 299, 299), outline=(0, 0, 0)) >>> img.show ()
Результат
polygon(<Координаты>[, fill=<Цвет заливки>][, outline=<Цвет линии>] )
В параметре <Координаты> указывается кортеж с координатами трех и более точек: из каждой пары элементов этого списка первая задает горизонтальную координату, вторая - вертикальную. Точки соединяются линиями. Кроме того, проводится прямая линия между первой и последней точками. Пример:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) # Создаем экземпляр класса >>> draw.polygon( (50, 50, 150, 150, 50, 150), outline=(0,0,0), fill=(255, 0, 0)) # Треугольник >>> draw.polygon ( (200, 200, 250, 200, 275, 250, 250, 300, 200, 300, 175, 250), fill=(255, 255, 0)) >>> img.show ()
Результат
ellipse(<Координаты> [, fill=<Цвет заливки>][, outline=<Цвет линии>])
В параметре <Координаты> указывается кортеж с координатами верхнего левого и правого нижнего углов прямоугольника, в который необходимо вписать эллипс. Из каждой пары элементов этого кортежа первый задает горизонтальную координату, второй - вертикальную. Пример:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255)) >>> draw = ImageDraw.Draw(img) # Создаем экземпляр класса >>> draw.ellipse ( (100, 100, 200, 200), fill=(255, 255, 0)) >>> draw.ellipse ( (50, 170, 150, 300), outline=(0, 255, 255)) >>> img.show ()
Результат
arc (<Координаты>, <Начальный угол>, <Конечный угол>, fill=<Цвет линии>)
В параметре <Координаты> указываются координаты прямоугольника, в который необходимо вписать окружность. Второй и третий параметры задают начальный и конечный угол, между которыми будет отображена дуга. Угол, равный 0, расположен в крайней правой точке. Углы откладываются по часовой стрелке от 0 до 360 градусов. Линия рисуется по часовой стрелке. Пример:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255))
>>> draw = ImageDraw.Draw(img)
>>> draw.arc ( (10, 10, 290, 290), 180, 0, fill=(255, 0, 0) )
>>> img.show ()
Результат
chord (<Координаты>, <Начальный угол>, <Конечный угол>, [, fill=<Цвет заливки>][, outline=<Цвет линии>])
Метод chord () аналогичен методу arc (), но замыкает крайние точки дуги прямой линией. Пример:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255))
>>> draw = ImageDraw.Draw(img)
>>> draw.chord ( (10, 10, 290, 290), 180, 0, fill=(255, 0, 0) )
>>> draw.chord ( (10, 10, 290, 290), -90, 0, fill=(255, 255, 0))
>>> img.show ()
Результат
pieslice (<Координаты>, <Начальный угол>, <Конечный угол>, [, fill=<Цвет заливки>][, outline=<Цвет линии>])
Метод pieslice () аналогичен методу arc (), но замыкает крайние точки дуги с центром окружности. Пример:
>>> img = Image.new ("RGB", (300, 300), (255, 255, 255))
>>> draw = ImageDraw.Draw(img)
>>> draw.pieslice ( (10, 10, 290, 290), -90, 0, fill="red")
>>> img.show ()
Результат
Со следующего шага мы начнем знакомиться с библиотекой Wand.