JavaRush /Курсы /Python SELF /Управление форматами и конвертация

Управление форматами и конвертация

Python SELF
46 уровень , 2 лекция
Открыта

1. Определение формата изображения

Поддерживаемые форматы изображений

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

  • JPEG (JPG): Один из самых популярных форматов для фотографий. Сжимает изображение с потерей качества, но существенно уменьшает размер файла. Не поддерживает прозрачность.
  • PNG: Формат без потерь, который поддерживает прозрачность (альфа-канал). Подходит для логотипов, иконок и изображений, где важна четкость.
  • BMP: Формат с высоким качеством без сжатия, но большим размером файла. Поддерживает прозрачность.
  • TIFF: Популярен для хранения изображений без потерь. Часто используется в полиграфии.
  • WEBP: Современный формат с высокой степенью сжатия и поддержкой прозрачности. Подходит для веб-изображений, так как обеспечивает маленький размер файла при хорошем качестве.

Загрузка изображения для конвертации

Перед тем как конвертировать изображение, его нужно загрузить с помощью метода Image.open().

Python

from PIL import Image

# Открытие изображения
image = Image.open("example.jpg")
print(image.format)  # Проверяем исходный формат изображения

2. Конвертация изображения в другой формат

Метод save() позволяет сохранять изображения в различных форматах, просто изменяя расширение в имени файла или указывая формат явным образом.

Конвертация JPEG в PNG

Для конвертации изображения из JPEG в PNG просто укажите новое расширение при сохранении файла:

Python

# Сохранение изображения в формате PNG
image.save("example_converted.png")

Этот код преобразует изображение из формата JPEG в формат PNG, сохраняя его с указанным именем. PNG отлично подходит для сохранения изображений без потерь, а также поддерживает прозрачные области.

Конвертация PNG в JPEG

Конвертация изображения из PNG в JPEG также возможна, но важно помнить, что JPEG не поддерживает прозрачность. При конвертации прозрачные области будут заполнены белым цветом.

Python

# Конвертация 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).

Python

# Сохранение изображения JPEG с уменьшенным качеством
image.save("example_compressed.jpg", "JPEG", quality=85)

Этот код сохраняет изображение с качеством 85, что обычно позволяет сохранить хорошее качество при уменьшенном размере файла. Если требуется меньшее качество, например, для создания миниатюр, можно указать quality = 50.

Оптимизация PNG

Для PNG параметр optimize = True выполняет сжатие без потерь, удаляя избыточные данные. Это особенно полезно для публикации изображений в интернете.

Python

# Сохранение оптимизированного PNG
image.save("example_optimized.png", "PNG", optimize=True)

Оптимизация PNG помогает уменьшить размер файла без потерь качества, что особенно важно для логотипов и иконок, где каждый килобайт может иметь значение.

Сравнение качества JPEG с разным уровнем сжатия

Давайте рассмотрим, как изменение параметра quality влияет на размер файла и качество изображения.

Python

# Сохранение изображения 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

Python

# Конвертация изображения в WebP
image.save("example.webp", "WEBP", quality=80)

В этом примере мы сохраняем изображение в формате WebP с качеством 80. WebP позволяет добиться значительно меньшего размера файла по сравнению с JPEG или PNG при схожем качестве.

Пример полной конвертации с оптимизацией

Теперь объединим все рассмотренные методы и создадим скрипт для конвертации изображения в несколько форматов с оптимизацией.

Python

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, который идеально подходит для публикации в интернете, сохраняя высокое качество при небольшом размере файла.
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Vlad Tagunkov Уровень 38
22 января 2025
снова примеры без картинок. ну что мешает вот тут

# Сохранение изображения 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)
вставить примеры с картинками?