Search code examples
pythondjangoimagepython-imaging-librarypycairo

Using Pycairo to generate images dynamically and serve in Django


I want to generate a dynamically created png image with Pycairo and serve it usign Django. I read this: Serve a dynamically generated image with Django.

Is there a way to transport data from Pycairo surface directly into HTTP response? I'm doing this for now:

data = surface.to_rgba()
im = Image.frombuffer ("RGBA", (width, height), data, "raw", "RGBA", 0,1)
response = HttpResponse(mimetype="image/png")
im.save(response, "PNG")
return response

But it actually doesn't work because there isn't a to_rgba call (this call I found using Google code but doesn't work).

EDIT: The to_rgba can be replaced by the correct call get_data(), but I still want to know if I can bypass PIL altogether.


Solution

  • def someView(request):
      surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 100, 100)
      context = cairo.Context(surface)
      # Draw something ...
    
      response = HttpResponse(mimetype="image/png")
      surface.write_to_png(response)
      return response