Python 使用Pycairo动态生成图像并在Django中提供服务

Python 使用Pycairo动态生成图像并在Django中提供服务,python,django,image,python-imaging-library,pycairo,Python,Django,Image,Python Imaging Library,Pycairo,我想用Pycairo生成一个动态创建的png图像,并使用ign Django为其提供服务。我读到这个: 有没有办法将数据从Pycairo surface直接传输到HTTP响应中?我现在正在这样做: data = surface.to_rgba() im = Image.frombuffer ("RGBA", (width, height), data, "raw", "RGBA", 0,1) response = HttpResponse(mimetype="image/png") im.sav

我想用Pycairo生成一个动态创建的png图像,并使用ign Django为其提供服务。我读到这个:

有没有办法将数据从Pycairo surface直接传输到HTTP响应中?我现在正在这样做:

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
但它实际上不起作用,因为没有一个to_rgba调用我用谷歌代码找到的这个调用,但不起作用

编辑:to_rgba可以由正确的调用get_data替换,但我仍然想知道是否可以完全绕过PIL。

您可以尝试以下方法:
这是关于SVG的,但我认为它很容易适应

SVG的问题是IE不支持它。因此,我更喜欢使用静态图像的解决方案。将mimetype='image/svg+xml'替换为mimetype='image/png'。在位于surface.finish add surface.write_to_页面上方的cairodraw.draw_小部件中,链接不再有效。最后一个斜杠将从路径中删除。我已经更新了答案。谢谢,我还没有测试出来,因为我实际上是在问一个朋友这个问题。但这和我的要求一模一样。谢谢。在django 1.7中,mimetype参数被重命名为content\u type
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