Найти в Дзене
Анастасия Софт

🖼️ Pillow talk: как редактировать картинки на Python

Картинки — это не только мемы и аватарки. Часто нужно их обрезать, сжать, наложить водяной знак или просто переконвертировать из .png в .jpeg. И тут приходит на помощь библиотека Pillow — мощный инструмент для работы с изображениями на Python. В этой статье: pip install pillow from PIL import Image
# Открываем изображение
img = Image.open("example.jpg")
# Сохраняем в другом формате
img.save("example.png") 🔍 Комментарий: Допустим, надо уменьшить изображение до превьюшки 200x200 пикселей: img = Image.open("example.jpg")
# Изменяем размер
resized = img.resize((200, 200))
# Сохраняем
resized.save("example_resized.jpg") 🔍 Важно: resize() может "сжать" или "растянуть" картинку, искажая пропорции. Если хочешь сохранить соотношение сторон — смотри следующий пример. def resize_keep_aspect(img, base_width):
w_percent = base_width / float(img.width)
h_size = int((float(img.height) * float(w_percent)))
return img.resize((base_width, h_size), Image.LANCZOS)
img = Image.open("exam
Оглавление
Pillow talk: как редактировать картинки на Python
Pillow talk: как редактировать картинки на Python

Картинки — это не только мемы и аватарки. Часто нужно их обрезать, сжать, наложить водяной знак или просто переконвертировать из .png в .jpeg. И тут приходит на помощь библиотека Pillow — мощный инструмент для работы с изображениями на Python.

В этой статье:

  • 5+ реальных задач
  • Подробный разбор кода
  • Комментарии к каждой строчке
  • Немного юмора, чтобы не заснуть над пикселями 😎

🧰 Установка Pillow

pip install pillow

🧪 Пример 1: Открытие и сохранение изображения

from PIL import Image

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

# Сохраняем в другом формате
img.save("example.png")

🔍 Комментарий:

  • Image.open() — открывает изображение в любом популярном формате.
  • img.save() — сохраняем, можно в новом формате.

📐 Пример 2: Ресайз изображения (resize)

Допустим, надо уменьшить изображение до превьюшки 200x200 пикселей:

img = Image.open("example.jpg")

# Изменяем размер
resized = img.resize((200, 200))

# Сохраняем
resized.save("example_resized.jpg")

🔍 Важно: resize() может "сжать" или "растянуть" картинку, искажая пропорции. Если хочешь сохранить соотношение сторон — смотри следующий пример.

📏 Пример 3: Ресайз с сохранением пропорций

def resize_keep_aspect(img, base_width):
w_percent = base_width / float(img.width)
h_size = int((float(img.height) * float(w_percent)))
return img.resize((base_width, h_size), Image.LANCZOS)

img = Image.open("example.jpg")
resized = resize_keep_aspect(img, 300)
resized.save("example_resized.jpg")

💡 Image.LANCZOS — продвинутый фильтр для лучшего качества при уменьшении изображения.

💾 Пример 4: Сжатие изображения (уменьшение размера файла)

img = Image.open("example.jpg")

# Сохраняем с качеством 60 (из 100)
img.save("example_compressed.jpg", quality=60, optimize=True)

📦 Это уменьшит размер файла, особенно полезно для сайтов.

💧 Пример 5: Добавление водяного знака

from PIL import ImageDraw, ImageFont

img = Image.open("example.jpg").convert("RGBA")

# Создаем новый слой
watermark = Image.new("RGBA", img.size, (255,255,255,0))
draw = ImageDraw.Draw(watermark)

# Настраиваем шрифт
font = ImageFont.truetype("arial.ttf", 36)

# Пишем текст внизу справа
text = "© MyBrand"
textwidth, textheight = draw.textsize(text, font)
x = img.width - textwidth - 10
y = img.height - textheight - 10

draw.text((x, y), text, font=font, fill=(255,255,255,128))

# Объединяем
combined = Image.alpha_composite(img, watermark)
combined.convert("RGB").save("example_watermarked.jpg")

💧 Водяной знак полупрозрачный и не портит изображение.

🔁 Пример 6: Пакетная обработка (все .jpg в папке → .webp)

import os

for filename in os.listdir("images"):
if filename.endswith(".jpg"):
img = Image.open(os.path.join("images", filename))
base = os.path.splitext(filename)[0]
img.save(os.path.join("images", base + ".webp"), "WEBP")

🌀 Отлично работает для конвертации изображений перед загрузкой на сайт.

🧠 Что ещё умеет Pillow?

  • Кадрирование (crop)
  • Повороты (rotate, transpose)
  • Фильтры и эффекты (ImageFilter)
  • Работа с альфа-каналом и масками
  • Рисование поверх изображения (ImageDraw)
  • Поддержка десятков форматов: JPG, PNG, WEBP, GIF, BMP, ICO, TIFF...

🔚 Заключение

С помощью Pillow можно легко:

  • уменьшить размер картинки
  • переконвертировать её в нужный формат
  • защитить логотипом
  • и сделать всё это в коде, без Photoshop и ручной обработки