Cómo devolver una imagen en una respuesta HTTP con CherryPy
Tengo un código que genera un CairoImageSurface
, y lo expongo así:
def preview(...):
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
...
cherrypy.response.headers['Content-Type'] = "image/png"
return surface.get_data()
preview.exposed = True
Esto no funciona (los navegadores informan que la imagen tiene errores).
He probado esosurface.write_to_png('test.png')
funciona, pero no estoy seguro de en qué volcar los datos para devolverlos. ¿Estoy adivinando algún objeto parecido a un archivo? De acuerdo ala documentación de pycairo, get_data()
devuelve un búfer. También he intentado ahora:
tempf = os.tmpfile()
surface.write_to_png(tempf)
return tempf
Además, ¿es mejor crear y mantener esta imagen en la memoria (como estoy tratando de hacer) o escribirla en el disco como un archivo temporal y servirla desde allí? Solo necesito la imagen una vez, luego se puede descartar.