it-swarm.com.de

Transformationen in SVG-Dateien entfernen

Ich habe lange damit zu kämpfen und kann anscheinend nirgends eine Antwort finden, die funktioniert. Ich habe eine SVG-Datei, die folgendermaßen aussieht:

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

Ich möchte die transform="..."-Zeile entfernen, aber mein Bild bleibt dort, wo ich es platziert habe (in InkScape). Wenn ich die Transformation manuell entferne, wird das Bild zu einem anderen Teil des Bildschirms verschoben (wie erwartet), aber ich muss die Transformation vollständig entfernen und gleichzeitig das Bild genau dort lassen, wo ich es möchte. Gibt es eine Möglichkeit, die Transformationen in die Pfadkoordinaten selbst zu entfernen/zu reduzieren? (Die einzigen Transformationen, mit denen ich mich beschäftigen muss, sind Übersetzen und Skalieren, keine Matrizen.)

119
Ephemera

So entfernen Sie transforms in Inkscape

  1. Öffnen Sie die svg-Datei in Inkscape
  2. Gehen Sie zu Bearbeiten -> XML-Editor
  3. Finden Sie Attribute "transformieren" in Ebenen und löschen Sie sie 

So verschieben Sie alle Objekte insgesamt, ohne weitere Transformationsattribute zu erstellen

  1. Gehen Sie zu Bearbeiten -> Alle Ebenen in allen Ebenen auswählen
  2. Gehen Sie zu Objekt -> Transformieren

    Im Transformierenbedienfeld

  3. Deaktivieren Sie Relative Bewegung und prüfen Für jedes Objekt separat anwenden

  4. Stellen Sie die Werte für Horizontal und Vertical entsprechend Ihren Anforderungen ein und klicken Sie auf Apply

Bingo

99
Serge Seletskyy

Ich habe herausgefunden, was das Problem war. Ich hatte gehofft, dass ich nicht auf Roberts Antwort zurückgreifen muss, obwohl ich froh bin, dass es bestätigt wurde! Am Ende war die Antwort von Duopixel tatsächlich die engste, obwohl sich herausstellte, dass auch etwas anderes vor sich ging.

Wenn Sie mit verschiedenen Pfaden in Inkscape-Dokumenten arbeiten, glaube ich, dass das Standardverhalten darin besteht, sie unter einem <svg:g.../>-Tag zusammenzufassen. Beim Ändern von Pfaden in einer Gruppe fügt Inkscape der Gruppe automatisch eine Transformation hinzu, um diese Änderungen darzustellen. Wenn Sie jedoch den XML-Editor öffnen und Ihren Pfad außerhalb des <svg:g.../>-Tags ziehen und ihn zu einem eigenen <svg:path.../>-Tag machen, kann Inkscape die einzelnen Punkte nach Belieben bearbeiten. Am Ende stellte sich heraus, dass es ein Gruppierungsproblem war, obwohl ich nur mit einem Pfad arbeitete! Hoffe, das hilft anderen in ähnlichen Situationen.

46
Ephemera

 enter image description here

  1. Laden Sie Ihre SVG-Datei in Method Draw http://editor.method.ac (Datei> Bild öffnen).
  2. Gruppieren Sie Ihre Elemente (Objekt> Gruppierung von Elementen). Möglicherweise müssen Sie dies mehr als einmal tun.
  3. Wähle deinen Weg
  4. Richten Sie den Pfad neu aus (Objekt> Pfade neu ausrichten).
  5. Speichern Sie Ihr Bild (Datei> Bild speichern) Wenn es in einem neuen Fenster angezeigt wird, können Sie mit der rechten Maustaste klicken und "Bild speichern unter ..."
44
Duopixel

Für Gruppen kann die Umgruppierung die Arbeit schnell erledigen. Wählen Sie die Gruppe aus und drücken Sie Strg + Umschalt + G (Degroup) und dann Strg + G (Gruppe).

