Гид по технологиям

Как конвертировать форматы изображений в Python

6 min read Python Обновлено 08 Apr 2026
Конвертация изображений в Python — руководство
Конвертация изображений в Python — руководство

Конвертер форматов изображений на Python

Введение

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

В этой статье вы найдёте:

  • базовые примеры с библиотекой Pillow;
  • как проверять свойства изображения;
  • советы по прозрачности и режимам (modes);
  • обработку ошибок и пакетную конвертацию;
  • чек‑лист и тесты для надёжного скрипта.

Важно: примеры сохраняют техническую точность и работают на актуальной версии Pillow. Термин «режим» (mode) в Pillow — строка, определяющая формат пикселя (например, “RGB”, “RGBA”).

Установка необходимых библиотек

Для работы используется библиотека Pillow — форк PIL с расширенной поддержкой форматов. Установите её командой:

pip install pillow

Если вы используете виртуальное окружение (venv, pipenv, poetry), установите пакет туда, чтобы не менять глобальные зависимости.

Загрузка изображения и чтение свойств

Импортируйте модуль Image из PIL и откройте файл. Ниже — минимальный пример для загрузки и просмотра изображения:

from PIL import Image
image = Image.open('sample-image.jpg')
image.show()

Чтобы получить метаданные и свойства изображения:

# Импортирование библиотеки
from PIL import Image

# Загрузка изображения
image = Image.open('sample-image.jpg')

# Имя файла
print("Filename:", image.filename)

# Формат (PNG, JPEG, GIF и т.д.)
print("Format:", image.format)

# Режим (RGB, RGBA, CMYK и т.д.)
print("Mode:", image.mode)

# Размер (width, height) в пикселях
print("Size:", image.size)
print("Width:", image.width)
print("Height:", image.height)

# Закрываем
image.close()

Вывод примера выглядит примерно так (с реальными значениями для вашего файла):

Вывод Python с метаданными изображения из файла

Основы конвертации формата

Метод save() автоматически определяет формат по расширению файла в имени. Часто требуется корректно привести изображение к нужному режиму (mode): например, JPG не поддерживает альфа‑канал, поэтому нужно преобразовать RGBA → RGB и при необходимости залить фон.

Pillow поддерживает стандартные режимы:

  • RGB — 3×8‑бит, истинный цвет;
  • RGBA — RGB с альфа‑каналом (прозрачность);
  • CMYK — 4×8‑бит для печати;
  • L — градации серого (luminance);
  • P — палитровый режим (например, GIF).

Конвертация PNG → JPG (с потерей прозрачности)

Если у изображения есть альфа‑канал и вы хотите получить JPG, нужно убрать альфа‑канал. Один из распространённых подходов — наложить изображение на белый фон (или любой другой):

from PIL import Image

# Загрузка
image = Image.open('sample-png-image.png')

# Если есть альфа, приводим к RGB на белом фоне
if image.mode == 'RGBA':
    background = Image.new('RGB', image.size, (255, 255, 255))
    background.paste(image, mask=image.split()[3])  # 3 — альфа канал
    background.save('converted-jpg-image.jpg', 'JPEG')
else:
    image.convert('RGB').save('converted-jpg-image.jpg', 'JPEG')

print('Image successfully converted!')

Если просто вызвать image.convert(‘RGB’).save(…), прозрачность будет утеряна без контроля над цветом фона. Приведённый вариант даёт предсказуемый фон.

Конвертация JPG → PNG (сохранение прозрачности недоступно)

JPG не содержит прозрачности, поэтому простой переход в PNG даст обычное RGB/без‑альфа изображение:

from PIL import Image

image = Image.open('sample-jpg-image.jpg')
image.save('converted-png-image.png', 'PNG')
print('Image successfully converted!')

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

Конвертация в WebP и другие форматы

Принцип тот же: указываете нужное расширение или формат в save(). Для WebP:

from PIL import Image

image = Image.open('sample-transparent-png-image.png')
image.save('converted-webp-image.webp', 'WEBP')
print('Image successfully converted!')

Обратите внимание: поддержка формата зависит от сборки Pillow (наличие соответствующих библиотек на системе). Если формат не поддерживается, Pillow бросит исключение OSError.

Обработка ошибок при отсутствии файла и при недоступных форматах

Всегда используйте try/except вокруг операций ввода‑вывода или конвертации:

from PIL import Image

try:
    image = Image.open('wrong-filename.jpg')
    image.save('converted-png-image.png')
    print('Image successfully converted!')
except FileNotFoundError:
    print("Не найден указанный файл")
except OSError as e:
    print("Ошибка формата или сохранения:", e)

Пакетная конвертация каталога

Для обработки всех файлов в папке удобно использовать модуль glob. Пример: конвертация всех JPG в PNG с обработкой ошибок:

from PIL import Image
import glob
import os

for file in glob.glob('*.jpg'):
    try:
        img = Image.open(file)
        new_name = os.path.splitext(file)[0] + '.png'
        img.save(new_name, 'PNG')
        print(f'Converted {file} -> {new_name}')
    except Exception as e:
        print(f'Ошибка при обработке {file}:', e)

Если нужно конвертировать все форматы в единый формат (например, в WebP), можно использовать шаблон glob.glob(‘*’) и фильтровать по расширениям или по успешному открытию через Image.open.

