首页 > 解决方案 > 将 SVG 转换为使用内联样式

问题描述

如何将 SVG 转换为在 Python 中使用内联样式?例如,我想转换它:

<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 576 576">
 <defs>
  <style>.cls-1{fill:#d1b037;stroke:#1e1e1e;stroke-width:0.25px;}</style>
 </defs>
 <rect class="cls-1" width="576" height="576"/>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" data-name="Layer 1" viewBox="0 0 576 576">
 <rect class="cls-1" width="576" height="576" fill='#d1b037' stroke='#1e1e1e' stroke-width='0.25px'/>
</svg>

这是一个简单的例子。我需要支持不同的元素,例如path共享同一组属性的多个类。

Python 中有 SVG/XML 解析器,但没有用于解析样式标签。如果用另一种语言/工具更容易做到,我会同意的。

标签: pythonsvg

解决方案


没有自动的方法来做到这一点 - 你必须耦合一个 XML 解析器,这样你才能获取style标签的内容,然后将其提供给 CSS 解析器 - 就像tinycss(在评论中链接) -

然后由您决定检索 CSS 解析器返回的对象并将规则与 ramining SVG 标签匹配 - 并且,在匹配时,将规则复制到其style标签(或者,根据需要 - 从样式中组装 XML 属性由解析器给出的规则)。

这是一些工作,但考虑到 CSS 解析器的文档应该或多或少直截了当。


推荐阅读