SVG в PNG с пользовательскими шрифтами в Python - PullRequest
3 голосов
/ 06 сентября 2011

Я использую решение на основе Cairo / RSVG для растеризации SVG в PNG. Это уже описано в StackOverflow в Преобразование SVG в PNG в Python . Однако это решение, похоже, не работает с пользовательскими шрифтами.

Я нашел эту страницу, описывающую встраивание SVG-шрифтов .

Я пытался включить их из внешнего SVG через XLink, как описано в примере. Я попытался встроить шрифт прямо в тот же файл SVG. После этого я попробовал синтаксис CSS веб-шрифтов. Ни один из 3 методов не работает при рендеринге с помощью Cairo (и при этом он не работает в средстве просмотра Ubuntu по умолчанию Eye of GNOME).

Я пробовал ImageMagick, с теми же результатами, что и в Каире.

С другой стороны, при использовании всех трех методов встраивания шрифтов шрифты отображаются в WebKit с использованием Google Chrome или webkit2png.py . Однако, если возможно, я бы хотел избежать использования QT WebKit на сервере, так как это нетривиальная настройка (включая xvfb и т. Д.), И я боюсь, что это может привести к не очень эффективной и стабильной работе.

Есть ли альтернативный метод рендеринга SVG в PNG из Python?

Ответы [ 4 ]

2 голосов
/ 04 ноября 2012

Я потратил неделю на изучение этой самой проблемы и пришел к выводу, что лучший способ обработать рендеринг / растеризацию SVG на стороне сервера с помощью пользовательских шрифтов - это установить эти шрифты на сервер. Инструменты, которые я пробовал (rsvg, imagemagick, phantomjs, qtwebkit ...), не могли обрабатывать веб-шрифты и шрифты svg.

Google имеет несколько сотен шрифтов (и продолжает расти), которые можно загрузить и использовать на сервере.

  • Загрузка шрифтов OTF или TTF
  • Установите их на сервер и обновите кэш шрифтов
  • Замените определения CSS внешних шрифтов именами семейств шрифтов в ваших документах SVG.

И если вам также нужно использовать те же шрифты на веб-странице, вы можете напрямую связываться с Google CDN для файлов WOFF, чтобы сэкономить время своего сервера и пропускную способность сети.

0 голосов
/ 05 июня 2016

Несколько вещей, которые нужно проверить с помощью RSVG:

  • Что исходные файлы шрифтов находятся в вашей системной или пользовательской папке шрифтов
  • Что имена шрифтов в SVG не указаны в кавычках,даже если они содержат пробелы.librsvg будет считать, что кавычки являются частью имени шрифта, и не найдет исходные файлы.
0 голосов
/ 11 июля 2013

С Imagemagick я все еще борюсь с растеризацией svg со шрифтами, которые установлены на сервере и могут использоваться в определенных операциях, но терпят неудачу при использовании -convert из .svg в .png .... Кажется, он превращает все типы текст в ариал. Я думаю, что это может быть ошибка с ImageMagick или определенный формат, необходимый в .svg

0 голосов
/ 06 сентября 2011

Вы можете попробовать использовать inkscape , возможно, это даст вам лучшие результаты:

 inkscape inputfile.svg --export-png=exportfile.png

Запуск этого из python описан здесь: Вызов внешней команды в Python

...