Преобразование SVG с пользовательскими шрифтами в PNG с использованием ImageMagick - PullRequest
4 голосов
/ 23 марта 2012

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

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

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

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

Ответы [ 4 ]

1 голос
/ 28 мая 2014

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

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

0 голосов
/ 03 июля 2019

У меня был этот ответ после запроса рендеринга HTML-изображения, но он также работает для SVG: https://stackoverflow.com/a/56194265/118125

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --screenshot --window-size=256,256 --default-background-color=0 image.svg

Он генерирует файл screenshot.png в соответствии с тем, что Google Chrome будет отображать.

0 голосов
/ 10 мая 2019

У меня когда-то была куча файлов SVG, по одной странице на файл (целая книга). Шрифты были сгенерированы автоматически, по одному для каждой страницы. Кодировка символов была нестандартной, я считаю, что в шрифты были введены только те символы, которые фактически использовались на странице. Несмотря на то, что шрифты были встроены с помощью data-uris в SVG, ни одна из программ, которые я использовал (Imagemagick, Inkscape, rsvg-convert), не могла их отобразить. Только Firefox смог правильно отобразить страницы. Вот что я сделал:

Сначала я создал простой HTML со всеми страницами:

<html>
    <body>
         <img src="p001.svg" />
         <img src="p002.svg" />

и т.д.

Затем я открыл HTML в Firefox. Это заняло некоторое время, но отрисовало всю книгу.

Затем я распечатал всю страницу в формате PDF. Сначала я установил параметры печати, чтобы не печатать колонтитулы.

В результате получился большой PDF размером в несколько мегабайт (там также были растровые изображения).

Не самое простое решение, но оно сработало. Жаль, что ни один из других рендеров SVG не так хорош, как в Firefox.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 03 июля 2012

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

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

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

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

...