我正在寻找一个允许我对 SVG 文件执行图形操作的库。我所说的“操纵”是指:
- 将两个重叠的形状合并为一个形状
- 找到形状的几何中心
- 绘制一个形状的副本,其大小为原始形状的 25%
...以及其他可以在 Illustrator 中完成的事情。
我需要构建一个流程来自动化这些任务并在数百个 SVG 文件上执行它们。我意识到我可以编写脚本来在 Illustrator 中自动执行此类操作,但我需要在远程机器上运行它并且不能依赖于 Illustrator 的运行实例。
我正在寻找一个允许我对 SVG 文件执行图形操作的库。我所说的“操纵”是指:
...以及其他可以在 Illustrator 中完成的事情。
我需要构建一个流程来自动化这些任务并在数百个 SVG 文件上执行它们。我意识到我可以编写脚本来在 Illustrator 中自动执行此类操作,但我需要在远程机器上运行它并且不能依赖于 Illustrator 的运行实例。
我不知道有哪个库可以直接满足您列出的要求,但我认为仅使用 SVG DOM 编写脚本并不难。
对于第一项任务,听起来最简单的事情就是将这两个形状分组。
var shape1 = document.getElementById("shape1");
var shape2 = document.getElementById("shape2");
var newG = document.createElementNS(svgNs,"g");
shape1.parentNode.removeChild(shape1);
shape2.parentNode.removeChild(shape2);
newG.appendChild(shape1);
newG.appendChild(shape2);
对于第二个任务,您可以获取一个形状的边界框并找到它的中心点。
var bbox = shape1.getBBox();
var centrePoint = {x:bbox.x + bbox.width/2, y:bbox.y + bbox.height/2};
对于第三个任务,您可以复制一个形状,然后对其应用比例变换。
var shape1Clone = shape1.cloneNode(true);
shape1Clone.setAttributeNS(null,"transform","scale(.75)")
为了自动化这个以便您可以在远程机器上运行它,您可以使用 Apache Batik 库,并使用 Rhino 编写脚本。看一下这个例子如何做到这一点:
其中一个 Qt 库具有类似的功能,您可能可以使用它进行大部分转换操作: