我有一个类似于的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文件未指定任何高度和宽度。如果我在XML文件中手动指定width =“ 25cm” height =“ 25cm”,那么角落中的完整字符将作为小图像,而大背景则填充了图像的其余部分。我在Stackexchange和各种论坛中进行了搜索,但找不到解决方案。
我也尝试过使用PHP进行以下操作。但是它仍在产生裁剪后的图像。
我认为这是检测SVG图像大小正确的问题。但是想不出一种简单的方法来做到这一点。
我使用以下命令成功地从您的链接转换了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
):
版本:ImageMagick 6.9.0-0 Q16 x86_64 2014-12-06 http://www.imagemagick.org 版权:版权所有(C)1999-2014 ImageMagick Studio LLC 功能:DPC模块 代表(内建):bzlib开罗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
设置添加到命令行,可以使此工作原理完全可见:
转换-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位sRGB 3.04KB 0.000u 0:00.000 / var / tmp / magick-124705G1EV-reRRrb PS 155x209 155x209 + 0 + 0 16位sRGB 3.04KB 0.000u 0:00.000 letter_a_with_acute.svg => / var / tmp / magick-124705G1EV-reRRrb PS 155x209 155x209 + 0 + 0 16位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位sRGB 17c 2.93KB 0.000u 0:00.000 [ghostscript库] -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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句