Pillow – обработка изображений

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

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

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

Основная часть

Установка

pip install pillow

Открытие изображений

from PIL import Image
img = Image.open("example.jpg")
print(img.format, img.size, img.mode)

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

img.save("output.png")
img.save("compressed.jpg", quality=85)

Изменение размеров, поворот, обрезка

resized = img.resize((300, 300))
rotated = img.rotate(45)
cropped = img.crop((100, 100, 400, 400))

Конвертация форматов и цветовых моделей

grayscale = img.convert("L")  # черно-белое
rgba = img.convert("RGBA")

Рисование и добавление текста

from PIL import ImageDraw, ImageFont
img = Image.new("RGB", (500, 200), color=(255, 255, 255))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 40)
draw.text((10, 60), "Привет, мир!", font=font, fill=(0, 0, 0))

Применение фильтров

from PIL import ImageFilter
blurred = img.filter(ImageFilter.GaussianBlur(5))
sharpened = img.filter(ImageFilter.SHARPEN)

Слияние и наложение изображений

background = Image.open("bg.jpg")
overlay = Image.open("logo.png").convert("RGBA")
background.paste(overlay, (50, 50), overlay)

Анимации и работа с GIF

frames = [Image.open(f"frame_{i}.png") for i in range(5)]
frames[0].save("animated.gif", save_all=True, append_images=frames[1:], duration=300, loop=0)

Работа с пикселями

pixels = img.load()
for x in range(img.width):
    for y in range(img.height):
        r, g, b = pixels[x, y]
        pixels[x, y] = (255 - r, 255 - g, 255 - b)

Поддерживаемые форматы

Формат Поддержка чтения Поддержка записи
JPEG Да Да
PNG Да Да
BMP Да Да
GIF Да Да (анимация — частично)
TIFF Да Да
WebP Да Да

Примеры применения

  • Генерация динамических баннеров и аватарок

  • Обработка изображений перед ML-моделью

  • Конвертация форматов и минификация

  • OCR-подготовка (предобработка для Tesseract)

  • Создание превью и водяных знаков


Сравнение с другими библиотеками

Библиотека Основное назначение Работа с текстом Поддержка форматов
Pillow Общая обработка изображений Да Широкая
OpenCV Компьютерное зрение Ограничено Широкая
imageio Чтение/запись кадров и видео Нет Средняя

Полный список функций и методов библиотеки Pillow для Python, сгруппированных по категориям


Загрузка и сохранение изображений

Функция Описание
Image.open(fp) Загружает изображение из файла или потока.
Image.save(fp, format=None, ...) Сохраняет изображение в файл. Формат можно указать явно ("JPEG", "PNG" и др.).
Image.frombytes(mode, size, data) Создаёт изображение из сырых байтов.
Image.fromarray(array) Преобразует NumPy-массив в изображение.
Image.new(mode, size, color=0) Создаёт новое пустое изображение.
Image.copy() Возвращает копию изображения.

Получение информации

Атрибут / Метод Описание
img.format Формат изображения (JPEG, PNG, и т.д.).
img.mode Цветовой режим (RGB, RGBA, L, CMYK).
img.size Размер изображения (ширина, высота).
img.info Метаданные изображения (EXIF, DPI и т.п.).
img.getbands() Возвращает каналы изображения (R, G, B и т.д.).
img.getpixel((x, y)) Возвращает цвет пикселя по координатам.
img.histogram() Гистограмма изображения.

Обработка изображений

Метод Описание
img.resize(size, resample) Изменяет размер изображения.
img.crop(box) Вырезает прямоугольную область.
img.rotate(angle, expand=False) Поворачивает изображение.
img.transpose(method) Зеркальные отражения, повороты (FLIP_LEFT_RIGHT, ROTATE_90, и т.д.).
img.paste(im, box) Вставляет другое изображение или цвет.
img.convert(mode) Преобразует в другой цветовой режим (L, RGB, RGBA, и др.).
img.filter(filter) Применяет фильтр (из модуля ImageFilter).
img.point(function) Преобразует значения пикселей через функцию.

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

Функция / Класс Описание
ImageDraw.Draw(img) Позволяет рисовать на изображении.
draw.line(xy, fill, width) Рисует линию.
draw.rectangle(xy, fill, outline) Рисует прямоугольник.
draw.ellipse(xy, fill, outline) Рисует эллипс.
draw.text((x, y), text, font, fill) Печатает текст.
ImageFont.truetype(path, size) Загружает TrueType-шрифт для текста.

Работа с альфа-каналом и масками

Функция Описание
img.putalpha(alpha) Добавляет альфа-канал.
img.split() Разбивает изображение на отдельные каналы.
Image.merge(mode, bands) Объединяет каналы в одно изображение.
img.putpixel((x, y), value) Устанавливает значение пикселя.

Фильтры и улучшения

Фильтр / Класс Описание
ImageFilter.BLUR Размытие.
ImageFilter.CONTOUR Контур.
ImageFilter.DETAIL Повышение детализации.
ImageFilter.SHARPEN Резкость.
ImageEnhance.Brightness(img).enhance(factor) Изменение яркости.
ImageEnhance.Contrast(img).enhance(factor) Изменение контрастности.
ImageEnhance.Color(img).enhance(factor) Изменение насыщенности.

Сохранение в буфер и интеграция с другими библиотеками

Функция Описание
BytesIO() Создание потока для хранения изображения в памяти.
img.save(buffer, format="PNG") Сохраняет изображение в поток.
Image.fromarray(numpy_array) Преобразует массив NumPy в изображение.
numpy.array(img) Преобразует изображение в массив NumPy.

Пример: изменение размера и наложение текста

python
from PIL import Image, ImageDraw, ImageFont img = Image.open("input.jpg") img = img.resize((400, 400)) draw = ImageDraw.Draw(img) font = ImageFont.truetype("arial.ttf", 24) draw.text((10, 10), "Пример", fill="white", font=font) img.save("output.jpg")

Заключение

Pillow — универсальный инструмент для манипуляций с изображениями в Python. Он прост, гибок и покрывает широкий спектр задач: от элементарной обработки до генерации сложных изображений. Его используют в веб-приложениях, автоматизации, графических интерфейсах и нейросетевых пайплайнах.