SVG в PNG с пользовательскими шрифтами в Python

Я использую решение на основе Cairo/RSVG для растеризации SVG в PNG. Это уже описано на Stackru в Convert 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 ответа

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

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

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

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

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

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

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

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

Несколько вещей, чтобы проверить с RSVG:

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