9

我正在使用 ImageMagick 的convert实用程序将 SVG 文件转换为 PNG 图像。起初,我在 OSX ( brew install imagemagick) 上使用 IM 的 vanilla 安装来转换 SVG,使用:

$ convert file.svg file.png

除了该文件中的某些图像对象被偏移(到图像的实际链接)之外,这很有效。然后我阅读了一个相关的问题,该问题建议 ImageMagick 使用rsvg支持进行编译(自制软件使用 rsvg 来编译brew install imagemagick --use-rsvg)。

现在,当我尝试执行转换时,没有呈现图像。我尝试使用这个 SVG 文件,结果 PNG 是空白的。但是,如果 SVG 上存在任何文本,则会将其呈现在正确的位置。任何想法如何进行?谢谢。

4

3 回答 3

19

你应该运行这个命令来查看你的 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

只是为了完整起见......

于 2012-07-21T17:41:25.940 回答
3

哦,我现在查看了您链接到的 SVG 文件。

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

于 2012-07-21T18:02:45.267 回答
-1

我遇到了类似的问题,只是被告知安装inkscape并且它可以工作,

ImageMagick 将 svg 图转换为带有倾斜 x 轴标签的 pdf,有什么想法吗?

委托列表没有改变,但输出改变了。在进一步摆弄强制 MSVG 时,我无法解决问题。所以另一个代表可能是最好的解决方案。

于 2019-02-10T15:12:26.140 回答