Преобразование SVG с пользовательскими шрифтами в PNG с использованием ImageMagick

Я конвертирую SVG в PNG, используя ImageMagick, и все работает как шарм, пока не попробую добавить пользовательские шрифты, используя @ font-face, а затем в файл SVG. В батике это работало нормально, но теперь в ImageMagick я просто не могу заставить его работать.

Я могу поменять шрифты на шрифты, перечисленные в «конвертировать список шрифтов», но мне, вероятно, придется часто менять шрифты, поэтому я хочу как-то указать на файл шрифта при конвертации, вместо этого использование font-face или другого решения не имеет значения.

Файлы SVG также могут содержать несколько семейств шрифтов, и моя установка ImageMagick включает делегат rsvg.

Есть идеи? Спасибо!

 halfer23 мар. 2012 г., 12:22
Я получаю время преобразования ~ 0,7 с на портативном компьютере разработчика для довольно сложных документов - конечно, как всегда, это случай "как долго кусок строки" и сильно зависит от сервера. Но в сочетании с системой очередей (в моем случае Gearman) я думаю, что это будет очень эффективное решение.
 halfer23 мар. 2012 г., 11:40
Несмотря на это, работающий Inkscape лучше, чем частично работающий ImageMagick. Не стоит ли пытаться, учитывая, насколько легко начать преобразование в CLI?
 Carl Bengtsson23 мар. 2012 г., 11:53
Правда, у меня это работало до использования Batik, но так как я запускаю его из PHP, я бы предпочел решение, которое я могу использовать из PHP. Батик сделал работу, используя system (), но довольно медленно. Позже я расскажу об Inkscape и посмотрю, как это происходит, пока что очень впечатлена скоростью ImageMagick.
 halfer23 мар. 2012 г., 11:18
Если вы не можете заставить работать ImageMagick, подумайте о том, чтобы выполнить преобразование сinkscape, который также может быть вызван в командной строке. Я не знаю, на что похожа его поддержка @ font-face, но мне было бы интересно узнать, если вы посмотрите на это.
 Carl Bengtsson23 мар. 2012 г., 11:38
Я делаю все свои SVG -> PNG, используя ImageMagick, и все работает хорошо, кроме шрифтов. Я попытаюсь установить их, используя type.xml, но я бы предпочел не делать этого ..

Ответы на вопрос(2)

rsvg-convert (программа командной строки), предоставляемаяlibrsvg2 пакет.

У меня та же проблема с ImageMagick на Amazon Linux (но не на моем рабочем столе Ubuntu). Я думаю, что обработка SVG ImageMagick довольно плохая. Он не распознает свойство стиля «display: none» правильно.

 tremby22 мая 2015 г., 03:15
У меня был экспортирован SVG из Illustrator, и rsvg-convert не отображал шрифты должным образом, пока я не экспортировал SVG из Illustrator с fontType = SVGFontType.OUTLINEFONT (через JS API; также может существовать в GUI).

ариантов сделать преобразование (см.man inkscape) и с помощью параметров --verb и --select можно даже выполнять действия так же, как вы выполняете их из GUI.

Это также довольно быстро при конвертации, как отметил Хэлфер. Однако обратите внимание, что его рендерер предназначен для интерактивного отображения, а не однопроходного статического отображения, которое делает rsvg, поэтому rsvg может быть быстрее в некоторых случаях. Кроме того, установка Inkscape на веб-серверах иногда может быть проблематичной просто из-за большого числа зависимостей, в которые входит это приложение с графическим интерфейсом.

Когда мы добавили эти параметры командной строки в Inkscape, это было отчасти потому, что в rsvg отсутствовала поддержка многих функций SVG, в том числе шрифтов. С тех пор rsvg улучшился, и я думаю, что теперь он должен поддерживать замену шрифтов через свойство font-face. Наиболее распространенными проблемами являются наличие шрифтов, установленных в местах, которые rsvg не смотрит (возможно, проприетарные шрифты хранятся по-другому в вашем дистрибутиве?)

Удачи, дайте нам знать, если вы разберетесь.

Ваш ответ на вопрос