ImageMagick SVG 到 PNG 的转换会尊重混合模式吗?

Posted

技术标签:

【中文标题】ImageMagick SVG 到 PNG 的转换会尊重混合模式吗?【英文标题】:Will ImageMagick SVG to PNG conversion respect blend modes? 【发布时间】:2021-05-08 03:34:36 【问题描述】:

ImageMagick 是否能够处理 SVG 混合模式?例如,将 SVG 转换为 PNG 时?

使用 ImageMagick-7.0.8-Q16、Inkscape 0.92.1 r15371

我有一个简单的 SVG,它有两个矩形,红色和蓝色,蓝色的“排除”混合模式。它在我尝试过的任何浏览器上都按预期显示(参见 MS Edge 截图)

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

【问题讨论】:

【参考方案1】:

看起来 ImageMagick 正在使用其内部 MVG 解码器。确保delegates.xml 文件包含svg:decode 的inkscape 指令,并且这样的命令按预期工作。

类似:

<delegate decode="svg:decode" stealth="True" command="&quot;inkscape&quot; &quot;%s&quot; --export-file=&quot;%s&quot; --export-dpi=&quot;%s&quot; --export-background=&quot;%s&quot; --export-background-opacity=&quot;%s&quot; &gt; &quot;%s&quot; 2&gt;&amp;1"/>

您可以通过-verbose 选项验证正在使用正确的命令。

magick -verbose test.svg IMagick.png

【讨论】:

emcconville...谢谢!在 IMagick 代表文件中,我找到了您提到的那一行。它被设置为使用“rsvg-convert”,但下面有一行来调用 InkScape(已注释掉)。我将尝试放弃“rsvg-convert”行以支持 InkScape 代表。但是,由于这个项目只是为这件事调用 IMagick,我可能应该继续直接调用 InkScape。不过谢谢你的回答!

以上是关于ImageMagick SVG 到 PNG 的转换会尊重混合模式吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将 SVG 图像转换为 PNG

在没有 ImageMagick 的情况下从 SVG XML 创建 PNG

边距在 PDF 中消失 -> 使用 ImageMagick 进行 PNG 转换

sh 使用ImageMagick将SVG转换为favicon.ico

定义 ImageMagick 转换的文件顺序

ImageMagick 的批处理命令在 Windows 上转换目录和子目录中的所有文件