【问题标题】:Using Pycairo to generate images dynamically and serve in Django使用 Pycairo 动态生成图像并在 Django 中服务
【发布时间】:2011-03-01 14:19:23
【问题描述】:

我想用 Pycairo 生成一个动态创建的 png 图像并使用 Django 提供它。我读到这个:Serve a dynamically generated image with Django

有没有办法将 Pycairo 表面的数据直接传输到 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 调用(这个调用我使用 Google 代码找到但不起作用)。

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

【问题讨论】:

    标签: python django image python-imaging-library pycairo


    【解决方案1】:
    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
    

    【讨论】:

    • 谢谢,我还没有测试它,因为我实际上是在为朋友问这个问题。但这看起来与我所要求的完全一样。谢谢。
    • 在 django 1.7 中,mimetype 参数被重命名为 content_type
    【解决方案2】:

    你可以试试这个: http://www.stuartaxon.com/2010/02/03/using-cairo-to-generate-svg-in-django 这是关于 SVG 但我认为它很容易适应

    【讨论】:

    • SVG的问题是IE不支持。所以我更喜欢静态图片的解决方案。
    • 将 mimetype = 'image / svg + xml' 替换为 mimetype = 'image / png' 。在 cairodraw.draw_widget 上面的 surface.finish() 添加 surface.write_to_png (dest)
    • 链接已失效。
    • 从路径中删除最后一个斜杠。我已经更新了答案。
    猜你喜欢
    • 2010-11-07
    • 2011-03-31
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多