imagemagick.net встроенные шрифты - PullRequest
0 голосов
/ 03 октября 2018

Есть ли у кого-нибудь опыт или идеи о том, как конвертировать SVG в PNG с помощью ImageMagick.NET, где в SVG есть пользовательские встроенные шрифты?

Я видел похожих сообщений об этом, но я особенно заинтересован в ImageMagick. net , и я хотел бы избежать вызова чего-либо из командной строки.В настоящее время я использую Batik, но хочу переместить это в Azure и не хочу запускать JVM, чтобы можно было выполнить файл JAR.

Кроме того, обратите внимание, что моя проблема заключается в том, что я получаюSVG от другой стороны, и большинство шрифтов не находятся в свободном доступе, поэтому я не могу просто предварительно установить все потенциальные шрифты.

Большое спасибо за понимание.

1 Ответ

0 голосов
/ 04 октября 2018

Я ничего не знаю о платформе, но я могу поделиться некоторыми взглядами на процесс SVG в ImageMagick. Это больше скучный комментарий, чем ответ

ImageMagick (из которых Magick.net располагается поверх) выполняет задачи с растровыми изображениями, поэтому любой векторный ввод должен быть "декодирован""в растровое изображение, прежде чем будут сделаны какие-либо дополнительные работы.Для SVG-изображений мне известны три способа, которыми ImageMagick может рендерить векторную графику в аутентифицированные пиксели.

  1. Использовать примитивный внутренний кодировщик MSVG для рисования каждой фигуры.
  2. Пропустить процесс рендерингадо librsvg, если скомпилировано с поддержкой библиотеки делегатов.(Обычно в системах * NIX)
  3. Вызов внешнего приложения командной строки.Идентичны предложениям, указанным в предоставленных вами ссылках.

Если бы я наметил это, я бы подумал, что это будет выглядеть примерно так:

SVG delegate map

Шрифты SVG с MSVG (опция # 1)

Я полагаю, что это вариант, о котором вы спрашиваете, так как это будет конфигурация по умолчанию для установки ImageMagick.Для отображения шрифта в системе должна быть найдена гарнитура, поддерживаемая freetype (файлы .ttf или .otf).Встраиваемые шрифты обычно представляют собой файлы формата base64 ttf, вложенные в соответствии с @font-face CSS at-rule .Если это так, вы должны быть в состоянии предварительно обработать документ, извлечь файл шрифта в локальную / временную файловую систему и назначить его с MagickReadSettings.FontFamily перед чтением документа SVG.Хотя я не уверен, что это будет работать с несколькими шрифтами.

Шрифты SVG с RSVG (опция # 2)

librsvg предлагает гораздо больше поддержки спецификаций SVG, чем внутреннийрендер, но также обеспечивает более ограниченный подход для внешних ресурсов.Есть также открытый выпуск с добавлением поддержки к @font-face, так что вы все равно можете быть вынуждены использовать опцию № 1.

Внешняя командная строка (опция # 3)

Это будет ваш лучший вариант.Файл Delegate.xml ImageMagick может быть изменен для вызова других утилит. Inkscape , например, может вызываться ImageMagick по следующему правилу ..

<delegate decode="svg" command="inkscape.exe -e %o %i"/>

Хотя я не уверен, является ли Inkscape хорошим примером, так как поддержка шрифтов CSS по-прежнемуперечислены в список пожеланий .

TL; DR

... конвертировать SVG в PNG с помощью ImageMagick.NET, где SVG имеетпользовательские встроенные шрифты?

All-n-all, сводится к правильному инструменту для правильной работы .Если ваш единственный вариант использования - конвертация SVG + CSS в PNG, и у вас нет дополнительных задач по обработке растра, прямая утилита, такая как batik, более подходит, чем ImageMagick.Нравится вам это или нет, но лучше всего установить JRE для запуска файла JAR.Magick.net само по себе не соответствует вашим требованиям.

...