Сообщить об ошибке.

Параметры для JPG, ICO и WebP модуля Pillow в Python

Особые параметры чтения/записи основных форматов изображений

В материале рассматриваются особые параметры чтения и аргументы для записи форматов изображений, таких как ICO, JPEG/JPG, JPEG 2000, WebP.

Содержание:


Особые аргументы для записи формата ICO.

Формат ICO используется для хранения иконок в Windows. Pillow читает самую большую доступную иконку.

Метод Image.save() поддерживает следующие позиционные аргументы:

  • sizes: Список размеров, включенных в этот файл ico. Это кортеж (width, height). По умолчанию [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]. Любые размеры, превышающие исходный размер или 256, будут проигнорированы.

Метод Image.save() поддерживает следующие ключевые аргументы:

  • append_images: Список изображений для замены уменьшенных версий изображения. Порядок расположения изображений не имеет значения, так как их использование определяется размером каждого изображения.

  • bitmap_format: По умолчанию данные изображения будут сохранены в формате PNG. При использовании растрового формата bmp данные изображения будут сохранены в формате BMP.

Особые аргументы для записи формата JPEG.

Pillow читает файлы JPEG, JFIF и Adobe JPEG, содержащие данные L, RGB или CMYK. Он записывает стандартные и прогрессивные файлы JFIF.

Используя метод Image.draft(), можно ускорить работу, преобразовав изображения RGB в L и изменив размер изображений до 1/2, 1/4 или 1/8 от их исходного размера при их загрузке.

По умолчанию Pillow не позволяет загружать усеченные файлы JPEG, чтобы переопределить это, нужно установить настройку ImageFile.LOAD_TRUNCATED_IMAGES.

Дополнительные свойства JPEG формата.

Функция PIL.Image.open() может устанавливать следующие свойства в словарь Image.info, если они доступны:

  • jfif: маркер приложения JFIF. Если файл не является файлом JFIF, этот ключ отсутствует.
  • jfif_version: Кортеж, представляющий версию jfif: (major_version, minor_version).
  • jfif_density: Кортеж, представляющий плотность пикселей изображения в единицах, указанных jfif_unit.
  • jfif_unit: Единицы измерения для jfif_density:
    • 0 - Нет единиц измерения,
    • 1 - Пикселей на дюйм,
    • 2 - Пикселей на сантиметр.
  • dpi: Кортеж, представляющий указанную плотность пикселей в пикселях на дюйм, если файл является файлом jfif и единицы измерения указаны в дюймах.
  • adobe: маркер приложения Adobe. Если файл не является файлом Adobe JPEG, этот ключ отсутствует.
  • adobe_transform: Тег, специфичный для поставщика.
  • progression: Указывает, что это прогрессивный JPEG-файл.
  • icc_profile: Цветовой профиль ICC для изображения.
  • exif: Необработанные данные EXIF ​​из изображения.
  • comment: Комментарий к изображению.

Дополнительный аргументы при сохранении JPEG-формата.

При вызове метода Image.save() для записи JPEG-формата доступны следующие дополнительные аргументы:

  • quality: Качество изображения по шкале от 0 (худшее) до 95 (лучшее) или строка 'keep'. Значение по умолчанию: 75. Следует избегать значений выше 95. Значение 100 отключает часть алгоритма сжатия JPEG и приводит к большим файлам практически без улучшения качества изображения. Значение 'keep' допустимо только для файлов JPEG и сохраняет исходный уровень качества изображения, субдискретизацию и таблицы qtables.

  • optimize: Если True, то указывает, что кодировщик должен выполнить дополнительный проход по изображению для оптимальной настройки.

  • progressive: Если True, то указывает, что это изображение должно быть сохранено в виде прогрессивного файла JPEG.

  • dpi: Кортеж целых чисел, представляющих плотность пикселей (x,y).

  • icc_profile: Если True, то изображение сохраняется с предоставленным профилем ICC. Если не указан, то изображение будет сохранено без прикрепленного профиля. Чтобы сохранить существующий профиль:

    im.save(filename, 'jpeg', icc_profile=im.info.get('icc_profile'))
    
  • exif: Если присутствует, то изображение будет сохранено с предоставленными необработанными данными EXIF.

  • subsampling: Если присутствует, то устанавливает субдискретизацию для кодировщика. Если отсутствует, то настройка будет определяться системными модулями libjpeg или libjpeg-turbo.

    • keep: Действителен только для файлов JPEG, сохранит исходные настройки изображения.
    • 4:4:4, 4:2:2, 4:2:0: Конкретные значения выборки.
    • 0: эквивалентно 4:4:4
    • 1: эквивалентно 4:2:2
    • 2: эквивалентно 4:2:0
  • comment: Комментарий к изображению.

