svg文件:http://pastebin.com/8N61VpS1
<rect
style="fill:#000000"
id="rect3409"
width="166.39345"
height="180.32787"
x="77.049179"
y="611.37854" />
矩形“rect3409”在Inkscape 0.91 r13725中的坐标(x,y)=(77.049,260.656)。
但是,标识为<rect>
的标记rect3409
具有(x,y)=(77.049,611.379)。为什么两者之间存在差异?
我想获得矩形的正确SVG坐标。我该怎么做?
答案 0 :(得分:3)
如果您查看来源,您会看到#rect3409
有一个父g
元素:
<g transform="translate(0,-452.36216)">
<!-- snip -->
<rect
id="rect3409"
width="166.39345"
height="180.32787"
x="77.049179"
y="611.37854" />
</g>
transform=translate(tx, ty)
上的g
属性适用于#rect3409
的维度。因此rect
的垂直轴从y + ty
变为y + h + ty
,即611 - 452 == 159px
到611 + 180 - 452 == 339px
。 我认为这些是您想要的“正确的SVG坐标”。
但Inkscape不报告这些值,而是报告261px
到441px
。看起来Inkscape实际上正在翻转y
轴:在SVG中(通常在所有计算机图形中)y=0
位于屏幕顶部,y
随着移动向下屏幕。例如,以下SVG在蓝框上方显示一个红色框:
<svg>
<rect x="0" y="0" width="10" height="10" fill="red" />
<rect x="0" y="10" width="10" height="10" fill="blue" />
</svg>
但是,在Inkscape中,您在底部有y=0
的数学约定,并且y
随着您向上移动而增加。因此,您在Inkscape中看到的坐标是从“真正的”SVG坐标修改的(感谢@squeamish ossifrage在评论中指出这一点):y_Inkscape = h_image - y_SVG
,其中y_Inkscape
是Inkscape告诉您,y_SVG
是文件中的内容,h_image
是图像的总高度。
您的示例图片正好是600px高,因此#rect3409
的“Inkscape”坐标是正确的
600 - 339 == 261px
和
600 - 159 == 441px
。