【问题标题】:How do I get an SVG parser to render a single group element?如何让 SVG 解析器呈现单个组元素?
【发布时间】:2026-02-06 10:55:02
【问题描述】:

我有一个代表一副纸牌的 SVG 文档。每张卡都是唯一的组和命名(即 3_hearts)。现在我希望能够将其中一张卡片渲染到画布上。这个 * 用户处于同样的情况,但在 python 中:How do I render *parts* of a svg file?

我正在使用一个名为 http://code.google.com/p/canvg/ 的库,它提供了一个接口,可以以最理想的方式将 SVG 直接渲染到画布:

var c = document.getElementById('canvas');
var ctx = c.getContext('2d');
ctx.drawSvg(SVG_XML_OR_PATH_TO_SVG, dx, dy, dw, dh);

canvg 构造函数采用 svg 字符串、svg 文件的 url 或 xml 文档。

现在,我要如何让 canvg 只渲染其中一张卡片? :/ 先谢谢了

【问题讨论】:

    标签: javascript html canvas svg


    【解决方案1】:

    理论上,您应该可以为此使用SVG view specification,类似于以下内容:

    var img = new Image();
    img.onload = function() { ctx.drawImage(img,0,0,200,200); }
    img.src = "some.svg#svgView(viewBox(50,20,200,400))";
    

    svgView 片段语法可以选择要渲染的 svg 的哪一部分。这是一个example(不使用 ,而仅用于 元素)。但请注意,一些浏览器尚未实现此功能。

    【讨论】:

    • 我查看了视图规范,它可能是可行的解决方案。我无法让该示例在 Chrome 或 FF 中工作,但我会继续试验。谢谢
    • @LoneWolf - 在不支持的浏览器上,无论你做什么,你都无法让它工作。我投票反对这个解决方案,因为svgView 尚未被采纳为标准。
    • 话虽如此,我已经等不及它被采用了,因为它使 SVG 遍历变得更加容易。
    • 我的项目将包含数百个项目,我打算将它们放入几个 SVG 并使用 DOM 访问我想要的那些。我什至没有考虑每个实体的文件。你们会怎么处理呢?
    • 我是否能够更改根 svg 节点的高度、宽度和视图框以捕获部分 SVG?虽然像 svg.getGroup("ace_spades");