Ouvrir L'image PIL à partir du fichier byte

j'ai cette image avec la taille 128 x 128 pixels et RGBA stockés en tant que valeurs de byte 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()

lance l'exception

ValueError: pas assez de données d'image

Pourquoi? Ce que je fais mal?

17
demandé sur Michael Dorner 2015-10-02 16:47:35

2 réponses

la documentation pour Image.open dit qu'il peut accepter un objet semblable à un fichier, donc vous devriez être capable de passer dans un io.BytesIO objet créé à partir du 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()
54
répondu Colonel Thirty Two 2015-10-02 14:09:22

Vous pouvez essayer ceci:

image = Image.frombytes('RGBA', (128,128), image_data, 'raw')
Le 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.
4
répondu Marvelous Jie 2018-04-25 16:16:02