使用ImageMagick将SVG转换为PNG时,图片被裁剪了。

4

我有一个类似于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>元素上添加viewBox属性。 - Robert Longson
你使用的ImageMagick版本是什么?convert -version的输出是什么? - Kurt Pfeifle
1个回答

3
我使用以下命令成功地将你链接中的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, generated from SVG

我的 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在两个不同的步骤中使用了两个代理来完成转换:
  1. 首先,它运行一个inkscape命令。该命令将SVG导出为EPS。

  2. 其次,它运行一个Ghostscript命令。该命令将步骤1中生成的EPS转换为最终的PNG。

  3. 在上述两个步骤之间,它运行一些其他命令,可能是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

在我所在的服务器上,我有一个不同版本的委托。由于我在共享主机上,升级会很棘手。感谢您的解释。$ convert --version 版本:ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org 版权所有:Copyright (C) 1999-2011 ImageMagick Studio LLC 特性:OpenMP - dors

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接