from PIL import Image img = Image.frombytes(mode, size, data, decoder_name='raw', *args)
mode
- режим, который будет использоваться для нового изображения (L
, RGB
, CMYK
и т.д.),size
- двойной кортеж, содержащие ширину и высоту в пикселях (width, height)
,data
- буфер в байтах, содержащий необработанные данные для данного mode
.decoder_name='raw'
- какой декодер использовать.*args
- дополнительные параметры используемого декодера.Image
.Функция Image.frombytes()
модуля Pillow
создает копию изображения из пиксельных данных, расположенных в памяти буфера.
В своей простейшей форме эта функция принимает три аргумента (режим mode
, размер size
и распакованные пиксельные данные data
).
Обратите внимание, что эта функция декодирует только пиксельные данные, а не все изображения. Если есть целое изображение, представленное как строка байтов, то ее необходимо обернуть в объект
io.BytesIO
и использовать функциюImage.open()
для его загрузки.
Например:
from PIL import Image import time, io byteImgIO = io.BytesIO() with Image.open("test.jpg") as img: # сохраняем в памяти как строку байтов img.save(byteImgIO, "PNG") # указатель файла в начало byteImgIO.seek(0) # читаем байты в переменную # (это изображение, представленное как строка байтов) byteImg = byteImgIO.read() print(byteImg) # напечатает строку байтов # оборачиваем полученную строку байтов в `io.BytesIO` io_bytes = io.BytesIO(byteImg) # теперь открываем изображение, # представленное как строка байтов img = Image.open(io_bytes) # смотрим что получилось img.save('img_frombytes.jpg')
Image.frombytes()
при чтении использует пиксельные декодеры Pillow
.'raw'
.raw
-декодер используется для чтения несжатых данных из файла изображения. Его можно использовать с большинством несжатых форматов файлов, таких как PPM
, BMP
, несжатый TIFF
и многие другие. Чтобы использовать необработанный декодер с функцией PIL.Image.frombytes()
, нужно использовать следующий синтаксис:
img = Image.frombytes( mode, size, data, "raw", raw_mode, stride, orientation )
Дополнительные аргументы используются следующим образом:
raw_mode
: Макет пикселей, используемый в файле, используется для правильного преобразования данных во внутренний макет Pillow. Сводную информацию о доступных форматах смотрите. в таблице ниже.
stride
: Расстояние в байтах между двумя последовательными строками изображения. Если 0, то предполагается, что изображение упаковано (без отступов между строками). Если этот параметр опущен, то шаг по умолчанию равен 0.
orientation
: Является ли первая строка изображения верхней строкой на экране (1) или нижней строкой (-1). Если этот параметр опущен, ориентация по умолчанию равна 1.
mode | описание |
1 | 1-битный двухуровневый, сохраненный с крайним левым пикселем в самом значащем бите. 0 означает черный, 1 означает белый. |
1;I | 1-битный инвертированный двухуровневый, сохраненный с крайним левым пикселем в самом значащем бите. 0 означает белый, 1 означает черный. |
1;R | 1-битный обратный двухуровневый, сохраненный с крайним левым пикселем в младшем значащем бите. 0 означает черный, 1 означает белый. |
L | 8-битные оттенки серого. 0 означает черный, 255 означает белый. |
L;I | 8-битная инвертированная шкала серого. 0 означает белый, 255 означает черный. |
P | 8-битное изображение с отображением палитры. |
RGB | 24-битный истинный цвет, сохраненный как (красный, зеленый, синий). |
BGR | 24-битный истинный цвет, сохраняемый как (синий, зеленый, красный). Обратите внимание что синий и красный каналы поменялись местами! |
RGBX | 24-битный истинный цвет, сохраненный как (красный, зеленый, синий, pad). Пиксели pad могут отличаться. |
RGB;L | 24-битный истинный цвет, чередование строк (сначала все красные пиксели, затем все зеленые пиксели, наконец, все синие пиксели). |
Обратите внимание, что в наиболее распространенных случаях необработанный режим просто совпадает с mode
.
Библиотека изображений Python поддерживает множество других декодеров, включая JPEG, PNG и PackBits. Для получения дополнительной информации смотрите исходный файл decode.c
и стандартные реализации подключаемых модулей, поставляемые с библиотекой.
'bit'
.Если raw
-декодер не может обработать формат изображения, то можно попробывать использовать специальный 'bit'
-декодер для чтения различных упакованных форматов.
Чтобы использовать битовый декодер с функцией Image.frombytes()
, нужно использовать следующий синтаксис:
img = Image.frombytes( mode, size, data, "bit", bits, pad, fill, sign, orientation )
Дополнительные аргументы используются следующим образом:
bits
: Количество бит на пиксель (2-32). По умолчанию .pad
: Отступы между строками, в битах. Это либо 0, если заполнение отсутствует, либо 8, если строки заполнены до полных байт. Если этот параметр опущен, то значение pad
по умолчанию равно 8.fill
: Управляет тем, как данные добавляются в битовый буфер декодера и сохраняются из него. Если этот параметр опущен, порядок заполнения по умолчанию равен 0:fill=0
: Добавляет байты в конец LSB буфера декодера; хранит пиксели с конца MSB.fill=1
: Добавляет байты к концу MSB буфера декодера; хранит пиксели с конца MSB.fill=2
: Добавляет байты в конец LSB буфера декодера; хранит пиксели с конца LSB.fill=3
: Добавляет байты к концу MSB буфера декодера; хранит пиксели с конца LSB.sign
: Если ненулевое значение, то битовые поля расширяются по знаку. Если равен нулю или опущен, то битовые поля не имеют знака.orientation
: Является ли первая строка изображения верхней строкой на экране (1) или нижней строкой (-1). Если опущен, то ориентация по умолчанию равна 1.