Ich habe eine heruntergeladene Vektordatei (AI-Format). Die Datei enthält einfache Vektorbilder verschiedener Hunderassen. Ich habe die Datei in inkscape geladen, die Gruppierung aufgehoben und möchte einen Weg finden, jeden Hundevektor als separate Datei zu speichern. Gibt es eine Möglichkeit, dies mit Inkscape oder einem anderen OS / Freeware-Tool zu automatisieren? Ansonsten muss ich jeweils auswählen und Speichern unter. Jede Hilfe wird sehr geschätzt!
UPDATE Vielen Dank an JSBueno für den Rat zum Bearbeiten der eigentlichen SVG-Datei. Mir war nicht klar, dass SVG nur eine XML-Datei ist. Ich sollte in der Lage sein, leicht durch die Datei zu gehen und jeden Hund als separate Datei zu exportieren. Dies wird übrigens viel schneller sein als über die Benutzeroberfläche, die das Ziel dieses Beitrags war. Vielen Dank an alle für den Rat.
Antworten:
Ich habe zwei Lösungen gefunden, um mehrere Objekte aus Inkscape als SVGs zu exportieren. Diese Methoden haben den Vorteil, dass sie Skripte sind, die automatisch ausgeführt werden können und keine Bearbeitung von SVGs in Texteditoren erfordern.
Das Skript svg-object-export exportiert alle Objekte basierend auf regulären Ausdrücken. In Ihrem Fall würde dies funktionieren, indem alle Objekte mit einer bestimmten ID exportiert werden. Um es zu verwenden, klonen Sie zuerst das Skript oder laden Sie es von Github herunter .
In Inkscape müssen Sie die ID aller zu exportierenden Objekte so ändern, dass sie dasselbe Dateinamenmuster haben. Öffnen Sie dazu den Dialog Objekteigenschaften, indem Sie zu Objekt> Objekteigenschaften gehen oder Ctrl+ Shift+ drücken O. In dem ID - Feld ändert sie alle den gleichen Basisname ID zB haben
Dog_1
,Dog_2
,Dog_3
etc (Objekte die gleiche ID nicht haben können).Führen Sie den folgenden Befehl aus, nachdem die Datei gespeichert und das Skript heruntergeladen wurde
python svg-objects-export.py --pattern 'Dog_*' /path/to/your/file.svg
Dadurch werden alle Objekte mit der Basisnamen-ID "Dog_" exportiert.
Die inkscape-Erweiterung inx-exportobjects exportiert einfach alle ausgewählten Objekte. Um es zu verwenden, klonen Sie zuerst die Erweiterung oder laden Sie sie von Gitlab herunter . Um es zu installieren, kopieren Sie die Dateien
export_objects.inx
undexport_objects.py
nach.config/inkscape/extensions/
. In Inkscape haben Sie unter Erweiterungen> Exporte die Option "Objekte in Dateien ...". Wählen Sie die Objekte aus, die Sie installieren möchten, und wählen Sie diese Option aus.Ändern Sie in diesem Dialogfeld einfach das Exportverzeichnis an den Ort, an dem Sie Ihre Dateien speichern möchten, und ändern Sie den Basisnamen in den neuen Namen der Dateien. Drücken Sie dann auf Übernehmen.
Die Dateien werden in das angegebene Verzeichnis exportiert.
Jede der Lösungen verfügt über viele andere Optionen, z. B. den animierten GIF-Export, mit dem Sie unbedingt experimentieren sollten.
quelle
Abhängig von der Voraussetzung, dass alle Ihre Objekte gruppiert und nicht selbst zu größeren Gruppen zusammengefasst werden, gehen Sie wie folgt vor. (Ich habe im Beispiel Katzen verwendet, weil Hunde nicht verfügbar waren).
Unten rechts sehen Sie eine hervorgehobene Katze, Objekt-ID 5358, die ein einzelner Pfad ist. Daher habe ich später einen grünen Boden hinzugefügt, der ihn in Objekt 5364 geändert hat, das später auftreten wird. Lassen Sie sich also nicht verwirren. :) :)
Sie erhalten den XML-Editor, indem Sie auf die Schaltfläche 4 von rechts klicken (Pfeil 1).
Ich habe g5358 in g-cat-5358 (Feld 4) geändert, um es einem Texttool zu erleichtern, diese Objekte auszuwählen. Dies funktioniert für die meisten Elemente, die nicht mit XML-SVG-Namen kollidieren (Farbe, Meta, ID, ... ).
Im linken Fenster sehen Sie, dass es bereits eine umbenannte Entität gibt, g-cat-5312, die sich oben auf derselben Einrückungsstufe befindet.
Inkscape organisiert eindeutige IDs für Gruppen, diese müssen jedoch nicht die Form gNUMBER haben. Sie können auch andere Zeichen mischen. Wählen Sie einfach keine bereits vorhandene Kennung aus.
Nachdem Sie die Kennung geändert haben, drücken Sie 'setzen (set)' (5), um Ihre Änderung zu bestätigen. Sie sehen hier eine deutsche Schnittstelle, YMMV.
Speichern Sie die SVG (als demo-cats.svg). Wir wechseln jetzt zu Scripting.
Was tut es? Es sucht (mit grep suchen) nach dem "g-cat-" Muster, das der Beginn unseres interessanten Abschnitts ist.
id=${cat//[^0-9]/}
extrahiert die ID in Bash aus dem Ausdruck. Echo druckt es auf dem Bildschirm aus, um den Fehler zu finden, wenn etwas schief geht. head -n 53 demo-katzen.svg nimmt die ersten 53 Zeilen aus dem svg, das alle svg-boilerplate enthält. Abhängig von Ihren Einstellungen mit verschiedenen SVG-Formaten (inkscape, komprimiert, normales SVG, inkscape-komprimiert) kann dies variieren. Mitnl demo-cats.svg | less
Sie können n die umerate l ines, den richtigen Schnittpunkt in Ihrem Fall zu finden.^ Bis zu diesem Teil sollten die Zeilen enthalten sein.
Der nächste Befehl wird mit dem fertig s tream ed itor sed:
sed -n "/$cat/,/^ <\/g>/p" demo-cats.svg;
sagt (-n) kein Druck (aber) searche für die Katze Gruppe zu dem schließenden Tag g bei Einrückungsebene bis 2, 4 Leerzeichen vor dem ist ,</g>
wenn Sie nicht Ändern Sie die Inkscape-Einstellungen, an die Sie sich möglicherweise erinnern, wenn Sie dies getan haben. Fügen Sie dann das schließende Tag für svg hinzu :echo "</svg>"
. Schreiben Sie die Ausgabe in die Datei 'cat- $ id.svg' (dies überschreibt stillschweigend vorhandene Dateien).Am Ende habe ich zwei Dateien: cat-5312.svg und cat-5364.svg.
Eine elegantere Lösung sollte mit xmlstarlet oder ähnlichen Tools möglich sein, mit denen XML-Dateien durchsucht und bearbeitet werden können. Leider bin ich nicht daran gewöhnt und habe es nach 10 Minuten Dokumentation nicht zum Laufen gebracht. Sie müssten die Gruppen am Anfang nicht umbenennen.
quelle