问题描述
ImageMagick 是否能够处理 SVG 混合模式?例如,当将 SVG 转换为 PNG 时?
使用 ImageMagick-7.0.8-Q16、Inkscape 0.92.1 r15371
我有一个简单的 SVG,它有两个矩形,红色和蓝色,蓝色上有一个“排除”的混合模式。它在我尝试过的任何浏览器上都按预期显示(请参阅 MS Edge sshot)
Inkscape 会正确地将 SVG 图像转换为 PNG,尊重混合模式样式。但是,ImageMagick 没有(参见 results.png)。 ImageMagick 似乎只是使用“正常”混合模式(FWIW,IMdisplay 显示相同的错误图像,混合模式被忽略)
我需要更改某些选项吗?或者,如果 ImageMagick 不处理 SVG 混合模式,是否有计划在未来这样做?
我的命令行如下:
inkscape test.svg -e Inkscape.png
magick test.svg IMagick.png
SVG 文件仅包含:
<svg width='300' height='300' xmlns = 'http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink'>
<rect width='100%' height='100%' fill='#dddddd'/>
<rect x='50' y='50' width='150' height='150' style='fill:red;' />
<rect x='100' y='100' width='150' height='150'
style='fill:blue;mix-blend-mode:exclusion' />
</svg
解决方法
看起来 ImageMagick 正在使用其内部 MVG 解码器。确保 delegates.xml
文件包含 svg:decode
的inkscape 指令,并且这样的命令按预期工作。
类似于:
<delegate decode="svg:decode" stealth="True" command=""inkscape" "%s" --export-file="%s" --export-dpi="%s" --export-background="%s" --export-background-opacity="%s" > "%s" 2>&1"/>
您可以通过 -verbose
选项验证使用的命令是否正确。
magick -verbose test.svg IMagick.png