转换SVG以使用内联样式



如何在Python中转换SVG以使用内联样式?例如,我想转换这个:

<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解析器,但没有用于解析样式标记的解析器。如果用另一种语言/工具更容易做到,我可以接受。

我编写了一个简单的工具,可以使用类选择器SVG将最常见的defs/样式节点格式转换为单个样式属性SVG:https://github.com/doom-goober/svg_style_attribute/tree/master

工具冲刷:https://github.com/scour-project/scour然后将单个样式属性SVG转换为内联样式属性SVGs。

使用这两个工具,您可以从基本的defs/style节点SVG到单样式属性SVG再到内联样式属性SVG。

没有自动的方法-你必须耦合一个XML解析器,这样你就可以获得style标签的内容,然后将其提供给CSS解析器-比如tinycss(链接在注释中(-

然后由您检索CSS解析器返回的对象,并将规则与派生的SVG标记进行匹配,然后在匹配时将规则复制到其style标记(或者,根据需要,从解析器给定的样式规则中提取XML属性(。

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

最新更新