解析 SVG 路径数据
Parsing SVG Path Data
在 Inkscape 中,我有一条代表星星的路径。我使用 Inkscape 作为基准,使用 Linq to XML 创建我自己的 SVG 解析器,但我在解析 Inkscape 生成的路径数据时遇到问题。我正在根据 documentation at MDN 进行编码,但 Inkscape 生成了此路径数据:
m 100.93837,238.62186 -15.635004,13.72009 2.438549,20.65787 -17.880056,-10.63004 -18.893249,8.70283 4.584526,-20.28981 -14.11522,-15.27922 20.71345,-1.90975 10.169563,-18.14592 8.21709,19.10952 z
如您所见,有移动指令,没有行指令,所以我的路径解析失败。如果没有行指令,我应该如何正确解释呢?所有这些所做的就是将 "pencil" 移动一圈然后关闭路径。
移动后的后续坐标对应该是interpreted as lineto instructions。如果moveto是相对的,后面的隐式linetos也是相对的,absolute也是一样。
作为一般经验法则,如果您想实施标准,请尽可能阅读规范,而不是遗漏关键细节的方便摘要。 SVG 规范非常可读,实际上,在过去的 10 年里,我发现没有理由使用其他任何东西作为参考。
无论如何,SVG 路径数据解析都有各种有趣的边缘情况,例如以下是有效的坐标对:5-3
、0.0.1
.
在 Inkscape 中,我有一条代表星星的路径。我使用 Inkscape 作为基准,使用 Linq to XML 创建我自己的 SVG 解析器,但我在解析 Inkscape 生成的路径数据时遇到问题。我正在根据 documentation at MDN 进行编码,但 Inkscape 生成了此路径数据:
m 100.93837,238.62186 -15.635004,13.72009 2.438549,20.65787 -17.880056,-10.63004 -18.893249,8.70283 4.584526,-20.28981 -14.11522,-15.27922 20.71345,-1.90975 10.169563,-18.14592 8.21709,19.10952 z
如您所见,有移动指令,没有行指令,所以我的路径解析失败。如果没有行指令,我应该如何正确解释呢?所有这些所做的就是将 "pencil" 移动一圈然后关闭路径。
移动后的后续坐标对应该是interpreted as lineto instructions。如果moveto是相对的,后面的隐式linetos也是相对的,absolute也是一样。
作为一般经验法则,如果您想实施标准,请尽可能阅读规范,而不是遗漏关键细节的方便摘要。 SVG 规范非常可读,实际上,在过去的 10 年里,我发现没有理由使用其他任何东西作为参考。
无论如何,SVG 路径数据解析都有各种有趣的边缘情况,例如以下是有效的坐标对:5-3
、0.0.1
.