Как рисовать в питоне pil
Перейти к содержимому

Как рисовать в питоне pil

  • автор:

Компьютерная графика → Как рисовать на Python с помощью библиотеки Pillow?

В питоне есть библиотека PIL(Python Image Library) и его близнец Pillow(расширенная версия PIL).

Эта библиотека позволяют по разному работать с изображениями, в том числе и самому рисовать их. Если захотите вы можете с помощью этой библиотеки написать свой Photoshop.

В этой статье я кратко расскажу как создавать свои изображения и рисовать графики на них.

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

Создание нового изображения и сохранение в файл

Для начала мы попробуем создать пустое изображение размером 400×300 пикселей и сохраним его в файл с названием empty.png чтобы можно было его открыть и посмотреть.

Создайте новый .py файл и импортируйте следующие файлы:

from PIL import Image from PIL import ImageDraw

Image — это файл в котором есть все что нужно для открытия, создания и сохранения изображений. А ImageDraw — для рисования в изображениях.

Теперь создадим новое изображение с типом «RGB» и размером (400, 300) и сохраним в файл empty.png:

 image = Image.new("RGB", (400, 300)) image.save("empty.png", "PNG")

Как вы поняли у функции Image.new два параметра: первый — тип изображения и второй размеры. Размеры задаются в виде кортежа из двух значений.

Если вы запустите эту программу, вы получите в той же папке новый файл empty.png c черным фоном без ничего.

Рисуем линии и квадратики

Давайте попробуем нарисовать линию от точки (0,0) — верхняя левая и до точки (400,300) — нижняя правая.

image = Image.new("RGB", (400, 300)) draw = ImageDraw.Draw(image) draw.line((0, 0, 400, 300)) image.save("empty.png", "PNG") 

Функция line принимает один параметр, в котором должен быть кортеж из четырех значений: первые два — координаты начальной точки, последние два — координаты конечной точки.

Теперь нарисуем красную горизонтальную решетку c 10 линиями:

from PIL import Image, ImageColor from PIL import ImageDraw width = 400 height = 300 image = Image.new("RGB", (width, height)) draw = ImageDraw.Draw(image) draw.line((0, 0, width, height)) for i in range(10): x = int(width/10 * i) draw.line((x, 0, x, height), fill=ImageColor.getrgb("red")) image.save("empty.png", "PNG") 

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

Если вы заметили я импортировал файл ImageColor, которая помогает работе с цветами. Например чтобы получить цвет по имени нужно вызвать метод ImageColor.getrgb().

После этого у вас получится такое изображение:

Как рисовать на Python с помощью библиотеки Pillow

draw.rectangle((20, 20, 50, 100), fill=ImageColor.getrgb("cyan")) draw.rectangle((50, 101, 80, 120), fill=ImageColor.getrgb("magenta"), outline=ImageColor.getrgb("blue")) draw.rectangle((120, 120, 300, 250), outline=ImageColor.getrgb("yellow"), width=5)

Как рисовать на Python с помощью библиотеки Pillow?

Нарисуем эллипсы и круги:

draw.ellipse((200, 20, 250, 100), outline=ImageColor.getcolor("#F19033", "RGB"), width=2) draw.ellipse((140, 140, 220, 220), fill=ImageColor.getcolor("#FF0000", "RGB"))

Здесь я использовал функцию ImageColor.getcolor() чтобы получить цвет по его HEX значения в RGB палитре. И мы получаем:

Как рисовать на Python с помощью библиотеки Pillow

Это было самое простое. Идем дальше.

График функции и относительные координаты

Сейчас попробуем нарисовать график функции y=5*x^2+x^3-x^4. Гугл его нарисовал так:

Как рисовать на Python с помощью библиотеки Pillow

Смотрите, тут в гугле можно увеличивать и уменшать, двигать график в разные стороны. Это называется мастштабированием. Система координат на нашем изображении в python и система координат этого графика разные.

Давайте попробуем в лоб нарисовать график в нашей системе координат, не думаю о масштабах.

Создаем функцию для функции графика:

def function1(x): return 5 * (x ** 2) + x ** 3 - x ** 4

Рисуем график точками:

for x in range(width): # проходим по всей ширине y = function1(x) draw.point((x, y), fill=ImageColor.getrgb("red")) 

Получитcя такое изображение:

Как рисовать на Python с помощью библиотеки Pillow

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

Чтобы нарисовать график вам нужно мысленно попробовать наложить его на изображение:

Как рисовать на Python с помощью библиотеки Pillow

И возможно вы поймете как правильно рисовать.

Точка отсчета нашего изображения в левом верхнем углу, а у графика в центре. У нас ось Y увеличивается вниз, а у графика вверх. Крайние точки по оси Х у нас 0 и 400, а у графика -3 и 3. У нас нет отрицательных координат, а у графика есть. ����

1. Определим область для рисования графика и вычислим коэффициенты масштабрирования(наложения).
2. Все вычисления будем делать в системе координат графика
3. Когда нужно нарисовать уже, координаты графика будем конвертировать в наши коориданы используя коэффициенты масштабирования.

