Ho codice che genera un Cairo ImageSurface
, e che è stato esposto in questo modo:Come restituire un'immagine in una risposta HTTP con CherryPy
def preview(...):
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
...
cherrypy.response.headers['Content-Type'] = "image/png"
return surface.get_data()
preview.exposed = True
Questo non funziona (i browser segnalare che l'immagine contiene errori).
Ho provato che surface.write_to_png('test.png')
funziona, ma non sono sicuro su cosa riversare i dati per restituirli. Sto indovinando un oggetto simile a un file? Secondo the pycairo documentation, get_data()
restituisce un buffer. Ho anche provato ora:
tempf = os.tmpfile()
surface.write_to_png(tempf)
return tempf
Inoltre, è meglio per creare e mantenere questa immagine nella memoria (come sto cercando di fare) o scrivere su disco come file temporaneo e servire da lì ? Ho solo bisogno dell'immagine una volta, quindi può essere scartata.
E a proposito di 'write_to_png_stream'? http://cairographics.org/documentation/cairomm/reference/classCairo_1_1Surface.html#b3eca5bc13abe27f470fdf08134269bb –
pycairo non sembra esporre questo metodo ... http://cairographics.org/documentation/pycairo/2/reference/surfaces. html # class-imagesurface-surface – colinmarc