Mam kod, który generuje Cairo ImageSurface
, a ja jej wystawiać tak:Jak zwrócić obraz w odpowiedzi HTTP z 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
To nie działa (przeglądarek zgłosić, że obraz zawiera błędy).
Sprawdziłem, czy działa surface.write_to_png('test.png')
, ale nie jestem pewien, w co zrzucić dane, aby je zwrócić. Zgaduję jakiś obiekt podobny do pliku? Według the pycairo documentation, get_data()
zwraca bufor. Ja również teraz próbowałem:
tempf = os.tmpfile()
surface.write_to_png(tempf)
return tempf
Również lepiej jest stworzyć i utrzymać ten obraz w pamięci (jak próbuję zrobić) lub zapisać go na dysku jako plik temp i podawać go stamtąd ? Potrzebuję obrazu tylko raz, a następnie można go odrzucić.
Co powiesz na "write_to_png_stream"? http://cairographics.org/documentation/cairomm/reference/classCairo_1_1Surface.html#b3eca5bc13abe27f470fdf08134269bb –
Pycairo nie wydaje się ujawniać tej metody ... http://cairographics.org/documentation/pycairo/2/reference/surfaces. html # class-imagesurface-surface – colinmarc