from PIL import Image, ImageColor from PIL import ImageDraw width = 400 height = 300 image = Image.new("RGB", (width, height)) draw = ImageDraw.Draw(image) # Заполним все изображение белым цветом draw.rectangle((0, 0, width, height), fill=ImageColor.getrgb("white")) def function1(x): return 5 * (x ** 2) + x ** 3 - x ** 4 class Point: # создал класс для удобства def __init__(self, x, y): self.x = x self.y = y # задаем область значений функции start_x = -4 end_x = 4 start_y = -15 end_y = 15 points = [] x = start_x step_x = 0.1 while x  

Как рисовать на Python с помощью библиотеки Pillow

Оо, это больше похоже на график функции? Давайте попробуем соединить точки линиями и добавить оси координат.

from PIL import Image, ImageColor from PIL import ImageDraw width = 400 height = 300 image = Image.new("RGB", (width, height)) draw = ImageDraw.Draw(image) # Заполним все изображение белым цветом draw.rectangle((0, 0, width-1, height-1), fill=ImageColor.getrgb("white"), outline=ImageColor.getrgb("grey")) def function1(x): return 5 * (x ** 2) + x ** 3 - x ** 4 class Point: # создал класс для удобства def __init__(self, x, y): self.x = x self.y = y # задаем область значений функции start_x = -4 end_x = 4 start_y = -15 end_y = 15 points = [] x = start_x step_x = 0.1 while x  

Как рисовать на Python с помощью библиотеки Pillow

Вот это наш график функции.

Мы написали универсальную функцию convert, которую можно использовать в любых случаях когда нужно масштабировать отображение. Теперь меняя переменные start_x, end_x, start_y, end_y вы можете двигать, увеличивать и уменьшать график!

Показать на экране

Чуть не забыл. Вы можете открыть изображение сразу, используя метод show()

image.show()

Или Через tKinter:

from PIL import Image, ImageTk import tkinter as tk window = tk.Tk() tk_image = ImageTk.PhotoImage(image) tk.Label(window, image=tk_image).pack() window.mainloop()

�� Как рисовать в Питоне с помощью PIL: пошаговое руководство для начинающих

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

Детальный ответ

Как рисовать в питоне с использованием PIL

Использование библиотеки PIL (Python Imaging Library) позволяет нам создавать и редактировать изображения в Python. В этой статье мы рассмотрим основные шаги, необходимые для рисования в питоне с помощью PIL.

Установка библиотеки PIL

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

 pip install pillow 

Импорт модуля Image из библиотеки PIL

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

 from PIL import Image 

Создание нового изображения

Теперь мы можем создать новое изображение, указав его размеры и цветовую схему. Вот пример кода:

 image = Image.new("RGB", (500, 500), "white") 

В этом примере мы создаем новое изображение с размером 500x500 пикселей и белым фоном. Вы можете выбрать другие цвета, указав соответствующие значения RGB.

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

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

Рисование линий

Для рисования линий на изображении, используйте метод draw.line(). Вот пример кода:

 draw = ImageDraw.Draw(image) draw.line((100, 100, 400, 400), fill="black", width=2) 

В этом примере мы рисуем линию с точками (100, 100) и (400, 400), цветом "black" и шириной 2 пикселя.

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

Для рисования прямоугольников на изображении, используйте метод draw.rectangle(). Вот пример кода:

 draw.rectangle((200, 200, 300, 400), fill="blue", outline="black", width=2) 

В этом примере мы рисуем прямоугольник с координатами (200, 200) и (300, 400), заполненный синим цветом, с черной границей толщиной 2 пикселя.

Рисование окружностей

Для рисования окружностей на изображении, используйте метод draw.ellipse(). Вот пример кода:

 draw.ellipse((250, 250, 450, 450), fill="red", outline="black", width=2) 

В этом примере мы рисуем окружность с координатами (250, 250) и (450, 450), заполненную красным цветом, с черной границей толщиной 2 пикселя.

Рисование текста

Для рисования текста на изображении, используйте метод draw.text(). Вот пример кода:

 font = ImageFont.truetype("arial.ttf", 24) draw.text((50, 50), "Привет, мир!", font=font, fill="black") 

В этом примере мы рисуем текст "Привет, мир!" с использованием шрифта Arial размером 24 пикселя, на координатах (50, 50) и черным цветом.

Сохранение изображения

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

 image.save("output.png") 

В этом примере мы сохраняем изображение в файл с именем "output.png". Вы можете использовать различные форматы файлов, указав соответствующее расширение, например, "output.jpg".

Полный пример кода

 from PIL import Image, ImageDraw, ImageFont # Создание нового изображения image = Image.new("RGB", (500, 500), "white") # Рисование на изображении draw = ImageDraw.Draw(image) # Рисование линии draw.line((100, 100, 400, 400), fill="black", width=2) # Рисование прямоугольника draw.rectangle((200, 200, 300, 400), fill="blue", outline="black", width=2) # Рисование окружности draw.ellipse((250, 250, 450, 450), fill="red", outline="black", width=2) # Рисование текста font = ImageFont.truetype("arial.ttf", 24) draw.text((50, 50), "Привет, мир!", font=font, fill="black") # Сохранение изображения image.save("output.png") 

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