Продвинутые моменты и советы

  • Массовая обработка и производительность: для тысяч изображений используйте batch‑подход, профилируйте I/O и, при необходимости, параллелизуйте конвертацию с помощью multiprocessing. Следите за пулом файловых дескрипторов.
  • Качество и параметры: для JPEG можно задавать параметр quality (0–100), для WebP — quality и методы сжатия.
  • EXIF и метаданные: при сохранении формата часть метаданных может потеряться. Чтобы сохранить EXIF, используйте параметр exif из объекта Image.info, где это поддерживается.
  • Цветовой профиль: при конвертации для печати учитывайте профили ICC; Pillow поддерживает их частично.

Примеры обработки прозрачности и масок

Сделаем белый фон прозрачным и сохраним в PNG:

from PIL import Image

img = Image.open('photo-with-white-bg.jpg').convert('RGBA')
 datas = img.getdata()

newData = []
for item in datas:
    # если пиксель почти белый — делаем прозрачным
    if item[0] > 240 and item[1] > 240 and item[2] > 240:
        newData.append((255, 255, 255, 0))
    else:
        newData.append(item)

img.putdata(newData)
img.save('photo-with-transparent-bg.png', 'PNG')

Такой подход подходит для простых случаев; для сложных фонов потребуются алгоритмы сегментации.

Чек‑лист перед деплоем скрипта конвертации (роль разработчика/оператора)

  • Установлен Pillow в нужной версии в виртуальном окружении
  • Проверена поддержка целевых форматов на тестовой машине
  • Настроена обработка ошибок и логирование
  • Добавлены ограничения по размеру входных файлов
  • Тесты на нескольких образцах (прозрачность, CMYK, палитра)
  • Резервное копирование исходных файлов перед массовой заменой

Таблица совместимости форматов (ориентир)

Исходный форматМожно конвертировать вПримечания
PNG (RGBA)JPG, PNG, WEBP, BMPЕсли в JPG — альфа теряется; нужно определить фон
JPGPNG, WEBP, BMPJPG не содержит альфы
GIF (анимация)GIF, WebP (аним.), PNG (первый кадр)При преобразовании в PNG анимация потеряется
TIFFPNG, JPG, WebPTIFF может содержать многостраничные данные

Критерии приёмки

  • Скрипт корректно конвертирует тестовые файлы (PNG→JPG, JPG→PNG, PNG→WEBP).
  • Альфа‑канал правильно обрабатывается согласно спецификации (заливка/маска).
  • При ошибках создаётся лог с именем файла и текстом ошибки.
  • Для пакетной обработки не теряются оригинальные файлы без явного подтверждения.

Быстрая методология для создания утилиты конвертации

  1. Подготовка: определить набор входных/выходных форматов и требования к качеству.
  2. Прототип: реализовать базовую конвертацию для одного файла.
  3. Тесты: создать набор тестовых изображений (разные режимы, прозрачность, EXIF).
  4. Масштабирование: добавить пакетную обработку, логирование, ограничение по памяти.
  5. Деплой: поместить в CLI/GUI и добавить инструкции по использованию.

Советы по GUI

Для простой утилиты с графическим интерфейсом используйте Tkinter (встроен в стандартную библиотеку) или более продвинутые фреймворки (PyQt, wxPython) при необходимости. Для быстрого прототипа достаточно минимального окна с выбором файлов и кнопкой “Конвертировать”.

Тестовые случаи и приёмка

  • Конвертация PNG с прозрачностью → JPG: итоговое изображение не содержит альфы и фон соответствует ожидаемому (белый/заданный).
  • Конвертация анимированного GIF → PNG: ожидается только первый кадр и предупреждение о потере анимации.
  • Массовая конвертация 100 файлов: отсутствие падений, лог ошибок при неудачах.

Безопасность и приватность

  • Проверяйте размеры и типы входных файлов, чтобы избежать DoS‑сценариев при приёме данных извне.
  • Если обрабатываете пользовательские изображения, удаляйте или анонимизируйте чувствительные метаданные (EXIF, GPS), если это требуется по политике приватности.

Резюме

Pillow — надёжный инструмент для конвертации форматов изображений в Python. Простые операции выполняются за пару строк, но для надёжной утилиты нужны обработка прозрачности, логирование, тесты и ограничения по ресурсам. Следуйте чек‑листу перед вводом в эксплуатацию и убедитесь, что тесты покрывают реальные кейсы (альфа, палитра, многослойные форматы).

Краткие ключевые рекомендации:

  • Всегда проверяйте image.mode и при необходимости приводите режим корректно;
  • Для JPG явно удаляйте альфа‑канал с понятным фоном;
  • При массовой обработке добавьте логирование и резервное копирование исходников;
  • Тестируйте на реальных примерах с разными форматами и метаданными.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Оформление в MLA в Google Docs
Образование

Оформление в MLA в Google Docs

Помощь при написании в Google Docs
Google Документы

Помощь при написании в Google Docs

Изменить шрифт по умолчанию в Google Docs и Word
Офис

Изменить шрифт по умолчанию в Google Docs и Word

Зачеркнуть текст в Google Docs — как и горячие клавиши
Google Docs

Зачеркнуть текст в Google Docs — как и горячие клавиши

Диаграммы в Google Docs: создание и правка
Инструменты

Диаграммы в Google Docs: создание и правка

Автоматическое изменение регистра в редакторах
Офис

Автоматическое изменение регистра в редакторах