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.

questionAnswers(4)

yourAnswerToTheQuestion