ImageMagick将SVG转换为PNG,无法启用RSVG

时间:2012-07-21 12:16:14

标签: svg imagemagick png rsvg

我正在使用ImageMagick的convert工具将SVG文件转换为PNG图像。首先,我在OSX(brew install imagemagick)上使用IM的vanilla安装来转换SVG:

$ convert file.svg file.png

除了该文件中的某些图像对象是偏移的(图像的实际链接)之外,这是有效的。然后我read a related question建议使用 rsvg 支持编译ImageMagick(自制软件使用brew install imagemagick --use-rsvg进行编译)。

现在,当我尝试执行转换时,不会渲染任何图像。我尝试使用this SVG file,结果PNG为空白。但是,如果SVG上存在任何文本,则会将其呈现在正确的位置。任何想法如何进行?感谢。

3 个答案:

答案 0 :(得分:18)

您应该运行此命令以查看您的ImageMagick尝试使用的所有'委托'的列表:

 convert -list delegate

要发现ImageMagick用于SVG处理的委托命令,请运行

 convert -list delegate | grep 'svg ='

您应该看到convert尝试使用的二进制+命令行参数。我的情况是/opt/local/bin/rsvg-convert(但我没有使用Homebrew,我使用的是MacPorts)。

现在检查系统上是否存在二进制文件:

  • 如果是,请直接运行并从那里进行调试。
  • 如果不是,请尝试查找Homebrew安装的位置,并更改其代理的ImageMagick配置文件。它叫做 delegates.xml 。 MacPorts将它放入/opt/local/etc/ImageMagick/delegates.xml - 我不知道Homebrew存储在哪里。

但是,由于您未经修改的安装已经正常工作,因此必须已经一个正在工作的SVG消费委托。否则,您将无法处理 的任何SVG。

ImageMagick的这种内部SVG渲染方法称为MSVG。这远不是一个功能完备的SVG解释器/渲染器。


<强>更新

要查看ImageMagick正在采用哪种格式,请运行以下命令:

convert -list format

和SVG运行

convert -list format | grep SVG

我系统的输出是:

 MSVG  SVG       rw+   ImageMagick's own SVG internal renderer
  SVG  SVG       rw+   Scalable Vector Graphics (RSVG 2.36.1)
 SVGZ  SVG       rw+   Compressed Scalable Vector Graphics (RSVG 2.36.1)

安装rsvg后,渲染SVG的内部方法不会消失。您仍然可以通过将MSVG:添加到命令行来强制ImageMagick使用内部渲染器,如下所示:

convert  MSVG:file.svg  file.png

只是为了完整'...

答案 1 :(得分:3)

哦,我现在看看你联系到的the SVG file

它包含JavaScript。我不认为RSVGlib支持SVG内部的JavaScript。我确信名为 MSVG 的内部SVG编码器不会。

答案 2 :(得分:0)

我遇到了类似的问题,只是被告知要安装inkscape,它才有效,

ImageMagick converts svg graph into pdf with tilted x-axis labels, any ideas?

代表列表未更改,但输出已更改。在进一步强迫MSVG时,我无法解决问题。因此,另一个代表可能是最好的解决方案。