2012-01-11 9 views
12

El problema es cargar la imagen con codificación jpeg desde la memoria.Python Imaging: carga el archivo JPEG desde la memoria

recibo una cadena de socket:

jpgdata = self.rfile.read(sz) 

y sé que esta imagen jpeg-codificado es.

Necesito decodificarlo. La solución más estúpida es:

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

La pregunta es cómo hacer lo mismo en memoria?

Respuesta

15

El objeto Image.open de PIL acepta cualquier objeto similar a un archivo. Esto significa que puede envolver los datos de imagen en un objeto StringIO, y pasarlo a Image.Open

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

O bien, tratar de paso self.rfile como argumento para Image.open - que podría funcionar igual de bien. (Eso es para Python 2 - para Python 3 use from io import BytesIO)

0

Utilice StringIO para que Image pueda acceder a sus datos como si se tratara de un archivo.

Cuestiones relacionadas