Cairo + librsvg:绘制 SVG 图标,强制在运行时着色



我在我的应用程序中使用了一组svg图标,我正在使用librsvg绘制它们。这些图标都是单色黑色绘图,我只能将它们绘制为黑色,因为这是 svg 文件中写入的颜色。

有一种方法可以在运行时选择图标的颜色(可能还有 alpha 通道),而无需为我需要的任何颜色制作专用的 svg 文件?我可以让 librsvg 忽略 svg 文件中写入的颜色并只使用我选择的颜色吗?还是任何其他具有相同效果的解决方法?

我正在考虑加载 svg 文件内容并在内存中修改颜色声明,它应该可以工作,但我正在寻找一种更清洁的方法。

谢谢。

您可能需要监视 https://gitlab.gnome.org/GNOME/librsvg/issues/379 以找到执行此操作的干净方法。 总之,librsvg 需要一个 API 来让你传入一个额外的 CSS 样式表;这样,您的形状可以从该CSS中获取其颜色。

https://gitlab.gnome.org/GNOME/gtk/issues/1471 提到了GTK破解这个问题的方式,你可以使用类似的东西。 简而言之,它创建了一个包装器 SVG,如下所示:

<svg ...>
  <style type="text/css">
    ... extra styling here ...
  </style>
  <xi:include href="... original SVG encoded as a data:URL ..."/>
</svg>

(但请检查注释中的实际源代码以获取正确的语法!

最新更新