Inkscape:为什么 GUI 和 XML 中的坐标不同?

平面设计 墨景 svg xml
2022-01-28 23:47:42

在下图中,我有一个矩形。

以 GUI 和 XML 显示坐标的屏幕截图

在 GUI 中,Inkscape 说矩形位于 Y 位置 0,但在该元素的 XML 中显示为 873。为什么会这样,我如何获得“真实”数字?

背景:导出图像(脚本)时,我想在所有四个边上添加 10 像素边框。我以为我可以在 XML 中查找最大/最小坐标并添加 10 个像素作为边框,但我最终导出了全白色背景而不是图像。在这里使用 XML 很自然,因为我从中获得了其他(元)信息。

我可以用和查询图像原点,用inkscape -X和查询inkscape -Y图像尺寸这也让我从 GUI 中获得了数字。使用这些值导出有效。但是,这需要对每个图像进行 4 次新的 Inkscape 进程,因此会减慢整个导出速度。(旧硬件上有很多图像。)inkscape -Hinkscape -W

这是 Linux 上的 Inkscape 0.91,以防万一。

1个回答

通常 SVG 单位以像素表示,如果 Inkscape 坐标设置为像素,它们应该重合(参见此处此处)。

在您的示例中,宽度(236.185 与 234.869)和高度(180.000 与 178.6805)的差异是由于矩形的边框宽度造成的,该宽度包含在 Inkscape W 和 H 中,而不包含在 SVG 宽度和高度中。

例如,边框笔画为 1 px:

带边框的矩形

同一个没有边框的矩形:

没有边框的矩形

请注意,边框以路径为中心。在我的示例中,我们有:

Inkscape W = SVG 宽度 (199px) + 左半边 (0.5px) + 右半边 (0.5px) = 200 px

笔划以路径为中心

请注意,Inkscape 中的Y 坐标在文档底部是零,而在 SVG 中,零是在文档顶部。

Inkscape 中的 Y = 0 表示文档底部的对象:

在 Inkscape 中 Y=0

SVG 中的 Y = 0 表示文档顶部的对象:

SVG 中的 Y=o

这意味着您的“真实”数字类似于:

SVG 中的 Y 坐标 (px) = 页面高度 (px) - Inkscape 中的 Y 坐标 (px) - 对象和边框高度 (px)

(注意,Y轴的反转会根据这个问题在未来的某个时间修复。)