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 будет предполагать, что кавычки являются частью имени шрифта, и не найдет исходные файлы.