Für einige Objekte, die ein ähnliches Problem haben, beispielsweise Spiralen und Sterne, drücken Sie einfach Strg + Alt + C (Strich in Pfad) - dies konvertiert jedoch das Objekt in einen reinen Pfad und entfernt alle zusätzlichen Attribute. wie sodipodi: cx, sodipodi: revolutionen und so weiter. 

21
UTF_or_Death

Es gibt eine inkscape-Erweiterung mit dem Namen Apply Transforms, die Pfade mit ihren Transformationen neu berechnet.

Nach der Installation finden Sie das Menü unter Erweiterungen> Pfad ändern> Transformation anwenden.


credits: Inkscape forum> Entfernen Sie alle Transformationen, während Sie an Ort und Stelle bleiben

18
piotr_cz

Öffne dein SVG auf Inkscape:

  • Wählen Sie die Gruppe aus, die alle Transformationen enthält, die Sie entfernen möchten
  • Drücken Sie CTRL + U (Gruppe auflösen)
  • Drücken Sie CTRL + G (wieder gruppieren)

Auf diese Weise werden die auf die Gruppe angewendeten Transformationen entfernt und auf die in dieser Gruppe enthaltenen Pfade übertragen.

Prost

13
rmartrenado

Nach meiner Erfahrung reicht es aus, wenn Sie Inkscape verwenden, das Pfadelement etwas zu verschieben (z. B. mit den Cursortasten). Inkscape löscht das Transformationsattribut und passt die Pfaddaten entsprechend an. (Ärgerlich, wenn das Transformationsattribut tatsächlich beibehalten werden soll.)

Sie können also einfach den Pfad auswählen (stellen Sie sicher, dass es sich um den Pfad und nicht um die Gruppe handelt), drücken Sie die rechte und linke Cursortaste, und Sie sind fertig.

13
Thomas W

Ich bevorzuge Inkscape, aber Affinity Designer (~ $ 40/Mac) hat mir beim Arbeiten mit Android Vector Drawables stundenlange Arbeit erspart.

Öffnen Sie eine SVG-Datei, Datei -> Exportieren -> SVG -> Weitere -> Flatten-Transformationen.

 Affinity Designer

11
snodnipper

SVGO ist ein hervorragendes Open-Source-Befehlszeilentool für dieses und eine Reihe anderer Optimierungen. Es gibt eine ebenso ausgezeichnete Online-Web-Benutzeroberfläche mit dem Namen SVGOMG

Die relevanten Optionen in diesem Fall sind moveGroupAttrsToElems (SVGOMG: Move group attrs to elements), um transform-Attribute von Gruppen in Pfadelemente zu verschieben, plus convertPathData (SVGOMG: Round/rewrite paths), um transform auf d zu reduzieren.

8
Rob Hogan

Es sollte erwähnt werden, dass es in den Einstellungen den Modus "Optimiert" gibt:

Inkscape Preferences > Transforms > Store transformation > Optimized

Das soll das Auftreten von transform-Attributen so weit wie möglich minimieren (aber nicht).

Dies scheint ohnehin standardmäßig aktiviert zu sein.

Gemäß einer Diskussion gibt es eine Instanz, bei der diesem Optimized-Modus Eifer fehlt, wenn die -Seite geändert wird. Dies führt dazu, dass eine translate-Transformation auf das Layer <g>-Element angewendet wird. Die Evakuierung der Kinder in eine andere Schicht scheint momentan die beste Lösung zu sein.

7
Evgeni Sergeev

Inkscape hat die Option, die Transformationsdaten zu löschen, den Wert des Objekts jedoch unverändert zu lassen.

Wählen Sie in Inkscape das Objekt und das Menü "Pfad", "Vereinfachen" . Nun werden die Transformationen entfernt.

Ich hoffe es hilft.

6
Kumar

