pygal 渲染 png/svg 时出现黑色图片

20 投票
4 回答
10341 浏览
提问于 2025-04-18 11:29

我在使用Python(在LinuxMint上用虚拟环境),我安装了pygal这个库。

一切运行得很好(可以渲染成html),但是渲染成svg或png的时候却不行。结果就是:除了黑色背景什么都没有。

我按照这里的说明安装了cssselecttinycss

第一次运行的时候是可以的,但再试一次就又出现了同样的问题。

(我不知道这是否相关,但上周我在用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 个回答

0

我在用Inkscape转换用pygal制作的svg文件时遇到了问题。Firefox和Chrome都能正常显示这些文件,但Inkscape却只画了一个黑色的块。

我发现用rgba(0, 0, 0, 0.9)这种方式指定的颜色在Inkscape里不管用,而用#f8fD00这种方式指定的颜色就可以。

于是我在pygal中选择了SolidColorStyle,这种方式只使用了#开头的颜色格式。

1

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)

这样做对我有效。

1

如果有其他人遇到类似的问题,我的情况是这样的:在浏览器里SVG看起来没问题,但在Inkscape里却不行。我使用了自定义的CSS,并在一些元素上设置了fill: transparent。其实应该用fill: none

32

你还需要安装 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 浏览器中打开这个图片。

撰写回答