Открыть изображение PIL из байтового файла


У меня есть это изображение размером 128 x 128 пикселей и RGBA, хранящееся в моей памяти в виде байтовых значений. Но

from PIL import Image

image_data = ... # byte values of the image
image = Image.frombytes('RGBA', (128,128), image_data)
image.show()

Вызывает исключение

ValueError: недостаточно данных изображения

Почему? Что я делаю не так?

2 17

2 ответа:

Документация для Image.open говорит, что он может принимать файлоподобный объект, поэтому вы должны быть в состоянии передать объект io.BytesIO, созданный из объекта bytes, содержащего закодированное изображение:

from PIL import Image
import io

image_data = ... # byte values of the image
image = Image.open(io.BytesIO(image_data))
image.show()

Вы можете попробовать это:

image = Image.frombytes('RGBA', (128,128), image_data, 'raw')
Исходный Код:
def frombytes(mode, size, data, decoder_name="raw", *args):
    param mode: The image mode.
    param size: The image size.
    param data: A byte buffer containing raw data for the given mode.
    param decoder_name: What decoder to use.