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, который использует только #-форму.