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

Функция Image.frombytes() модуля Pillow в Python

Создает изображение из строки байтов

Синтаксис:

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.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описание
11-битный двухуровневый, сохраненный с крайним левым пикселем в самом значащем бите. 0 означает черный, 1 означает белый.
1;I1-битный инвертированный двухуровневый, сохраненный с крайним левым пикселем в самом значащем бите. 0 означает белый, 1 означает черный.
1;R1-битный обратный двухуровневый, сохраненный с крайним левым пикселем в младшем значащем бите. 0 означает черный, 1 означает белый.
L8-битные оттенки серого. 0 означает черный, 255 означает белый.
L;I8-битная инвертированная шкала серого. 0 означает белый, 255 означает черный.
P8-битное изображение с отображением палитры.
RGB24-битный истинный цвет, сохраненный как (красный, зеленый, синий).
BGR24-битный истинный цвет, сохраняемый как (синий, зеленый, красный). Обратите внимание что синий и красный каналы поменялись местами!
RGBX24-битный истинный цвет, сохраненный как (красный, зеленый, синий, pad). Пиксели pad могут отличаться.
RGB;L24-битный истинный цвет, чередование строк (сначала все красные пиксели, затем все зеленые пиксели, наконец, все синие пиксели).

Обратите внимание, что в наиболее распространенных случаях необработанный режим просто совпадает с 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.