Speichern Sie mehrere Objekte aus der Vektordatei in separaten Dateien mit Inkscape / OS / Freeware

9

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.

Dinki
quelle
Warum können Sie nicht alle auswählen und speichern unter? Gibt es wirklich so viele Bilder, dass eine automatisierte Lösung obligatorisch ist?
Scott
2
Um dies automatisieren zu können, müssten Sie "dog" -Elemente definieren können, die aus der SVG-Datei extrahiert werden sollen. In Wirklichkeit bestehen Ihre Hundeelemente aus einzelnen zusammengesetzten Linien bis hin zu abgeschnittenen Gruppen. Ich schlage vor, Sie lernen die erforderlichen Tastaturkürzel, wählen Musik aus und fahren fort.
Ja, ich habe mehr als 80 einzelne Objekte für dieses. Ich suche nur nach einem schnelleren Weg, werde es aber manuell tun, wenn es das ist, was es braucht.
Dinki
Das können Sie sicher schreiben. Zum Beispiel würde jemand, der mit Python vertraut ist, mindestens die Zeit benötigen, die erforderlich ist, um 30 Ihrer 80 Hunde zu "speichern", um ein solches Skript zu erstellen. Ein ungelernter Programmierer oder sogar jemand, der mit Inkscape-Helerp-Funktionen / XML nicht vertraut ist, kann viel mehr Zeit in Anspruch nehmen als die Rettung der 80 Hunde.
Jsbueno
Letztendlich können Sie die SVG-Datei einfach in einem Texteditor (Notepad ++) verfassen und prüfen, ob jeder Hund in einem separaten SVG-Tag enthalten ist . Mit der inkscape-Benutzeroberfläche ist es möglicherweise noch schneller.
Jsbueno

Antworten:

5

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.

  1. SVG-Objekte-Export

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_3etc (Objekte die gleiche ID nicht haben können).

Geben Sie hier die Bildbeschreibung ein

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.

  1. inx-exportobjects

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.inxund export_objects.pynach .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.

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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.

Hellocatfood
quelle
Hervorragende Lösung @hellocatfood Nur ein Tipp: Bevor Sie exportieren, können Sie die Größe der Leinwand ändern. In meinem Fall hatte ich viele Symbole. Ich habe die maximale Breite und Höhe der Symbole herausgefunden. Ändern Sie dann die Größe der Leinwand auf die jeweilige Höhe x Breite. Wählen Sie als Nächstes alle Objekte aus, richten Sie sie horizontal und vertikal aus und starten Sie den Exportvorgang. Auf diese Weise erhalten Sie die SVGs mit der richtigen Höhe und Breite.
Anish Nair
1

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

Geben Sie hier die Bildbeschreibung ein 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.

for cat in $( grep g-cat- demo-cats.svg )
do
  id=${cat//[^0-9]/}
  echo $id
  (head -n 53 demo-cats.svg; sed -n "/$cat/,/^    <\/g>/p" demo-cats.svg; echo "</svg>" ) > cat-${id}.svg
done

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. Mit nl demo-cats.svg | lessSie können n die umerate l ines, den richtigen Schnittpunkt in Ihrem Fall zu finden.

  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
     <g

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

Benutzer unbekannt
quelle