Wie man ein Bild in einer HTTP-Antwort mit CherryPy @ zurückgi

Ich habe Code, der ein Cairo generiertImageSurface, und ich lege es so aus:

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

Dies funktioniert nicht (Browser melden, dass das Bild Fehler enthält).

Ich habe das getestetsurface.write_to_png('test.png') funktioniert, aber ich bin nicht sicher, in was ich die Daten speichern soll, um sie zurückzugeben. Ich vermute ein dateiähnliches Objekt? Gemäßdie Pycairo-Dokumentation, get_data() gibt einen Puffer zurück. Ich habe es auch jetzt versucht:

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

Auch ist es besser, dieses Image zu erstellen und im Speicher zu halten (wie ich es versuche) oder es als temporäre Datei auf die Festplatte zu schreiben und von dort aus bereitzustellen? Ich brauche das Bild nur einmal, dann kann es verworfen werden.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage