我一直在努力解决这个问题,似乎无法在任何地方找到答案(有效)。我有一个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>
我想删除transform="..."
行,但仍然将我的图片留在我放置的位置(在InkScape中)。如果我手动删除变换,图像会拉到屏幕的另一部分(正如预期的那样),但我需要完全摆脱变换,同时让图像保持在我想要的位置。有没有办法将变换移除/压平到路径坐标本身? (我必须处理的唯一变换是平移和缩放,没有矩阵。)
答案 0 :(得分:109)
如何在Inkscape中删除转换
如何在不创建其他转换属性的情况下完全移动所有对象
转到对象 - &gt;变换
在“变换”面板中
取消选中相对移动并选中单独应用于每个对象
宾果
答案 1 :(得分:47)
我找出了问题所在。我希望不要诉诸罗伯特的答案,虽然我很高兴确认它会起作用!最后Duopixel的答案实际上是最接近的,尽管事实证明其他事情也在发生。
当您在Inkscape文档中使用不同路径时,我认为其默认行为是将它们组合在一个<svg:g.../>
标记下。修改组中的路径时,Inkscape将自动向组添加转换以表示这些更改。但是,如果您打开XML编辑器并将路径拖到<svg:g.../>
标记之外并使其成为自己的<svg:path.../>
标记,则Inkscape可以随意编辑各个点。最后它确实成了一个分组问题,尽管我只是在一条路上工作!希望这能帮助处于类似情况的其他人。
答案 2 :(得分:45)
答案 3 :(得分:21)
对于群组重新组合可以快速完成工作。选择组并按Ctrl + Shift + G(去组),然后按Ctrl + G(组)。
对于一些有类似问题的对象,例如螺旋和星星,快速的方法是按Ctrl + Alt + C(描边到路径) - 然而这会将对象转换为纯路径并删除所有额外的 - 属性,如sodipodi:cx,sodipodi:革命等。
答案 4 :(得分:21)
有一个名为 Apply Transforms 的inkscape扩展程序可以使用它的转换重新计算路径,这正是我一直在寻找的。 p>
安装完成后,您会在 Extensions&gt;下找到它。修改路径&gt;应用转换。
信用:Inkscape论坛&gt; Remove all transforms whilst keeping in-place
答案 5 :(得分:13)
根据我的经验,如果您使用的是Inkscape,只需稍微移动路径元素(例如使用光标键),Inkscape将删除transform属性并相应地调整路径数据。 (如果你真的想要保留transform属性,那就太烦人了。)
所以,你可以简单地选择路径(确保它是路径而不是周围的组),点击右边和左边的光标键,你就完成了。
答案 6 :(得分:13)
在 Inkscape :
上打开您的svg通过这种方式,您将摆脱应用于该组的转换,它们将被转移到该组中包含的路径。
干杯
答案 7 :(得分:11)
虽然我更喜欢Inkscape,Affinity Designer(约40美元/ Mac)在使用Android Vector Drawables时节省了数小时的工作量。
打开SVG,文件 - &gt;出口 - &gt; SVG - &gt;更多 - &gt; 拼合变换效果很好。
答案 8 :(得分:9)
SVGO是一个出色的开源命令行工具,可用于此以及其他一些优化工具。它有一个同样出色的在线网络用户界面,名为SVGOMG
此案例中的相关选项为moveGroupAttrsToElems
(SVGOMG:Move group attrs to elements
),可将transform
个属性从组移至路径元素,再加convertPathData
(SVGOMG:{{1}将Round/rewrite paths
展平为transform
。
答案 9 :(得分:7)
应该提到的是&#34;优化&#34;偏好中的模式:
Inkscape Preferences > Transforms > Store transformation > Optimized
应该尽可能减少transform
属性的出现,(但不是)。
无论如何,这似乎默认开启。
根据a discussion,此优化模式缺乏热情的一个实例是页面调整大小。这会导致translate
转换应用于图层<g>
元素。似乎将儿童疏散到另一层是目前最好的解决方案。
答案 10 :(得分:6)
Inkscape可以选择清除转换数据,但仍然保持对象的值不被修改。
在Inkscape中,选择对象和“路径”菜单,“简化”。 现在,您将删除转换。
希望它有所帮助。
答案 11 :(得分:5)
在这种情况下,只需将translate添加到每个孩子的m值,所以-10.254587 + 10.75 = -0.504587和-308.96875 + 345.43597 = 36.46722。
由于示例中的所有术语都是相对的(即小写),所有这些术语都是相对的。如果有绝对(大写),例如M或C他们也必须调整。
对于比例尺,您基本上将所有子值乘以比例。
答案 12 :(得分:4)
答案 13 :(得分:4)
如果有人在此处寻找解决方案在Sketch 3中执行此操作,请选择图层,然后单击图层 - &gt;路径 - &gt;展平。
答案 14 :(得分:4)
要从Inkscape中的g
元素(组)中删除transform属性,您可以将组移动到最终位置,取消组合,然后重新组合所有元素。现在已经创建了一个新组,如果您再次移动它,它将不会附加转换属性。
答案 15 :(得分:3)
通过将路径与矩形组合,然后删除矩形的节点,我能够摆脱matrix(...)
变换(由于镜像)。尽管translate(...)
部分仍然存在。
答案 16 :(得分:3)
找到它:
*:或者至少将对象放在您需要的位置,相对于页面的左上角。不幸的是,SVG坐标引用左上角,而Inkscape相对于左下角调整页面大小!
答案 17 :(得分:2)
如果您使用的是Inkscape,这将起作用:
在我尝试过的所有情况下,这都删除了所有转换属性。不确定是否适用于更复杂的SVG。
答案 18 :(得分:1)
在我的情况下,这些组实际上是由图层引起的。删除文档中的所有图层会删除组并进行转换(可能与取消组合对象并重新组合它们等,如Removing transforms in SVG files(上面的@Charlie的答案-35490189))
答案 19 :(得分:1)
我尝试了这里发布的解决方案,即删除SVG文件中的组标签,然后在Inkscape中重新打开它(在我的情况下为0.48.3.1)。唉,在我使用选择和转换模式(F1)再次翻译路径并保存后,组标签重新出现! Inkscape保存应用于周围组元素中的路径的所有转换。除非使用路径节点选择工具(F2),否则按ctrl + a并将路径的节点移动到正确的位置。之后我完成了此操作并保存后,Inkscape没有添加组标签,因为此转换直接应用于路径模型。希望这会有所帮助。
答案 20 :(得分:1)
就我而言,另存为优化的SVG解决了该问题。因此在Inkscape中使用:
File->Save as...->Optimized SVG.
答案 21 :(得分:0)
多年来我一直有这个问题。如果它不会在inkscape中被“修复”,那么解决方案显然能够在浏览器中动态播放变换。
Inkscape论坛的用户 Mc 给了我this solution。
该解决方案构建SVG元素及其SVG根元素之间的当前变换,然后根据变换的总和返回一整套BBox信息。
如果您想在同一SVG文件的两个部分之间进行浏览器工作,也可以轻松更改计算相对的元素。
最后我实际上可以有一个平移SVG视口。
答案 22 :(得分:0)
我的具体问题是在页面外定义的符号,因此需要在页面上显示转换。
要将符号移动到页面而不需要转换,我必须在Inkscape中执行以下步骤:
答案 23 :(得分:0)
这似乎是随机的,但我没有尝试过任何其他工作,所以在这里你随机去其他人。我的一些路径有一些边缘,只有在选择它们时才能看到()。我认为这是在我从另一个inkscape文件粘贴一个图层并将其旋转90度时创建的。这使得形状上的图案填充具有不同的变换(线间隔得更远)。它还使对齐对象无法按预期工作。使用@Piotr_cz提到的Apply Transform修复了转换问题,但奇怪的余量仍然存在。我不小心通过将笔画上的模糊改为任何值并将其改回零来摆脱它。
答案 24 :(得分:0)
不知怎的,我对任何一种方法都没有运气。如果您的svg中有<defs>
部分,请使用以下内容:
<g transform="matrix( *** ) "><use xlink:href="#***"/></g>
您可能必须删除所有用法并从defs部分取出所有内容。然后,您可以使用inkscape以正确的方式放置所有内容,然后使用上述插件应用转换。 希望它可以帮到某人。
答案 25 :(得分:0)
Kubuntu 20.04上的Inkscape 1.0
尽管此线程很旧,但我想发表我的经验/解决方案。尝试为FreeCAD的TechDrawing工作台创建模板时遇到了这个问题。这些模板不得包含任何转换。
就我而言,我必须从外部.svg文件(完全由Inkscape制作)中添加公司徽标。该徽标包含图形和文本元素。将徽标复制到模板中时,创建了转换,这导致模板在FreeCAD中无法正常工作。
首先,在www.freecadweb.org/...上建议的此解决方案不适用于我。这就是为什么我在网上搜索并找到此讨论的原因。
第二,以上建议的解决方案都没有对我有用,但它们使我走上了正确的轨道。查理的答案接近了,但是 Object> Transform> Uncheck relative move> Apply 并没有显示出差异。
对我有用的是:
当我在FreeCAD中使用该模板时,效果很好。
一个奇怪的细节: 尽管我的解决方案暗示文本元素是我的问题,但这并不是那么容易。实际上,基础文档(我将徽标复制到其中的文档)包含许多文本元素,而我没有进行任何转换。因此,可能是“外部来源” 和文本元素的组合。我只是将此详细信息发布给其他人,可能有相关问题。