我使用包含三个路径的Inkscape生成了一个普通的svg文件。考虑下面给出的.svg文件中的一个路径
<path xmlns="http://www.w3.org/2000/svg"
d="m 128.57143,243.79075
-2.85714,568.57143
474.28571,0
-31.42857,-611.42857 z" id="path2985"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
我想解析这个svg文件以提取这个封闭路径的XY坐标(由于坐标列表末尾的&#39; z&#39;它已关闭)。
我不确定如何解释这8个数字。根据我的理解,m 128.57143,243.79075
指示的前两个数字意味着路径的原点位于屏幕坐标(不是笛卡尔!)的右侧128.57143和屏幕左上方的243.79075。
6个数字的其余部分怎么样?它们是否表示相对于前一点移动的向量?或者只是绝对的屏幕坐标?
如SVG文档here所示,SVG文件通常在每个连续的数字对前面加上M,L,H,...字母,告诉矢量图形查看器如何解释该数字对画那条路。
但是,在这种情况下,除了在{an}处前缀的m
和在末尾的z
之外,其间没有这样的字母。那么这种情况下的默认行为是什么?
答案 0 :(得分:0)
大写字母M表示绝对的合作。小米意味着相对的协调。由于默认情况下定位为0,0,因此m的第一个值与M相同。
只有第一个coördinates被视为'm'(= moveto)。接下来的被视为'l'(= lineto)。由于'm'没有大写,因此下一个coördinate将被视为亲戚。
它将与:
相同<path xmlns="http://www.w3.org/2000/svg"
d="m 128.57143,243.79075
l-2.85714,568.57143
474.28571,0
-31.42857,-611.42857 z" id="path2985"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/>
为了参考:这是关于moveto命令的规范。 (来源:https://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands)
在给定(x,y)坐标处开始新的子路径。 M(大写) 表示绝对坐标将遵循; m(小写) 表示将遵循相对坐标。如果移动是 接着是多对坐标,后续对是 被视为隐式lineto命令。因此,隐含的lineto命令 如果moveto是相对的则是相对的,如果moveto是相对的则是绝对的 是绝对的。如果相对moveto(m)作为第一个元素出现 路径,然后它被视为一对绝对坐标。在 在这种情况下,后续的坐标对被视为相对的 即使最初的移动被解释为绝对的移动。