删除SVG文件中的转换

Eph*_*era 141 svg transform inkscape

我一直在努力解决这个问题,似乎无法在任何地方找到答案(有效).我有一个SVG文件,如下所示:

<svg

   xmlns:dc="http://purl.org/dc/elements/1.1/"
   ...
   width="72.9375"
   height="58.21875"
   ...>
   ...
   <g
     ...
     transform="translate(10.75,-308.96875)"
     style="...">
     <path
       inkscape:connector-curvature="0"
       d="m -10.254587,345.43597 c 0,-1.41732 0.17692,-2.85384 0.5312502,-3.5625 0.70866,-1.41733 2.14518,-2.82259 3.5625,-3.53125 1.41733,-0.70866 2.11392,-0.70867 3.53125,0 1.41732,0.70866 ... z"
       ... />
  </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

我想删除该transform="..."行,但仍然将我的图像保留在我放置的位置(在InkScape中).如果我手动删除变换,图像会拉到屏幕的另一部分(正如预期的那样),但我需要完全摆脱变换,同时让图像保持在我想要的位置.有没有办法将变换移除/压平到路径坐标本身?(我必须处理的唯一变换是平移和缩放,没有矩阵.)

Ser*_*kyy 127

如何在Inkscape中删除变换

  1. 在Inkscape中打开svg文件
  2. 转到编辑 - > XML编辑器
  3. 在图层中查找"转换"属性并删除它们

如何在不创建其他变换属性的情况下完全移动所有对象

  1. 转到编辑 - >在所有图层中选择全部
  2. 转到对象 - >转换

    在变换面板中

  3. 取消选中相对移动并选中单独应用于每个对象

  4. 根据需要设置" 水平"和" 垂直"值,然后单击" 应用"

答对了

  • 为我工作.在变换之前,对象需要被取消分组,以便更新路径的实际坐标. (12认同)
  • 嗯,在将其设置为0并单击"应用"后,转换将再次显示在XML编辑器中. (8认同)
  • 取消对象是必要的,这对我有用,谢谢! (3认同)
  • 没有为我工作。它将变平并将变换属性移动到叶子上(实际上,解组后所有东西都变成了叶子),但它不会删除变换属性并将其应用于点几何,没有它我又回到了第一个。 (3认同)
  • 重要提示:就像上面解释的评论一样,您需要取消组合对象才能正常工作,否则将自动再次设置转换属性 (2认同)

Eph*_*era 49

我找出了问题所在.我希望不要诉诸罗伯特的答案,虽然我很高兴确认它会起作用!最后,Duopixel的答案实际上是最接近的,尽管事实证明其他事情也在发生.

当您在Inkscape文档中使用不同的路径时,我认为它的默认行为是将它们组合在一个<svg:g.../>标记下.修改组中的路径时,Inkscape将自动向组添加转换以表示这些更改.但是,如果您打开XML编辑器并将路径拖到<svg:g.../>标记之外并使其成为自己的<svg:path.../>标记,则Inkscape可以随意编辑各个点.最后它确实成了一个分组问题,尽管我只是在一条路上工作!希望这有助于其他类似情况.

  • 真棒!谢谢!这正是它正在做的事情.我刚刚删除了组标签,保留了内部内容,将其保存,并在inkscape中重新打开.当然图像在视图框外(或者其他任何名称),但是我只是设置了x,y并且它是​​固定的.太痛苦了.感谢您分享这一点! (7认同)

met*_*ion 47

在此输入图像描述

  1. 在方法绘图中加载SVG http://editor.method.ac(文件>打开图像)
  2. 取消组合您的元素(对象> Ungroup元素),您可能不得不多次执行此操作.
  3. 选择你的路径
  4. 重定向路径(对象>重定向路径).
  5. 保存图像(文件>保存图像)如果它出现在新窗口中,您可以右键单击并"将图像另存为..."


pio*_*_cz 24

有一个叫做Apply Transforms的 inkscape扩展,用它的转换重新计算路径,这正是我一直在寻找的.

安装完成后,您将在Extensions> Modify Path> Apply Transform下找到它.


学分:Inkscape论坛> 删除所有变换,同时保持原位

  • 绝对地。这个小插件给你带来的力量是不可估量的! (6认同)
  • 它不适用于矩形(矩形)。 (2认同)

UTF*_*ath 22

对于团体重组可以快速完成工作.选择组并按Ctrl + Shift + G(去组),然后按Ctrl + G(组).