In diesem Fall addieren Sie einfach die Übersetzung zu den m-Werten für jedes untergeordnete Element, also -10.254587 + 10.75 = -0.504587 und -308.96875 + 345.43597 = 36.46722.

Da alle Ausdrücke im Beispiel relativ sind (d. H. Kleinschreibung), ist das alles. Wenn es sich um absolute (Großbuchstaben) handelte, z. M oder C müssten sie auch anpassen.

Bei der Skalierung multiplizieren Sie grundsätzlich alle untergeordneten Werte mit der Skalierung.

5
Robert Longson

Um das transform-Attribut aus einem g-Element (einer Gruppe) in Inkscape zu entfernen, können Sie die Gruppe an den endgültigen Ort verschieben, die Gruppierung aufheben und dann alle Elemente neu gruppieren. Jetzt wurde eine neue Gruppe erstellt. Wenn Sie sie nicht erneut verschieben, wird kein Transformationsattribut hinzugefügt.

4
mcnesium
  1. Wählen Sie die betreffenden Elemente aus
  2. Objekt> Gruppierung aufheben (Wiederholen, bis alles aufgehoben ist; siehe XML-Editor für geschachtelte Knoten)
  3. Pfad> Objekt zu Pfad (konvertiert Polygone in Pfade)
  4. Objekt> Transformieren> Relative Verschiebung aufheben> Anwenden
4
Charlie

Wenn jemand hier in Sketch 3 nach einer Lösung dafür sucht, wählen Sie die Ebene aus und klicken Sie dann auf Ebene -> Pfade -> Abflachen.

4
Joel Worsham

Fand es:

  • Stellen Sie die gewünschte Seitengröße ein *
  • Wenn Ihre aktuelle Ebene über eine Transformation verfügt (prüfen Sie mit dem XML-Editor, dies ist die oberste Gruppe unter dem SVG-Element), erstellen Sie eine neue Ebene und verschieben Sie alle Objekte in diese Ebene
  • Gruppierung von Gruppen aufheben (dies ist möglicherweise nicht erforderlich, YMMV)
  • Wählen Sie alle Objekte aus und wenden Sie eine Null-Transformation an (z. B. Skalierung um 100%, 100% oder Pfeil nach rechts + Pfeil nach links), während Sie die Transformation speichern: In Voreinstellungen/Transformationen optimiert haben
  • Wenn Sie Gruppen rückgängig machen mussten, können Sie sie jetzt neu gruppieren
  • Speichern Sie eine Kopie als Optimized SVG und stellen Sie die gewünschte numerische Genauigkeit ein

*: Oder platzieren Sie die Objekte zumindest dort, wo Sie sie benötigen, relativ zur oberen linken Ecke der Seite. Es ist bedauerlich, dass SVG-Koordinaten auf die obere linke Ecke verweisen, während Inkscape die Seite relativ zur linken unteren Ecke ändert!

3
Tobia

Ich konnte eine matrix(...)-Transformation (wegen Spiegelung) loswerden, indem ich den Pfad mit einem Rechteck kombinierte und dann die Knoten des Rechtecks ​​entfernte. Der translate(...)-Teil ist jedoch geblieben.

3
Emily L.

Ich habe die hier veröffentlichte Lösung ausprobiert, nämlich die Gruppentags in der SVG-Datei zu entfernen und in Inkscape (in meinem Fall 0.48.3.1) erneut zu öffnen. Nachdem ich die Pfade mit dem Auswahl- und Umwandlungsmodus (F1) erneut übersetzt und gespeichert habe, wurden die Gruppen-Tags wieder angezeigt. Inkscape speichert alle auf den Pfad angewendeten Transformationen in einem umgebenden Gruppenelement. Wenn Sie nicht das Pfad-Knoten-Auswahlwerkzeug (F2) verwenden, drücken Sie Strg + a und verschieben Sie die Knoten des Pfads an die richtige Stelle. Nachdem ich dies stattdessen getan und gespeichert hatte, fügte Inkscape keine Gruppentags hinzu, da diese Übersetzung direkt auf das Pfadmodell angewendet wurde. Hoffe das hilft.