Примечание. При сохранении файлов JPEG можно использовать еще один дополнительный аргумент quality. Настройки качества JPEG эквивалентны настройкам Photoshop. По умолчанию доступны следующие пресеты: web_low, web_medium, web_high, web_very_high, web_maximum, low, medium, high, max.

Например:

img.save("image_name.jpg", quality="web_high")

Особые аргументы для записи формата JPEG 2000.

Примечание: Чтобы включить поддержку JPEG 2000, необходимо установить библиотеку OpenJPEG версии 2.0.0 или выше.

Пользователи Windows могут установить двоичные файлы OpenJPEG, доступные на веб-сайте OpenJPEG, но должны добавить их в свой PATH, чтобы использовать Pillow (если этого не сделать, то получите сообщение об ошибке, связанное с невозможностью загрузки _imaging DLL).

Загрузка формата JPEG 2000.

Pillow читает и записывает файлы JPEG 2000, содержащие данные L, LA, RGB или RGBA. Она также может считывать файлы, содержащие данные YCbCr, которые при чтении преобразуются в RGB или RGBA в зависимости от наличия или отсутствия альфа-канала. Pillow поддерживает необработанные кодовые потоки JPEG 2000 (файлы .j2k), а также упакованные файлы JPEG 2000 (файлы .j2p или .jpx). Pillow не поддерживает файлы, компоненты которых имеют разные частоты дискретизации.

При загрузке изображения Image.load(), можно преобразовать изображение, установив дополнительный аргумент mode в RGB или RGBA. Также возможно установить дополнительный аргумент reduce - число разрешений, от которых следует отказаться (каждое из них уменьшает размер результирующего изображения в 2 раза) и layers, который указывает количество загружаемых слоев качества.

Дополнительный аргументы при сохранении JPEG 2000-формата.

