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')

3 ответа

Вам также необходимо установить lxml. Итак, если вы находитесь в virtualenv, введите в командной строке bash/zsh следующую команду:

pip install lxml

Если у вас есть только 3 другие библиотеки, то есть cssselect, pycairo, tinycss. Тогда вы сможете правильно визуализировать SVG, но функция рендеринга PNG создаст сплошной черный файл изображения (без установленного lxml)

Суть ниже показывает все шаги:

[FIRST: установить необходимые библиотеки]

  • pip install lxml
  • pip install cairosvg
  • pip install tinycss
  • pip install cssselect

[ВТОРОЙ: создать файл]

"""
pygal_render_png
""""
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')

Если вы получаете черные изображения SVG в Image Viewer (Ubuntu) или Gimp, попробуйте открыть изображение в Chrome.

На случай, если кто-то еще столкнется с чем-то похожим, моя проблема заключалась в том, что SVG отлично выглядел в браузере, а в Inkscape - нет. Я использовал пользовательские CSS и настройки fill: transparent на некоторых элементах. Так должно быть fill: none,

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 lib

import cairosvg
cairosvg.svg2svg(url=file_svg_name, write_to=file_svg_name)

Это сработало для меня.

У меня возникла эта проблема при попытке конвертировать svg-файлы, созданные pygal, с помощью Inkscape. Firefox и Chrome отображали их нормально, но Inkscape рисовал черный блок.

Я обнаружил, что цвета указаны как rgba(0, 0, 0, 0.9) не работают с inkscape, но #f8fD00 работать.

Я выбрал SolidColorStyle в pygal, который использует только #-форму.

Другие вопросы по тегам