命令行工具删除SVG中的大多数“g转换”?

时间:2013-08-31 20:03:56

标签: svg

是否有一个命令行工具可以删除大多数“g 转换...来自我的SVG文件,所以我可以看到 我的点/线/多边形的“绝对”位置?

换句话说,有没有人实现矩阵 乘法技术解释如下: Flattening SVG matrix transforms in InkscapeHow to get the actual x/y position of an element in SVG with transformations and matrices作为命令行工具?

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

1 个答案:

答案 0 :(得分:3)

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

  

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

对于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>

Skewed, rotated rectangle

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

您可能想说“不,我不能使用<rect>,但我可以将<rect>转换为<polygon>或{{ 1}}并使用这些点的绝对坐标。“但你只有一半是正确的。如果您注意到由于歪斜引起的明显笔划宽度变化,您会发现没有一个<path>可以准确地表示偏斜的<polygon>

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