【问题标题】:Inkscape groups/layers generation with Cairo/Pycairo SVG?使用 Cairo/Pycairo SVG 生成 Inkscape 组/图层?
【发布时间】:2012-07-01 10:08:21
【问题描述】:

我希望能够将对象(填充的矩形、轮廓等)添加到 cairo SVG 上下文中,这样当我用 Inkscape 打开 SVG 文件时,每个对象都会被识别为一个单独的对象,所以我可以移动/编辑它。理想情况下,我还想对在 Inkscape 中显示为“图层”的对象进行分组。

这是否可以通过 cairo API 来实现(在某种程度上),还是我必须单独生成每个元素,然后将它们全部拼接成 Inkscape SVG 格式?也许 cairo 不是这里的正确工具?那么,最好的方法是什么?

【问题讨论】:

    标签: python svg cairo inkscape pycairo


    【解决方案1】:

    Cairo 提供了一个 API 用于渲染 SVG,但不用于生成它。

    SVG 只是 XML,因此您可以使用任何现成的 XML 库来生成 SVG 内容。如果内容相当简单,并且您想要基于 python 的解决方案,我会推荐lxml。在这种情况下,您将使用 Python 的 ETree API 来生成 XML 内容。

    另一方面,如果您生成的内容很复杂,例如您需要动态定位元素、计算组和/或文本的边界框以及其他复杂任务,那么我会推荐Batik,它实现了 SVG DOM 并提供了这样的方法。在这种情况下,您将使用 DOM API 来生成内容。以下是关于 DOM 的一些资源:

    Batik 是用 Java 编写的,因此最直接的方法是使用 Java 对其进行开发,但如果您更喜欢使用 Python 语言,也可以使用 Jython,即 Python for Java。

    【讨论】:

    • 谢谢。是的,我想继续使用 Python,最终内容会非常复杂——我只是从简单的对象开始,以探索可能性,看看实现我所追求的最佳方法是什么。
    • Cairo 也可以生成 SVG:cairographics.org/manual/cairo-SVG-Surfaces.html(但如您所见,该 API 不能满足此处的需要)
    • 其实恰恰相反。 Cairo 可以生成 SVG,但不能渲染它(除非你有一个额外的库,比如 rsvg 或 CairoSVG。)但是是的,如果你想控制生成的 XML,它可能不是正确的工具。
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2014-08-19
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多