Я успешно преобразовал SVG по вашей ссылке с помощью этой команды:
convert \
http://www.fileformat.info/info/unicode/char/00c1/latin_capital_letter_a_with_acute.svg \
latin_capital_letter_a_with_acute.png
Вот результат, который выглядит нормально для меня:
![PNG, сгенерированный из SVG](https://i.stack.imgur.com/3XXgP.png)
Моя версия ImageMagick (согласно convert -version
):
Version: ImageMagick 6.9.0-0 Q16 x86_64 2014-12-06 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc \
jbig jng jp2 jpeg lcms lqr ltdl lzma openexr \
pangocairo png ps rsvg tiff webp wmf x xml zlib
Однако не ImageMagick сам по себе выполняет тяжелую работу по интерпретации SVG. My ImageMagick использует для этого внешнего делегата. Как именно это работает, можно сделать видимым, добавив параметр -verbose
в командную строку:
convert -verbose letter_a_with_acute.svg letter_a_with_acute.png
"/opt/local/bin/inkscape" "/var/tmp/magick-12470O5QRRVap0Ub4" \
--export-eps="/var/tmp/magick-124705G1EV-reRRrb" --export-dpi="90,90" \
--export-background="rgb(100%,100%,100%)" --export-background-opacity="1" \
> "/var/tmp/magick-12470W9feuKm0JHUA" 2>&1
/var/tmp/magick-12470qEPdaNM3mKYw1 PNG 155x209 155x209+0+0 8-bit sRGB 3.04KB 0.000u 0:00.000
/var/tmp/magick-124705G1EV-reRRrb PS 155x209 155x209+0+0 16-bit sRGB 3.04KB 0.000u 0:00.000
letter_a_with_acute.svg=>/var/tmp/magick-124705G1EV-reRRrb PS 155x209 155x209+0+0 16-bit sRGB 3.04KB 0.000u 0:00.000
letter_a_with_acute.svg=>latin_capital_letter_a_with_acute.png PS 155x209 155x209+0+0 8-bit sRGB 17c 2.93KB 0.000u 0:00.000
[ghostscript library] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
-dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 \
"-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
"-r72x72" -g155x209 "-sOutputFile=/var/tmp/magick-12470qEPdaNM3mKYw%d" \
"-f/var/tmp/magick-12470Xt3b3Qubkxx2" \
"-f/var/tmp/magick-12470VRcUz0MbmdiC"
Как вы можете ясно видеть, convert
использует двух делегатов на двух разных этапах, чтобы осуществить преобразование:
Во-первых, он запускает команду inkscape
. Эта команда экспортирует SVG в EPS.
Во-вторых, он запускает команду Ghostscript. Эта команда преобразует EPS из шага 1 в окончательный PNG.
В промежутке между двумя вышеуказанными шагами он запускает какую-то другую команду, вероятно, identify
, чтобы узнать размеры созданного EPS.
Другими словами, если вы не можете правильно настроить своих делегатов ImageMagick, чтобы они обрабатывали файлы SVG для вас, вы всегда можете использовать Inkscape непосредственно в командной строке для создания PNG:
inkscape \
--without-gui \
--export-png=out.png \
--export-dpi="90,90" \
--export-background="rgb(100%,100%,100%)" \
--export-background-opacity="1" \
input.svg
Глядя на результат, out.png
, кажется, что он может использовать слишком много пробелов вокруг буквы:
identify out.png
out.png PNG 744x1052 744x1052+0+0 8-bit sRGB 13.1KB 0.000u 0:00.000
Это можно исправить с помощью ImageMagick:
convert out.png -trim +repage trimmed.png
Проверять:
identify trimmed.png
trimmed.png PNG 193x260 193x260+0+0 8-bit sRGB 256c 3.53KB 0.000u 0:00.000
person
Kurt Pfeifle
schedule
15.12.2014
<svg>
. - person Robert Longson   schedule 15.12.2014convert -version
? - person Kurt Pfeifle   schedule 15.12.2014