При вызове метода Image.save() для записи формата JPEG 2000 доступны следующие дополнительные аргументы:

  • offset: Смещение изображения в виде кортежа целых чисел, например (16, 16)
  • tile_offset: Смещение тайлов, опять же, как 2-й кортеж целых чисел.
  • tile_size: Размер тайлов как 2-й кортеж. Если не указан или установлено значение None, то изображение будет сохранено без мозаичного отображения.
  • quality_mode: Либо "rates", либо "dB" в зависимости от единиц измерения, которые нужно использовать для указания качества изображения
  • quality_layers: Последовательность чисел, каждое из которых представляет собой либо приблизительное уменьшение размера (если режим качества 'rates'), либо значение отношения сигнал/шум в децибелах. Если не указано, то по умолчанию используется один слой полного качества.
  • num_resolutions: Количество сохраняемых изображений с различными разрешениями (что соответствует количеству разложений дискретного вейвлет-преобразования плюс один).
  • codeblock_size: Размер блока кода в виде 2-ого кортежа. Минимальный размер - 4 x 4, максимальный - 1024 x 1024, с дополнительным ограничением, согласно которому ни один кодовый блок не может иметь более 4096 коэффициентов (т. е. произведение двух чисел не должно превышать 4096).
  • precinct_size: Размер участка в виде 2-ого кортежа. Должен быть степенью двойки по обеим осям и должен превышать размер блока кода.
  • irreversible: Если True, то используется преобразование дискретной формы сигнала с потерями DWT 9-7. По умолчанию используется значение False, которое использует DWT 5-3 без потерь.
  • mct: Если 1, то при кодировании разрешается преобразование нескольких компонентов, в противном случае 0, чтобы не преобразовывать компоненты (по умолчанию). Если mct=True и irreversible=True, то будет применено необратимое преобразование цвета, в противном случае кодирование будет использовать обратимое преобразование цвета. Этот аргумент лучше всего работает с режимом RGB и применять только тогда, когда данные изображения состоят из 3 компонентов.
  • progression: Управляет порядком прогрессии; должен быть одним из "LRCP", "RLCP", "RPCL", "PCRL", "CPRL". Буквы обозначают Компонент, Положение, Разрешение и Слой соответственно и определяют порядок кодирования. Идея заключается в том, что, например. изображение, закодированное с использованием режима 'LRCP', может иметь декодированные уровни качества по мере их поступления в декодер, в то время как изображение, закодированное с использованием режима 'RLCP', будет иметь декодированное возрастающее разрешение по мере их поступления и так далее.
  • signed: Если это True, то кодировщик сохранит изображение как подписанное.
  • cinema_mode: Настраивает кодировщик для получения выходного сигнала, соответствующего спецификациям цифрового кино. Варианты здесь: None (по умолчанию), 'cinema2k-24' для 24 кадров в секунду 2K, 'cinema2k-48' для 48 кадров в секунду 2K и 'cinema4k-24' для 24 кадров в секунду 4K. Обратите внимание, что для совместимых файлов 2K по крайней мере один из размеров изображения должен соответствовать 2048x1080, а для совместимых файлов 4K хотя бы один из размеров должен соответствовать 4096x2160.
  • no_jp2: Если True, то при сохранении необработанный кодовый поток не надо оборачивать в формат файла JP2, иначе расширение файла будет использоваться для определения формата (по умолчанию).

Функция PIL.Image.open() также устанавливает Image.text в словарь значений фрагментов tEXt, zTXt и iTXt изображения PNG. Чтобы предотвратить декомпрессионные бомбы, размер отдельных сжатых фрагментов ограничен размером PngImagePlugin.MAX_TEXT_CHUNK в распакованном виде, по умолчанию 1 МБ. Кроме того, общий размер всех текстовых фрагментов ограничен значением PngImagePlugin.MAX_TEXT_MEMORY, по умолчанию равным 64 МБ.

Особые аргументы для записи формата PNG.

Pillow идентифицирует, читает и записывает файлы PNG, содержащие данные 1, L, LA, I, P, RGB или RGBA.

Чтобы по умолчанию разрешить загрузку усеченных файлов PNG, необходимо установить настройку ImageFile.LOAD_TRUNCATED_IMAGES.

Дополнительные свойства PNG формата.

Функция PIL.Image.open() может устанавливать следующие свойства в словарь Image.info, если они доступны:

  • chromaticity: Цветовые точки, как 8 кортежей с плавающей запятой: (White Point X, White Point Y, Red X, Red Y, Green X, Green Y, Blue X, Blue Y).
  • gamma: Гамма, заданная в виде числа float.
  • srgb: рендеринг sRGB в виде целого числа.
    • 0 - относящийся к восприятию
    • 1 - относительный колориметрический
    • 2 - поглотительный
    • 3 - абсолютный колориметрический
  • transparency: Для изображений P, либо индекс палитры для полностью прозрачных пикселей, либо строка байтов с альфа-значениями для каждой записи палитры. Для изображений 1, L, I и RGB цвет, представляющий полностью прозрачные пиксели в этом изображении.

    Этот ключ опускается, если изображение не является изображением прозрачной палитры.

Дополнительный аргументы при сохранении PNG-формата.

