Как вернуть изображение в HTTP-ответе с CherryPy

У меня есть код, который генерирует КаирImageSurfaceи я выставляю это так:

def preview(...):
    surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
    ...
    cherrypy.response.headers['Content-Type'] = "image/png"
    return surface.get_data()
preview.exposed = True

Это не работает (браузеры сообщают, что на изображении есть ошибки).

Я проверял этоsurface.write_to_png('test.png') работает, но я не уверен, что сбросить данные, чтобы вернуть его. Я предполагаю какой-нибудь файл-подобный объект? В соответствии сдокументация pycairo, get_data() возвращает буфер. Я также сейчас попробовал:

tempf = os.tmpfile()
surface.write_to_png(tempf)
return tempf

Кроме того, лучше создать и сохранить этот образ в памяти (как я пытаюсь это сделать) или записать его на диск в качестве временного файла и отправить оттуда? Мне нужно изображение только один раз, тогда оно может быть отброшено.

Ответы на вопрос(4)

Ваш ответ на вопрос