Привет, мир!

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

Что такое ПИЛ?

PIL (Python Imaging Library) — это сторонняя библиотека, предоставляющая Python возможности редактирования изображений. Он поддерживает множество распространенных форматов изображений, таких как PNG, JPEG, GIF, BMP, TIFF и т. д. Он также предлагает различные функции обработки изображений, такие как изменение размера, обрезка, поворот, фильтрация, рисование и т. д.

Первоначально PIL был разработан Фредриком Лундом и участниками в 1995 году. Однако исходный проект PIL перестал обновляться с 2009 года. К счастью, в 2010 году Alex Clark и Contributors создали удобный форк PIL под названием Pillow. Pillow совместим с исходным API PIL. и со временем добавил новые функции и исправления ошибок. Pillow теперь является рекомендуемым способом использования PIL в Python.

Как установить ПИЛ?

Чтобы установить PIL (или Pillow), вы можете использовать команды pip или conda. Например:

python  
# Using pip  
pip install Pillow  
  
# Using conda  
conda install Pillow

Вы также можете загрузить исходный код с https://pypi.org/project/Pillow/ и собрать его самостоятельно.

Как использовать ПИЛ?

Чтобы использовать PIL в коде Python, вам нужно импортировать модуль Image из PIL:

from PIL import Image

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

Загрузка изображения

Чтобы загрузить изображение из файла, вы можете использовать метод Image.open():

# Load an image from a file  
img = Image.open("example.png")

Метод Image.open() возвращает объект Image, содержащий пиксельные данные и метаданные изображения. Вы можете получить доступ к некоторым из его атрибутов и методов, используя запись через точку:

# Print the format of the image  
print(img.format) # PNG  
  
# Print the size of the image (width x height)  
print(img.size) # (640 x 480)  
  
# Print the mode of the image (color space)  
print(img.mode) # RGB  
  
# Show the image on your screen  
img.show()

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

Чтобы создать изображение с нуля, вы можете использовать метод Image.new():

# Create a new image with given mode and size  
img = Image.new("RGB", (300 x 200))

Первый аргумент Image.new() — это режим изображения. Режим определяет, сколько цветов и каналов используется для представления каждого пикселя. Некоторые распространенные режимы:

  • «RGB»: 3 канала для красного, зеленого и синего цветов (8 бит на канал)
  • «RGBA»: 4 канала для красного, зеленого и синего цветов и альфа-прозрачности (8 бит на канал)
  • «L»: 1 канал для значений оттенков серого (8 бит на канал)
  • «1»: 1 бит на пиксель для черно-белых изображений.

Второй аргумент Image.new() — это размер изображения в виде кортежа ширины и высоты в пикселях.

Вы также можете указать третий аргумент для Image.new(), который представляет собой цвет каждого пикселя как отдельное значение или набор значений, в зависимости от режима. Например:

# Create a new red image with RGB mode  
img = Image.new("RGB", (300 x 200), (255 x 0 x 0))  
  
# Create a new white image with L mode  
img = Image.new("L", (300 x 200), 255)

Если вы не укажете аргумент цвета для Image.new(), по умолчанию он будет черным или прозрачным, в зависимости от режима.

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

Чтобы сохранить изображение с помощью Pillow, вам нужно сначала создать объект изображения из существующего файла или данных. Вы можете использовать функцию Image.open(), чтобы открыть файл изображения и вернуть объект изображения. Например:

from PIL import Image  
  
# Open an image file and create an Image object  
img = Image.open("example.jpg")

Чтобы сохранить объект изображения в новый файл, вы можете использовать метод Image.save(). В качестве аргументов можно указать имя файла и формат. Например:

# Save the Image object as a PNG file  
img.save("example.png")

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

# Save the Image object as a GIF file  
img.save("example.gif", format="GIF")

Изменение размера изображений

Чтобы изменить размер изображения с помощью Pillow, вы можете использовать метод Image.resize(). Вам нужно передать кортеж (ширина, высота) в качестве аргумента. Метод возвращает новый объект Image с измененным размером. Например:

# Resize the image to 300x200 pixels  
resized_img = img.resize((300, 200))

Вы также можете указать фильтр повторной выборки в качестве необязательного аргумента, чтобы управлять изменением размера изображения. Фильтр по умолчанию — БЛИЖАЙШИЙ, который работает быстро, но может создавать неровные края. Другими фильтрами являются BILINEAR, BICUBIC, LANCZOS и т. д., которые могут давать более плавные результаты, но работают медленнее. Например:

# Resize the image using BICUBIC filter  
resized_img = img.resize((300, 200), resample=Image.BICUBIC)

Вращение и отражение изображений

Чтобы повернуть изображение с помощью Pillow, вы можете использовать метод Image.rotate(). Вам нужно передать угол в градусах в качестве аргумента. Метод возвращает новый повернутый объект изображения. Например:

# Rotate the image by 90 degrees clockwise  
rotated_img = img.rotate(90)

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

Чтобы перевернуть изображение с помощью Pillow, вы можете использовать любой из этих методов:

  • Image.transpose() с любой из этих констант:
  • 1. Image.FLIP_LEFT_RIGHT (для отражения по горизонтали)
  • 2. Image.FLIP_TOP_BOTTOM (для отражения по вертикали)
  • Image.TRANSPOSE (для транспонирования по диагонали)
  • Image.TRANSVERSE (пересекать по диагонали)

Эти методы возвращают новые перевернутые или транспонированные объекты Image.

Например:

# Flip horizontally  
flipped_img = img.flip_left_right()  
  
# Flip vertically  
flipped_img = img.flip_top_bottom()  
  
# Transpose diagonally  
transposed_img = img.transpose()  

Пожертвования и прочее

Если вы хотите поддержать меня, рассмотрите возможность подписки на Medium, используя мою реферальную ссылку:



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

https://inzaniak.bandcamp.com

Другие URL-адреса:

Личный сайт: https://inzaniak.github.io
Социальные ссылки: https://inzaniak.github.io/links.html
Linkedin: https://www.linkedin .com/in/umberto-grando-a8527b150/

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .