我使用以下命令成功地将你链接中的SVG文件进行了转换:
convert \
http://www.fileformat.info/info/unicode/char/00c1/latin_capital_letter_a_with_acute.svg \
latin_capital_letter_a_with_acute.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 的。我的 ImageMagick 使用外部委派实现此功能。通过在命令行中添加 -verbose
设置,可以查看其具体工作方式:
使用以下命令将letter_a_with_acute.svg转换为letter_a_with_acute.png:
convert -verbose letter_a_with_acute.svg letter_a_with_acute.png
显然,convert
在两个不同的步骤中使用了两个代理来完成转换:
首先,它运行一个inkscape
命令。该命令将SVG导出为EPS。
其次,它运行一个Ghostscript命令。该命令将步骤1中生成的EPS转换为最终的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
<svg>
元素上添加viewBox属性。 - Robert Longsonconvert -version
的输出是什么? - Kurt Pfeifle