views:

179

answers:

2

I want to generate a dynamically created png image with Pycairo and serve it usign Django. I read this: http://stackoverflow.com/questions/1074200/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.

A: 

You can try this: http://www.stuartaxon.com/2010/02/03/using-cairo-to-generate-svg-in-django/ It's about SVG but I think it will be easy to adapt

miga
The problem with SVG is that IE hasn't support it. So I would prefer a solution with static image.
huggie
Replace mimetype = 'image / svg + xml' withmimetype = 'image / png'. In cairodraw.draw_widget just above surface.finish() add surface.write_to_png (dest)
miga
+3  A: 
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
plexer
Thanks, I've yet to test it out because I'm actually asking this question for a friend. But this looks exactly like what I was asking for. Thank you.
huggie