web-dev-qa-db-fra.com

Ouvrir l'image PIL à partir d'un fichier d'octets

J'ai cette image avec une taille de 128 x 128 pixels et RGBA stockés sous forme d'octets dans ma mémoire. Mais

from PIL import Image

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

jette l'exception

ValueError: pas assez de données d'image

Pourquoi? Qu'est-ce que je fais mal?

36
Michael Dorner

Vous pouvez essayer ceci:

image = Image.frombytes('RGBA', (128,128), image_data, 'raw')
Code source:
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.
11
Marvelous Jie

La documentation de Image.open indique qu'elle peut accepter un objet de type fichier, vous devriez donc pouvoir passer un objet io.BytesIO Créé à partir de bytes objet contenant l'image encodée:

from PIL import Image
import io

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