1

是否有命令行工具可以从我的 SVG 文件中删除大多数“g 变换...”,以便我可以看到点/线/多边形的“绝对”位置?

换句话说,有没有人实现了矩阵乘法技术,解释在: Flattening SVG matrix transforms in InkscapeHow to get the actual x/y position of an element in SVG with transformations and matrices as a command-line tool?

SVG Cleaner 似乎需要 Qt 并且似乎不是命令行工具(另外,我无法编译它)

4

1 回答 1

2

不,没有人制造过这个工具。至少,不是你我都能找到的。部分问题在于您的定义。您要求删除转换,

[…] 所以我可以看到我的点/线/多边形的“绝对”位置。

对于 SVG 元素和转换的子集,可以将转换烘焙到元素的属性中,但在一般情况下它不能工作。例如,考虑这个简单的案例:

<svg xmlns="http://www.w3.org/2000/svg">
  <g transform="translate(-10,10) skewX(57) rotate(45) translate(17,17)">
    <rect fill="red" stroke="blue" width="20" height="30" />
  </g>
</svg>

倾斜、旋转的矩形

无法修改<rect>元素的特定属性以使其显示相同的结果。您可以做的最好的事情是在表示总全局变换transform="…"的元素上放置一个属性。<rect>这在 SVG UA 中相对容易做到,在独立的命令行工具中稍难做到(但仍然可能)。我会帮你做,但我认为结果对你没有帮助,因为它们没有告诉你任何关于点的绝对位置的信息。

您可能会说“不,我不能用 a 来做<rect>,但我可以将 a 转换<rect>为 a<polygon>或 a<path>并为这些点使用绝对坐标。” 但你只对了一半。如果您注意到由于倾斜导致的不同的明显笔划宽度,您会发现没有任何一个<polygon>可以准确地表示倾斜的<rect>.

一般来说,您唯一能做的就是将所有<g>变换的总和烘焙到各个元素上,并意识到这种变换可能会极大地影响内容的最终位置和外观。

于 2013-08-31T23:02:29.047 回答