我正在使用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上存在任何文本,则会将其呈现在正确的位置。任何想法如何进行?感谢。
答案 0 :(得分:18)
您应该运行此命令以查看您的ImageMagick尝试使用的所有'委托'的列表:
convert -list delegate
要发现ImageMagick用于SVG处理的委托命令,请运行
convert -list delegate | grep 'svg ='
您应该看到convert
尝试使用的二进制+命令行参数。我的情况是/opt/local/bin/rsvg-convert
(但我没有使用Homebrew,我使用的是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时,我无法解决问题。因此,另一个代表可能是最好的解决方案。