Библиотека Pillow интересные лайфхаки с изображениями

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

В этой статье мы рассмотрим основные возможности Pillow, а также поделимся несколькими интересными лайфхаками для работы с изображениями.

Основные возможности Pillow

Pillow предоставляет обширный функционал для работы с изображениями, включая:

  1. Открытие и сохранение изображений: поддерживаются популярные форматы, такие как JPEG, PNG, BMP, GIF и другие.
  2. Изменение размера и обрезка: простое масштабирование и обрезка изображений.
  3. Обработка цветов: конвертация между цветовыми пространствами (RGB, Grayscale и т.д.).
  4. Фильтры и эффекты: применение различных фильтров, таких как размытие или резкость.
  5. Рисование: добавление текста, фигур и других элементов поверх изображений.
  6. Анимация: работа с GIF-анимациями.
Установка

Для установки Pillow достаточно выполнить следующую команду:

pip install pillow

После установки можно импортировать библиотеку следующим образом:

from PIL import Image, ImageDraw, ImageFont, ImageFilter
Интересные лайфхаки с использованием Pillow
1. Быстрое изменение размера изображения с сохранением пропорций

Часто возникает задача уменьшить изображение до определённых размеров, сохраняя пропорции. С Pillow это легко:

from PIL import Image

image = Image.open("example.jpg")
image.thumbnail((800, 800))  # Устанавливаем максимальные размеры
image.save("resized_example.jpg")

thumbnail автоматически сохраняет пропорции изображения.

2. Наложение водяного знака

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

from PIL import Image, ImageDraw, ImageFont

# Открываем изображение
image = Image.open("example.jpg")
draw = ImageDraw.Draw(image)

# Указываем шрифт и текст
font = ImageFont.truetype("arial.ttf", 36)
text = "Watermark"

# Располагаем текст в правом нижнем углу
text_width, text_height = draw.textsize(text, font=font)
position = (image.width - text_width - 10, image.height - text_height - 10)

# Рисуем текст
draw.text(position, text, font=font, fill=(255, 255, 255, 128))

# Сохраняем изображение
image.save("watermarked_example.jpg")

3. Создание размытого фона

Этот приём популярен для создания постеров или миниатюр.

from PIL import Image, ImageFilter

image = Image.open("example.jpg")
blurred = image.filter(ImageFilter.GaussianBlur(15))
blurred.save("blurred_background.jpg")

Можно комбинировать размытый фон с другим изображением или текстом.

4. Слияние нескольких изображений

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

from PIL import Image

# Открываем изображения
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")

# Создаём новое изображение, куда будем вставлять исходные
collage_width = image1.width + image2.width
collage_height = max(image1.height, image2.height)
collage = Image.new("RGB", (collage_width, collage_height))

# Вставляем изображения
collage.paste(image1, (0, 0))
collage.paste(image2, (image1.width, 0))

collage.save("collage.jpg")
5. Добавление рамки к изображению

Простой способ добавить рамку:

from PIL import ImageOps

image = Image.open("example.jpg")
bordered = ImageOps.expand(image, border=20, fill='black')
bordered.save("bordered_example.jpg")

Библиотека Pillow — это инструмент для работы с изображениями в Python. Она позволяет решать как простые задачи, так и реализовывать сложные эффекты.