Привет, мир!
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:
Другие 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 .