解释SVG文件中的路径

时间:2017-08-10 06:00:03

标签: image svg

我使用包含三个路径的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之外,其间没有这样的字母。那么这种情况下的默认行为是什么?

1 个答案:

答案 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)作为第一个元素出现   路径,然后它被视为一对绝对坐标。在   在这种情况下,后续的坐标对被视为相对的   即使最初的移动被解释为绝对的移动。