1. Визначення формату зображення
Підтримувані формати зображень
Pillow підтримує роботу з багатьма форматами зображень, включаючи:
- JPEG (JPG): Один із найпопулярніших форматів для фотографій. Стискає зображення з втратою якості, але суттєво зменшує розмір файлу. Не підтримує прозорість.
- PNG: Формат без втрат, що підтримує прозорість (альфа-канал). Підходить для логотипів, іконок та зображень, де важлива чіткість.
- BMP: Формат з високою якістю без стиснення, але великим розміром файлу. Підтримує прозорість.
- TIFF: Популярний для зберігання зображень без втрат. Часто використовується у поліграфії.
- WEBP: Сучасний формат із високим ступенем стиснення та підтримкою прозорості. Підходить для веб-зображень, оскільки забезпечує малий розмір файлу при гарній якості.
Завантаження зображення для конвертації
Перед тим як конвертувати зображення, його потрібно завантажити за допомогою методу Image.open().
from PIL import Image
# Відкриття зображення
image = Image.open("example.jpg")
print(image.format) # Перевіряємо початковий формат зображення
2. Конвертація зображення в інший формат
Метод save() дозволяє зберігати зображення у різних форматах, просто змінюючи розширення у назві файлу або вказуючи формат явно.
Конвертація JPEG у PNG
Для конвертації зображення з JPEG у PNG просто вкажіть нове розширення при збереженні файлу:
# Збереження зображення у форматі PNG
image.save("example_converted.png")
Цей код перетворює зображення з формату JPEG у формат PNG, зберігаючи його з вказаною назвою. PNG чудово підходить для збереження зображень без втрат, а також підтримує прозорі області.
Конвертація PNG у JPEG
Конвертація зображення з PNG у JPEG також можлива, але важливо пам'ятати, що JPEG не підтримує прозорість. При конвертації прозорі області будуть заповнені білим кольором.
# Конвертація PNG у JPEG (прозорість буде замінена білим фоном)
image = image.convert("RGB") # Перемикання у режим RGB, необхідний для JPEG
image.save("example_converted.jpg", "JPEG")
Метод convert("RGB") використовується для перетворення зображення у режим RGB, оскільки JPEG не підтримує прозорі області. Це необхідно для збереження файлу у форматі JPEG.
3. Управління якістю зображення
Для оптимізації зображень Pillow пропонує параметри quality і optimize, які дозволяють контролювати якість та розмір файлу. Ці параметри особливо корисні для JPEG і PNG.
Оптимізація та управління якістю JPEG
При збереженні зображення у форматі JPEG параметр quality регулює ступінь стиснення. Чим вище значення якості, тим більше розмір файлу і тим вища якість зображення. Значення quality варіюється від 1 до 95 (за замовчуванням 75).
# Збереження зображення JPEG зі зменшеною якістю
image.save("example_compressed.jpg", "JPEG", quality=85)
Цей код зберігає зображення з якістю 85, що зазвичай дозволяє зберегти гарну якість при зменшеному розмірі файлу. Якщо потрібна менша якість, наприклад, для створення мініатюр, можна вказати quality = 50.
Оптимізація PNG
Для PNG параметр optimize = True виконує стиснення без втрат, видаляючи надлишкові дані. Це особливо корисно для публікації зображень в інтернеті.
# Збереження оптимізованого PNG
image.save("example_optimized.png", "PNG", optimize=True)
Оптимізація PNG допомагає зменшити розмір файлу без втрат якості, що особливо важливо для логотипів та іконок, де кожен кілобайт може мати значення.
Порівняння якості JPEG з різним рівнем стиснення
Давайте розглянемо, як зміна параметра quality впливає на розмір файлу і якість зображення.
# Збереження зображення JPEG з різною якістю
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)
У цьому прикладі ми зберігаємо одне й те саме зображення з трьома рівнями якості: 95, 75 і 50. Зображення з якістю 95 буде практично не відрізнятись від оригіналу, але займатиме більше місця, тоді як якість 50 призведе до значної компресії і, можливо, помітної втрати деталей.
4. Використання формату WebP
Формат WebP — це сучасний формат, який підтримує як стиснення з втратами, так і без втрат, а також прозорість. Він широко використовується в інтернеті завдяки високому рівню стиснення.
Конвертація зображення у формат WebP
# Конвертація зображення у WebP
image.save("example.webp", "WEBP", quality=80)
У цьому прикладі ми зберігаємо зображення у форматі WebP з якістю 80. WebP дозволяє досягти значно меншого розміру файлу порівняно з JPEG або PNG при схожій якості.
Приклад повної конвертації з оптимізацією
Тепер об'єднаємо всі розглянуті методи і створимо скрипт для конвертації зображення у кілька форматів з оптимізацією.
from PIL import Image
# Відкриття зображення
image = Image.open("example.jpg")
# Конвертація у PNG з оптимізацією
image.save("converted_optimized.png", "PNG", optimize=True)
# Конвертація у JPEG зі зменшеною якістю
image_rgb = image.convert("RGB") # Перемикання у режим RGB для JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)
# Конвертація у WebP з оптимізацією якості
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)
У цьому прикладі:
- Ми конвертуємо зображення у PNG з оптимізацією, що допомагає зменшити розмір файлу без втрат.
- Зберігаємо зображення у форматі JPEG з якістю 85, що забезпечує гарну якість та малий розмір файлу.
- Конвертуємо зображення у формат WebP, який ідеально підходить для публікації в інтернеті, зберігаючи високу якість при невеликому розмірі файлу.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