1

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

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

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

谢谢。

4

1 回答 1

1

您可能需要监视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>

(但请检查那里的评论中的实际源代码以获取正确的语法!)

于 2019-06-20T23:04:29.637 回答