2012-01-10 10 views
6

He leído un montón de mensajes como this one que detallan cómo devolver dinámicamente una imagen utilizando WSGI. Sin embargo, todos los ejemplos que he visto son abrir una imagen en formato binario, leerla y luego devolver esa información (esto funciona bien para mí).imagen PIL en memoria para volver de aplicación WSGI

estoy atascado tratando de lograr lo mismo usando un objeto de imagen PIL en memoria. No quiero guardar la imagen en un archivo porque ya tengo una imagen en la memoria.

Teniendo en cuenta esto:

fd = open(aPath2Png, 'rb') 
base = Image.open(fd) 
... lots more image processing on base happens ... 

He intentado esto:

data = base.tostring() 
response_headers = [('Content-type', 'image/png'), ('Content-length', len(data))] 
start_response(status, response_headers) 
return [data] 

WSGI volverá a esto la multa cliente. Pero recibiré un error para la imagen que dice que hubo algún problema con la imagen devuelta.

¿Qué otras formas hay?

Respuesta

11

Ver Image.save(). Puede tomar un objeto de archivo, en cuyo caso puede escribirlo en una instancia de StringIO. Por lo tanto, algo así como:

output = StringIO.StringIO() 
base.save(output, format='PNG') 
return [output.getvalue()] 

Deberá verificar qué valores puede usar para el formato.

+0

una respuesta del ** ** mod_wsgi el hombre mismo ... la interwebs son tan pequeños. Eso funcionó como un encanto. No terminé configurando Content-Length en los encabezados de respuesta ... muchas gracias. – angeloHarpy

Cuestiones relacionadas