pygal 渲染 png/svg 时出现黑色图片
我在使用Python(在LinuxMint上用虚拟环境),我安装了pygal
这个库。
一切运行得很好(可以渲染成html),但是渲染成svg或png的时候却不行。结果就是:除了黑色背景什么都没有。
我按照这里的说明安装了cssselect
和tinycss
。
第一次运行的时候是可以的,但再试一次就又出现了同样的问题。
(我不知道这是否相关,但上周我在用darktable导出照片时也遇到了类似的问题)
我使用的是pygal官网上的示例:
import pygal # First import pygal
bar_chart = pygal.Bar() # Then create a bar graph object
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]) # Add some values
bar_chart.render_to_file('bar_chart.svg') # Save the svg to a file
编辑:
bar_chart.render_to_png('bar_chart.png')
现在可以用了。
但是不可以的是:
bar_chart.render_to_file('bar_chart.svg')
4 个回答
我在用Inkscape转换用pygal制作的svg文件时遇到了问题。Firefox和Chrome都能正常显示这些文件,但Inkscape却只画了一个黑色的块。
我发现用rgba(0, 0, 0, 0.9)
这种方式指定的颜色在Inkscape里不管用,而用#f8fD00
这种方式指定的颜色就可以。
于是我在pygal中选择了SolidColorStyle,这种方式只使用了#开头的颜色格式。
1) 按照说明安装所需的依赖项(可以参考这个链接:http://pygal.org/en/stable/installing.html)
pip install lxml
pip install cairosvg
pip install tinycss
pip install cssselect
2) 创建图表并保存到文件中
line_chart.render_to_file(file_svg_name)
3) 再次创建svg文件(用同一个文件),但这次使用cairo库
import cairosvg
cairosvg.svg2svg(url=file_svg_name, write_to=file_svg_name)
这样做对我有效。
如果有其他人遇到类似的问题,我的情况是这样的:在浏览器里SVG看起来没问题,但在Inkscape里却不行。我使用了自定义的CSS,并在一些元素上设置了fill: transparent
。其实应该用fill: none
。
你还需要安装 lxml 这个库。所以假设你在一个虚拟环境中,可以在你的 bash/zsh 命令行中运行以下命令:
pip install lxml
如果你只安装了其他三个库,也就是 cssselect、pycairo 和 tinycss,那么你可以正确显示 SVG 图片,但如果没有安装 lxml,生成的 PNG 图片会是一张纯黑色的文件。
下面的内容总结了所有步骤:
[第一步:安装所需的库]
pip install lxml
pip install cairosvg
pip install tinycss
pip install cssselect
[第二步:创建文件]
#Create a PNG file with Pygal
import pygal
bar_chart = pygal.Bar()
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
bar_chart.render_to_file('bar_chart.svg')
bar_chart.render_to_png(filename='bar_chart.png')
如果你在图像查看器(Ubuntu)或 Gimp 中看到黑色的 SVG 图片,可以尝试在 Chrome 浏览器中打开这个图片。