对于一些有类似问题的对象,例如螺旋和星星,快速的方法是按Ctrl + Alt + C(笔划到路径) - 但是这会将对象转换为纯路径并删除所有额外属性,如sodipodi:cx,sodipodi:革命等等.


Tho*_*s W 14

根据我的经验,如果您使用的是Inkscape,只需稍微移动路径元素(例如使用光标键),Inkscape将删除transform属性并相应地调整路径数据.(如果你真的想保留transform属性,那就太烦人了.)

因此,您可以简单地选择路径(确保它是路径而不是周围的组),点击右侧和左侧光标键,您就完成了.

  • 也许先尝试取消组合,然后重新组合. (5认同)

rma*_*ado 14

Inkscape上打开你的svg :

  • 选择包含要删除的所有变换的组
  • CTRL+ U(取消组合)
  • CTRL+ G(再次组)

这样,您将摆脱应用于该组的转换,它们将被转移到该组中包含的路径.

干杯


sno*_*per 13

虽然我更喜欢Inkscape,但Affinity Designer(约40美元/ Mac)在使用Android Vector Drawables时节省了数小时的精力.

打开一个SVG,文件 - >导出 - > SVG - >更多 - > Flatten变换工作得很好.

亲和设计师


Rob*_*gan 10

SVGO是一个出色的开源命令行工具,还有许多其他优化工具.它有一个同样出色的在线网络用户界面,名为SVGOMG

在这种情况下的相关选项是moveGroupAttrsToElems(SVGOMG:)Move group attrs to elementstransform属性从组移动到路径元素,加上convertPathData(SVGOMG :) Round/rewrite paths以展平transformd.

  • SVGO 令人难以置信。这应该是公认的答案,尤其是因为 stackoverflow 是从程序员的角度来看的,而且对于开发包含 SVG 的站点的程序员来说,这是迄今为止最好的解决方案。将其放入您的部署管道中比必须教您的美术师手动删除转换(或必须自己完成)并在每次他们忘记时获得错误报告要好得多 (2认同)
  • 除此之外不再适用.我记得它曾经工作过一次,但是看到这个关于这个确切功能的问题https://github.com/svg/svgo/issues/624 for SVGO (2认同)

小智 8

Inkscape可以选择清除转换数据,但仍然保持对象的值不被修改.

在Inkscape中,选择对象和"路径"菜单,"简化".现在,您将删除转换.

希望能帮助到你.

  • 但是,它会改变路径的轮廓,并减少复杂形状中的顶点数量. (15认同)

Evg*_*eev 8

应该提到偏好中存在"优化"模式:

__PRE__

应该尽可能地减少transform属性的出现,(但不是).

无论如何,这似乎是默认的.

根据讨论,此优化模式缺乏热情的一个实例是页面调整大小时.这会导致将translate变换应用于图层<g>元素.似乎将儿童疏散到另一层是目前最好的解决方案.

  • 要调整页面大小而不在每一层上创建恼人的`translate`变换,请尝试在文本编辑器中打开`.svg`文件并操纵顶部显示的高度和宽度属性. (2认同)

Rob*_*son 6

在这种情况下,只需将translate添加到每个孩子的m值,所以-10.254587 + 10.75 = -0.504587和-308.96875 + 345.43597 = 36.46722.

由于示例中的所有术语都是相对的(即小写),这就是全部.如果任何是绝对的(大写),例如M或C,它们也必须进行调整.

对于比例,您基本上将所有子值乘以比例.

  • @RobertLongson你做的很好.我所希望的只是你详细说明"如果有任何绝对(大写),例如M或C,他们也必须进行调整." (2认同)

mcn*_*ium 6

要从gInkscape 中的元素(组)中删除变换属性,您可以将组移动到其最终位置,将其取消组合,然后重新组合所有元素。现在已经创建了一个新组,如果您不再次移动它,它将不会附加变换属性。


Cha*_*lie 6

  1. 选择有问题的元素
  2. 对象 > 取消组合(重复直到所有内容都取消组合;请参阅 XML 编辑器以了解嵌套节点)
  3. 路径 > 对象到路径(将多边形转换为路径)
  4. 对象 > 变换 > 取消选中相对移动 > 应用


Mic*_*mal 5

就我而言,保存为优化的 SVG 解决了问题。所以在 Inkscape 中使用:

文件 -> 另存为... -> 优化的 SVG。