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

sa1*_*125 8 svg png imagemagick rsvg

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

$ convert file.svg file.png
Run Code Online (Sandbox Code Playgroud)

除了该文件中的某些图像对象是偏移的(实际链接到图像)之外,这个工作正常.然后我读了一个相关的问题,建议使用rsvg支持编译ImageMagick (自制软件用它brew install imagemagick --use-rsvg).

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

Kur*_*fle 18

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

 convert -list delegate
Run Code Online (Sandbox Code Playgroud)

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

 convert -list delegate | grep 'svg ='
Run Code Online (Sandbox Code Playgroud)

您应该看到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
Run Code Online (Sandbox Code Playgroud)

并为SVG运行

convert -list format | grep SVG
Run Code Online (Sandbox Code Playgroud)

我的系统输出是:

 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)
Run Code Online (Sandbox Code Playgroud)

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

convert  MSVG:file.svg  file.png
Run Code Online (Sandbox Code Playgroud)

只是为了完整'...


Kur*_*fle 3

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

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