В материале рассматриваются особые параметры чтения и аргументы для записи форматов изображений, таких как ICO
, JPEG
/JPG
, JPEG 2000
, WebP
.
ICO
;JPEG
;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
:dpi
: Кортеж, представляющий указанную плотность пикселей в пикселях на дюйм, если файл является файлом jfif
и единицы измерения указаны в дюймах.adobe
: маркер приложения Adobe. Если файл не является файлом Adobe JPEG, этот ключ отсутствует.adobe_transform
: Тег, специфичный для поставщика.progression
: Указывает, что это прогрессивный JPEG-файл.icc_profile
: Цветовой профиль ICC для изображения.exif
: Необработанные данные EXIF
из изображения.comment
: Комментарий к изображению.При вызове метода 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:41
: эквивалентно 4:2:22
: эквивалентно 4:2:0comment
: Комментарий к изображению.
Примечание. При сохранении файлов 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
, который указывает количество загружаемых слоев качества.
При вызове метода 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
в виде целого числа.transparency
: Для изображений P
, либо индекс палитры для полностью прозрачных пикселей, либо строка байтов с альфа-значениями для каждой записи палитры. Для изображений 1
, L
, I
и RGB
цвет, представляющий полностью прозрачные пиксели в этом изображении.
Этот ключ опускается, если изображение не является изображением прозрачной палитры.
При вызове метода 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
.При вызове метода 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
, то используется смешанный режим сжатия. Кодировщик эвристически выбирает между с потерями и без потерь для каждого кадра.