Заключение

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

Основные возможности библиотеки Python Imaging Library / Pillow / PIL

PIL, известная как библиотека Python Imaging Library, может быть использована для работы с изображениями достаточно легким способом. У PIL не было никаких изменений и развития с 2009. Поэтому, добрые пользователи этого сайта предложили взглянуть на Pillow еще раз. Эта статья поможет вам узнать как пользоваться Pillow.

Что такое Pillow?

Pillow это форк PIL (Python Image Library), которая появилась благодаря поддержке Алекса Кларка и других участников. Основана на коде PIL, а затем преобразилась в улучшенную, современную версию. Предоставляет поддержку при открытии, управлении и сохранении многих форматов изображения. Многое работает так же, как и в оригинальной PIL.

Загрузка и установка Pillow

Перед началом использования Pillow, нужно загрузить и установить ее. Pillow доступна для Windows, Mac OS X и Linux. Самая “свежая” версия — это версия “8.1.0”, она поддерживается на python 3.6 и выше. Для установки Pillow на компьютеры Windows используйте conda или pip :

conda install -c anaconda pillow pip install Pillow

Для установки Pillow на компьютерах Linux просто используйте:

$ sudo pip install Pillow

А установки Pillow на MacOS X нужно для начала установить XCode, а затем Homebrew. После того как Homebrew установлен, используйте:

$ brew install libtiff libjpeg webp littlecms $ sudo pip install Pillow

Убедитесь, что Pillow установлена

Убедитесь, что Pillow установлена, откройте терминал и наберите следующее в текущей строке:

$ python Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from PIL import Image

Если система показывает снова >>> , значит модули Pillow правильно установлены.

Форматы файлов

Перед началом использования модуля Pillow, давайте укажем некоторые поддерживаемые типы файлов: BMP, EPS, GIF, IM, JPEG, MSP, PCX PNG, PPM, TIFF, WebP, ICO, PSD, PDF . Некоторые типы файлов возможны только для чтения, в то время как другие доступны только для написания. Чтобы увидеть полный список поддерживаемых типов файла и больше информации о них, ознакомьтесь с руководством к Pillow.

Как использовать Pillow для работы с изображениями

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

В нашем примере будем использовать стандартное тестовое изображение под названием «Lenna» или «Lena». Это изображение используется во многих экспериментах по обработке изображений. Просто зайдите сюда и загрузите изображение. Если вы нажмете на изображение, оно сохранится как изображение с количеством пикселей 512×512.

Использование Pillow

Давайте посмотрим на возможные варианты использования этой библиотеки. Основные функции находятся в модуле Image . Вы можете создавать экземпляры этого класса несколькими способами. Путем загрузки изображений из файлов, обработки других изображений, либо создания изображений с нуля. Импортируйте модули Pillow, которые вы хотите использовать.

Простейшее рисование с помощью PIL

Недавно потребовалось мне создавать картинку на лету. Решил спользовать библиотеку для питона PIL. Она поддерживает кучу форматов, а также множество цветовых систем (RGB, RGBA и более простые). Итак, рассмотрим простейшее, как создать рисунок и что-либо на нем нарисовать.

Для начала, подключим нужные модули.
from PIL import Image, ImageDraw

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

Теперь создадим новый рисунок:

image = Image.new("RGBA", (320,320), (0,0,0,0))

Здесь, первый параметр это тип картинки, может быть: 1 (черно-белый), L (монохромный, оттенки серого), RGB, RGBA (RGB с альфа каналом), CMYK, YCbCr, I (32 bit Integer pixels), F (32 bit Float pixels).

Второй параметр, это объект типа tuple задающий размер изображения.

Третий параметр, это непосредственно цвет, т.к. у нас RGBA, то запись (0,0,0,0) соответствует полной прозрачности.

После этого, чтобы нарисовать на нем что-либо, требуется создать объект ImageDraw и передать ему наш рисунок:

Попробуем нарисовать красный эллипс:

draw. ellipse((10,10,300,300), fill="red", outline="red")

Здесь мы рисуем эллипс, с начальными координатами: 10,10, и конечными: 300,300. Также, параметр fill задает цвет заливки, а outline — цвет контура. Помимо кодовых названий, можно использовать HTML запись, либо RGB(A) в виде tuple элемента.

Из доступных для рисования фигур доступны: кривая, линия, текст, вырезаный эллипс, точка, полигон.

После этого удалим draw и сохраним рисунок:

del draw
image.save("/path/to/save/test.png", "PNG")

image

После этого мы получи .png файл, в котором будет красный круг на прозрачном фоне:

Вот, думаю для начального понимания поможет кому-нибудь.

Нашел краткую документацию по официальной документации. (залил на свой сайт)

Официальный сайт с документацией

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *