Open PIL image from byte file

PythonPillow

Python Problem Overview


I have this image with size 128 x 128 pixels and RGBA stored as byte values in my memory. But

from PIL import Image

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

throws the exception

> ValueError: not enough image data

Why? What am I doing wrong?

Python Solutions


Solution 1 - Python

The documentation for Image.open says that it can accept a file-like object, so you should be able to pass in a io.BytesIO object created from the bytes object containing the encoded image:

from PIL import Image
import io

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

Solution 2 - Python

You can try this:

image = Image.frombytes('RGBA', (128,128), image_data, 'raw')

>#### Source Code: 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichael DornerView Question on Stackoverflow
Solution 1 - PythonColonel Thirty TwoView Answer on Stackoverflow
Solution 2 - PythonMarvelous JieView Answer on Stackoverflow