1
Skadi2k3

In meinem Fall werden die Gruppen tatsächlich durch Schichten verursacht. Durch Löschen aller Ebenen im Dokument wurden die Gruppe und die Transformation gelöscht (möglicherweise kombiniert mit dem Aufheben von Gruppierungsobjekten und dem Gruppieren derselben usw. wie in Entfernen von Transformationen in SVG-Dateien (answer-35490189 von @Charlie oben))

1
Jamie Pate

Dies scheint zufällig zu sein, aber nichts anderes, was ich versucht habe, funktioniert. Einige meiner Pfade hatten eine Art Rand, der nur bei der Auswahl sichtbar war (  example ). Ich denke, das wurde erstellt, als ich eine Ebene aus einer anderen Inkscape-Datei eingefügt und sie um 90 Grad gedreht habe. Dadurch wurde ein Muster ausgefüllt, bei dem die Formen eine andere Transformation haben (Zeilen sind weiter voneinander beabstandet). Ausrichtungsobjekte funktionierten auch nicht wie erwartet. Durch die Verwendung von Apply Transform von @Piotr_cz wurde das Transformationsproblem behoben, der seltsame Rand blieb jedoch erhalten. Ich habe es versehentlich losgelassen, indem ich den Blur on Stroke auf einen beliebigen Wert gesetzt und wieder auf Null gesetzt habe.

0
Jim

Ich habe dieses Problem seit Jahren. Die Lösung besteht eindeutig darin, dynamisch mit Transformationen im Browser spielen zu können, wenn sie in inkscape nicht "behoben" werden.

Ein Benutzer Mc in Inkscape-Foren gab mir diese Lösung

Die Lösung erstellt die aktuelle Transformation zwischen einem SVG-Element und ihrem SVG-Stammelement und gibt dann einen vollständigen Satz von BBox-Informationen basierend auf der Gesamtzahl der Transformationen zurück.

Es ist auch möglich, das Element, auf das sich die Berechnungen beziehen, einfach zu ändern, wenn Sie im Browser zwischen zwei Teilen derselben SVG-Datei arbeiten möchten.

Endlich kann ich tatsächlich ein SVG-Ansichtsfenster schwenken.

0
Jay Day Zee

Irgendwie hatte ich mit keinem der Ansätze Glück. Wenn es einen <defs>-Abschnitt in Ihrer svg gibt und wie folgt verwendet:

<g transform="matrix( *** ) "><use xlink:href="#***"/></g>

möglicherweise müssen Sie alle Verwendungen löschen und alles aus dem Abschnitt defs entfernen. Dann können Sie mit inkscape alles richtig platzieren und dann Transformationen mit dem genannten Plugin anwenden.

0
k102

In meinem Fall löste das Speichern als optimiertes SVG das Problem. Also in Inkscape verwenden:

File->Save as...->Optimized SVG.
0

Mein spezielles Problem war mit Symbolen, die außerhalb der Seite definiert wurden, sodass eine Transformation auf der Seite angezeigt werden musste.

Um die Symbole ohne Transformation auf die Seite zu verschieben, musste ich die folgenden Schritte in Inkscape ausführen:

  1. Öffnet das Symbol-Fenster (Umschalt + Strg + Y)
  2. Entfernen Sie das Symbol aus der Dokumentbibliothek. (Dafür gibt es eine Schaltfläche im Fenster.)
  3. Die Grafik wird jetzt im Dokument außerhalb der Seitenbegrenzung angezeigt.
  4. Gruppieren Sie die Grafik auf. (Dies ist ein entscheidender Schritt!)
  5. Verschieben Sie die Grafik innerhalb der Seitengrenze.
  6. Fügen Sie die Grafik wieder der Symbolbibliothek hinzu.
0
Peter