我有一个类似于
的SVG文件http://www.fileformat.info/info/unicode/char/00c1/latin_capital_letter_a_with_acute.svg
当我使用ImageMagick将其转换为这样的PNG时:
convert latin_capital_letter_a_with_acute.svg tmp.png
然后只能看到角色的顶部。
SVG文件没有指定任何高度和宽度。如果我手动指定width =" 25cm"高度="25厘米"在XML文件中,然后角落中的完整角色为具有大背景的小图像,填充图像的其余部分。我在Stackexchange和各种论坛中搜索过但无法找到解决方案。
我也尝试过使用PHP。但它仍然会产生裁剪的图像。
我认为这是检测SVG图像的正确大小的问题。但是,不能想到一个简单的方法来做到这一点。
答案 0 :(得分:2)
我使用此命令成功地从您的链接转换了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
设置,可以使其工作原理可见:
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