使用CairoSVG从svg转换的png中的错误不透明度

时间:2014-04-29 22:04:29

标签: python svg png cairo fusioncharts

我们正在使用CairoSVG(http://cairosvg.org/)将svg字符串数据转换为png并将png返回给浏览器。 svg字符串直接来自FusionCharts图表的getSVGString()方法。

如果我将此字符串保存为本地svg文件并在Illustrator或浏览器中打开它,它看起来很好。这是svg数据:http://pastebin.com/GG0vqWF4

以下是图片的外观:http://pbrd.co/1nE9y11

但是在png返回浏览器时,所有圈子都是空的:http://pbrd.co/1nE9IFL

以下是进行转换的Python代码:

import cherrypy
import cairocffi as cairo
import cairosvg
...

class SaveImagePage(LoggedInPage):
    @cherrypy.expose
    def index(self, svgString, **params):
        png = cairosvg.svg2png(svgString)

        cherrypy.response.headers['content-type'] = 'image/png'
        cherrypy.response.headers['content-disposition'] = \
            'attachment; filename="BrandIndex Chart.png"'

        return png

有什么想法吗?我没有太多使用svg格式,开罗没有抛出任何错误;不确定这里可能出现的问题。

1 个答案:

答案 0 :(得分:1)

这似乎与CairoSVG有关。

就您所面临的问题的具体情况而言,早期版本的FusionCharts(< 3.4)在%,:生成的SVG字符串中的字符中存在问题。最新版本的FusionCharts纠正了这个问题,生成的SVG在Inkscape,Batik库中用于导出时没有问题。

我已经在使用Inkscape和Cairo共享和导出的SVG字符串上替换了有问题的%,:在Inkscape中,导出的图像是正确的,而问题仍然存在于开罗。

如果您打开使用其他导出库,请使用Inkscape.But FusionCharts也有自己的导出功能。如果您希望在浏览器上下载导出的png,则使用FusionCharts导出功能应该可以达到目的。