我有一段生成Cairo 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
此外,是将此图像创建并保存在内存中(就像我正在尝试的那样)更好,还是将其写入磁盘作为临时文件并从那里提供服务?我只需要这张图片一次,然后就可以丢弃它。
write_to_png_stream
怎么样?http://cairographics.org/documentation/cairomm/reference/classCairo_1_1Surface.html#b3eca5bc13abe27f470fdf08134269bb - Pekka