in1.svg

in1.svg

是否有任何命令行工具可以从 SVG 文件中删除变换(或者更确切地说应用变换),从而将所有坐标转换为保持在原位?

这是最著名的 SVG 清理工具都没有的功能之一(SVGO清洁器据我所知,它们类似于 .net、.net. 等)句柄。

换句话说,我想从这样的事情开始:

<g
   transform="matrix(0.9,0,0,0.99,650,280)"
>
  <path
     d="M591,1037 L589,1044 ...
  >
</g>

像这样

<g>
  <path
     d="M204,503 L321,403 ...
  >
</g>

...或者像这样:

<path
   transform="matrix(0.9,0,0,0.99,650,280)"
   d="M591,1037 L589,1044 ...
>

像这样

<path
   d="M204,503 L321,403 ...
>

链接

作为参考,有一个旧的、未维护的 Inkscape 扩展可以执行以下操作:应用变换

Stack Overflow 问题,提供有关如何在 Inkscape 中(通过 GUI)执行此操作的提示,其中包括使用 svgo 曾经可以做到这一点的说明:删除 SVG 文件中的变换

在 svgo repo 开立票据:请添加扁平化变换的选项 #624

答案1

超音速巡航机对于您的示例来说,效果很好。我在 3.2.0 上进行了测试。npm i -g svgo并且svgo in1.svg in2.svg -o out1.svg out2.svg

in1.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10000 10000">
<g
   transform="matrix(0.9,0,0,0.99,650,280)"
>
  <path
     d="M591,1037 L589,1044"
  />
</g>
</svg>

in2.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10000 10000">
<path
   transform="matrix(0.9,0,0,0.99,650,280)"
   d="M591,1037 L589,1044"
/>
</svg>

out1.svg=out2.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10000 10000"><path d="m1181.9 1306.63-1.8 6.93"/></svg>

观察到所有transforms 都被移除(应用),并且一切保持原样。我不知道为什么这个问题仍然存在,可能是因为存在极端情况,但是删除变换默认启用

关注最近的 pull request,并在有新版本发布时进行更新。有一些小错误将会很快修复将支持形状但问题谈论的是路径。

相关内容