Como retornar uma imagem em uma resposta HTTP com CherryPy
Eu tenho um código que gera um CairoImageSurface
, e eu a exponho assim:
def preview(...):
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
...
cherrypy.response.headers['Content-Type'] = "image/png"
return surface.get_data()
preview.exposed = True
Isso não funciona (os navegadores relatam que a imagem possui erros).
Eu testei issosurface.write_to_png('test.png')
funciona, mas não sei ao certo para onde despejar os dados e devolvê-los. Estou adivinhando algum objeto parecido com arquivo? De acordo coma documentação do pycairo, get_data()
retorna um buffer. Eu também tentei agora:
tempf = os.tmpfile()
surface.write_to_png(tempf)
return tempf
Além disso, é melhor criar e manter essa imagem na memória (como estou tentando fazer) ou gravá-la no disco como um arquivo temporário e servi-la a partir daí? Eu só preciso da imagem uma vez, e ela pode ser descartada.