При вызове метода Image.save() для записи PNG-формата доступны следующие дополнительные аргумента:

  • optimize: If present and true, instructs the writer to make the output file as small as possible. This includes extra processing in order to find optimal encoder settings.
  • transparency: For P, 1, L, I, and RGB images, this option controls what color from the image to mark as transparent.

    For P images, this can be a either the palette index, or a byte string with alpha values for each palette entry.

  • dpi: A tuple of two numbers corresponding to the desired dpi in each direction.

  • pnginfo: A PIL.PngImagePlugin.PngInfo instance containing chunks.

  • compress_level: ZLIB compression level, a number between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all. Default is 6. When optimize option is True compress_level has no effect (it is set to 9 regardless of a value passed).

  • icc_profile: The ICC Profile to include in the saved file.

  • exif: The exif data to include in the saved file.

  • bits (experimental): For P images, this option controls how many bits to store. If omitted, the PNG writer uses 8 bits (256 colors).

  • dictionary (experimental): Set the ZLIB encoder dictionary.

Особые аргументы для записи формата WebP.

Дополнительный аргументы при сохранении WebP-формата.

При вызове метода Image.save() для записи WebP-формата доступны следующие дополнительные аргументы:

  • lossless: Если присутствует и имеет значение True, то указывает модулю записи WebP использовать сжатие без потерь.
  • quality: Целое число, 1-100, по умолчанию 80. Этот параметр представляет собой количество усилий, затраченных на сжатие: 0 - самое быстрое, но дает файлы большего размера по сравнению с самым медленным, но лучшим, 100.
  • method: Компромисс между качеством и скоростью (0 = быстро, 6 = медленнее-лучше). Значение по умолчанию равно 4.
  • exact: Если True, то сохраняет значения прозрачного RGB. В противном случае отбрасывает невидимые значения RGB для лучшего сжатия. Значение по умолчанию равно False. Требуется libwebp 0.5.0 или более поздняя версия.
  • icc_profile: Профиль ICC для включения в сохраненный файл. Поддерживается только в том случае, если системная библиотека WebP была создана с поддержкой webpmux.
  • exif: Данные EXIF для включения в сохраненный файл. Поддерживается только в том случае, если системная библиотека WebP была создана с поддержкой webpmux.

Сохранение последовательностей WebP.

Примечание: Поддержка анимированных файлов WebP будет включена только в том случае, если системная библиотека WebP версии 0.5.0 или более поздней. Можно проверить поддержку анимации webp, вызвав features.check("webp_anim").

  • save_all: При записи файла WebP по умолчанию будет сохранен только первый кадр многокадрового изображения. Если присутствует аргумент save_all и имеет значение True, то все кадры будут сохранены.
  • append_images: Список изображений для добавления в качестве дополнительных кадров. Каждое из изображений в списке может быть однокадровым или многокадровым.
  • duration: Продолжительность отображения каждого кадра в миллисекундах. Можно передать одно целое число для постоянной продолжительности или список или кортеж, чтобы установить продолжительность для каждого кадра отдельно.
  • loop: Количество повторений анимации. По умолчанию 0 - бесконечно.
  • background: Цвет фона холста в виде кортежа RGBA со значениями в диапазоне (0–255).
  • minimize_size: Если True, то минимизирует размер вывода (медленно). Неявно отключает вставку ключевых кадров.
  • kmin, kmax: Минимальное и максимальное расстояние между последовательными ключевыми кадрами в выходных данных. Библиотека может вставлять некоторые ключевые кадры по мере необходимости для удовлетворения этого критерия. Обратите внимание, что должны выполняться следующие условия: kmax > kmin и kmin >= kmax / 2 + 1. Кроме того, если kmax <= 0, то вставка ключевого кадра отключена; и если kmax == 1, то все кадры будут ключевыми кадрами (значение kmin не имеет значения для этих особых случаев).
  • allow_mixed: Если True, то используется смешанный режим сжатия. Кодировщик эвристически выбирает между с потерями и без потерь для каждого кадра.