Image Python: charger jpeg à partir de la mémoire

le problème est de charger l'image encodée jpeg depuis la mémoire.

je reçois une chaîne de socket:

jpgdata = self.rfile.read(sz)

et je sais que c'est une image encodée en jpeg.

j'ai besoin de le décoder. La solution la plus stupide est:

o = open("Output/1.jpg","wb")
o.write(jpgdata)
o.close()
dt = Image.open("Output/1.jpg")

La question est de savoir comment faire la même chose en mémoire?

15
demandé sur user1038085 2012-01-11 18:50:01

2 réponses

Image de PIL.ouvrir l'objet accepte n'importe quel fichier comme objet. Cela signifie que vous pouvez envelopper vos données D'Image sur un objet StringIO, et les passer à L'Image.Ouvrir

from cStringIO import StringIO
file_jpgdata = StringIO(jpgdata)
dt = Image.open(file_jpgdata)

Ou, essayez juste de passage self.rfile comme argument à L'Image.elle pourrait fonctionner tout aussi bien. (C'est - à-dire pour Python 2-pour Python 3 utiliser from io import BytesIO)

21
répondu jsbueno 2016-11-24 15:59:01

utilisez StringIO pour que Image puisse accéder à vos données comme s'il s'agissait d'un fichier.

0
répondu Scott Hunter 2012-01-11 14:53:50