一、SVGPath简介
SVG(Scalable Vector Graphics)是一种基于XML的矢量图形格式,是W3C制定的标准。SVGPath是一个强大的路径解析库,它可以将SVG路径指令解析成可用的数据结构,也可以将数据结构转换成SVG路径字符串。 该库支持所有SVG路径指令及其变体,例如:M,L,H,V,C,S,Q,T,A以及Z指令。同时还支持相对命令和绝对命令,也支持简写形式和完整形式。
二、SVGPath使用
1、安装SVGPath库
可以使用npm进行安装,命令如下:
npm install svgpath
2、使用SVGPath库
在你的应用程序中导入SVGPath:
const { SVGPathData, SVGPathTransformer, makeAbsolute } = require('svgpath');
3、解析SVG路径指令
使用SVGPathTransformer.transform方法可以将SVG路径指令解析成可用的SVGPathData对象,SVGPathData对象是SVGPathTransformer解析的结果,可以用于生成SVG路径字符串:
const transformer = new SVGPathTransformer('M 100 100 L 300 100 L 200 300 z'); const pathData = transformer.transform(); console.log(pathData);
输出结果为:
SVGPathData { getCommands: [Function: getCommands], commands: [ MoveToAbsCommand {command: "M", x: 100, y: 100}, LineToAbsCommand {command: "L", x: 300, y: 100}, LineToAbsCommand {command: "L", x: 200, y: 300}, ClosePathCommand {command: "z"} ], fromArray: [Function: fromArray], toArray: [Function: toArray], toAbs: [Function: toAbs], toRel: [Function: toRel], toString: [Function: toString], toSVGString: [Function: toSVGString], iter: [Function: iter], bbox: [Function: bbox] }
SVGPathData.commands是一个SVGPathCommand数组,可以通过getCommands方法获取。SVGPathCommand对象表示SVG路径指令。每个SVGPathCommand对象都有command属性和一些特定的属性,例如MoveToAbsCommand对象有x和y属性。可以使用toArray和toString方法将SVGPathCommand数组转换为SVG路径字符串。
4、SVGPath操作
1、SVGPathData对象的转换
使用makeAbsolute方法可以将SVGPathData对象中的相对命令转换为绝对命令:
const absolutePathData = makeAbsolute(pathData); console.log(absolutePathData.toString());
输出结果为:
M 100 100 L 300 100 L 200 300 Z
2、SVGPathCommand对象的操作
可以使用SVGPathCommand对象的toAbs方法和toRel方法将命令转换为绝对命令和相对命令:
const mover = new MoveToAbsCommand(100, 100); const moverAbs = mover.toAbs(); console.log(moverAbs.toString()); // M 100 100 const moverRel = moverAbs.toRel(); console.log(moverRel.toString()); // m 100 100
3、SVGPathCommand数组的操作
可以使用SVGPathData.toArray方法和fromArray方法将SVGPathCommand数组转换为普通数组和SVGPathData对象:
const commands = pathData.toArray(); console.log(commands); // ['M', 100, 100, 'L', 300, 100, 'L', 200, 300, 'Z'] const newData = SVGPathData.fromArray(commands); console.log(newData.toSVGString()); // M 100 100 L 300 100 L 200 300 Z
三、SVGPath扩展应用
1、SVGPathEditor
可以将SVGPath与SVGPathEditor结合使用,实现在线编辑SVG路径指令的功能。SVGPathEditor是一个基于SVG和SVGPath的编辑器库,通过SVGPathEditor可以在网页中直接编辑SVG路径,并实时生成SVG路径指令。
示例代码:
SVGPathEditor示例 <script src="https://cdn.jsdelivr.net/npm/svgpath"></script> <script src="https://unpkg.com/svgpatheditor/dist/index.js"></script> <script> const editor = SVGPathEditor(document.querySelector('#editor')); editor .on('pathdata', (pathData) => { console.log(pathData.toSVGString()); }) .pathData('M 100 100 L 300 100 L 200 300 z') </script>