Wie exportiert man Ebenen einer von Inkscape generierten SVG-Datei im Stapelbetrieb in Bitmap für Sprites?

Batch-Export bedeutet, dass ich möglicherweise bestimmte Transformationen wie Anti-Aliasing, Kontrastkorrekturen und Größenanpassung hinzufügen muss. SVG bedeutet hier, dass ich Inkscape verwende. Eine Ebene hier ist ein Sprite. Ich exportiere derzeit jede Ebene einzeln als Bitmap, File > Export Bitmapaber es ist zeitaufwändig.

Geben Sie hier die Bildbeschreibung ein

  1. Gibt es eine Möglichkeit, Ebenen programmgesteuert im Stapelbetrieb aus einer SVG-Datei zu exportieren?

  2. Oder gibt es in Inkscape einen Batch-Export-Button?

  3. Ich brauche speziell den gleichen benutzerdefinierten Bereich für jedes Sprite, genauso wie viele Male auf die Menüs zu klicken, aber es ist dumm - vielleicht ein Makro dafür?

Antworten (9)

Sie können die Befehlszeile verwenden, um alle Ebenen zu exportieren. Sehen Sie sich zuerst an, wie viele oder welche Ebenen wir haben, mit --query-alloder -S:

$ inkscape --query-all presentation.svg | grep layer | awk -F, '{print $1}'
layer1
layer2
layer3

Mit der ID (genauer Name) des Layers können Sie ihn nun mit --export-id=IDoder -iund exportieren-j, --export-id-only

$ inkscape presentation.svg -i layer1 -j -C --export-png=layer1.png

-C, --export-area-pagedefiniert den exportierten Bereich (ganze Seite, wie in den Dokumenteigenschaften definiert). Sie können auch --export-ps, --export-pdf, --export-epsund einige andere verwenden.


Um es zu automatisieren, können Sie eine Befehlsliste generieren:

$ for id in `seq 1 15`; do echo "presentation.svg -jC -i layer$id -e layer$id.png"; done
presentation.svg -jC -i layer1 -e layer1.png
presentation.svg -jC -i layer2 -e layer2.png
presentation.svg -jC -i layer3 -e layer3.png

Oder um alle Ebenen zu exportieren:

$ für Ebene in $(inkscape --query-all presentation.svg | grep layer | awk -F, '{print $1}'); do echo "presentation.svg -jC -i $layer -e $layer.png"; erledigt

Wenn Sie dies in einer Datei speichern (hier commands.txt), können Sie Inkscape wie folgt aufrufen:

$ inkscape --shell < commands.txt

Führen Sie alle aufgeführten Befehle aus.

Dank des Kanals #inkscape von Freenode können der Benutzer su_.*und verbalsh.*. su_.*lieferten die meisten der folgenden Ideen. Bitte beachten Sie, dass der Export ins Raster einen Informationsverlust bedeutet. Außerdem hat Inkscape seltsame Funktionen wie anti-alias-always-on-in-exportation-feature und odd no-control-with-contrast-in-exportation-feature, was einen zusätzlichen Informationsverlust bedeutet. su_.* erwähnt in diesem Zusammenhang: "always antialiased, same renderer as on-canvas" .

Laut "einer früheren Antwort des Autors von JessyInk auf eine verwandte Frage" exportieren Sie hier jede Ebene zusammen mit einer gemeinsamen Hintergrundebene (die die BG-Farbe oder möglicherweise die Exportgröße definiert )su_* .

Verwandte Funktionsanfragen

  • "Optionally disable anti-aliasing for bitmap export" -Thread hier oder den neueren "Kill anti-aliasing for bitmap export" -Thread hier

  • Granulare PNG-Exportoptionen hier

  • 'Funktionsanforderung - Ebenen in PNG-Sequenz exportieren ...' (meistens GUI) hier

  • 'Ebenen selektiv aus der Befehlszeilenschnittstelle exportieren' - bereits machbar AFAIU mit '--export-id' hier

Lösungskandidaten

  • JessyInk: „Mit Inkscape gebündelte Erweiterung zum Erstellen einer ebenenbasierten Präsentation, die ein Ausgabeformat (über „Speichern“) namens „JessInk zipped pdf or png putput ( .zip)“ enthält*. Es "kann ein Zip-Archiv wahlweise mit einem PDF oder PNG pro Ebene erstellen" . Mehr hier .

  • "[E]xport by id from the command line", aber es gibt einige Probleme, wie z. B. zusätzliche Arbeit beim Verstecken der anderen Ebenen, "wenn die Sprites alle übereinander liegen" . Ein Beispiel-Shell-Skript zum Exportieren jeder Ebene in PNG hier .

  • "[D]efiniere die Exportbereiche auf der Kommandozeile" , mehr hier .

  • [Neuartige Idee] "Eine andere externe Erweiterung (zum Erstellen von Animationen) kann auch jede Ebene als Bitmap stapelweise exportieren" , mehr hier .

Verweise

  1. Inkscape-Handbuch zum Export hier .

  2. Befehlszeilen-Nutzungsanweisungen mit $ inkscape --usage.

Tut mir leid, dass ich einen Thread wiederbelebe, dessen Lösung bereits akzeptiert wurde.

Ich hatte das gleiche Problem beim „Batch-Layer-Export“, außer dass ich Gruppen von Layern zusammen exportieren wollte, zum Beispiel LAYER0+LAYER1, LAYER0+LAYER2, LAYER1+LAYER2. Weder JessyInk noch die Skriptdateien von Inkscape Launchpad haben bei mir funktioniert ...

Dies ist eine der ersten Antworten, die ich gelesen habe, und sie hat mir einige wertvolle Links für das von mir geschriebene benutzerdefinierte leichte Skript gegeben, das ich jetzt mit euch teile, in der Hoffnung, dass es nützlich sein wird: https://sites.google.com/site/ rameyarnaud/media/images/inkscape-export-svg-layers-to-gif-animation

Prost!

Ich denke, Inkscape hat keine solche Option. Eine Problemumgehung besteht darin, die Kette zu verwenden ExportOverlays + Ghostscript.

  1. ExportOverlays exportiert n Inkscape-Ebenen in n PDF-Dateien. Mehr hier .

  2. Dann wandeln Sie mit Ghostscript jedes PDF in eine Bitmap um. Mehr hier .

Dies bewirkt auf einem Linux-System einen "Batch-Export von Ebenen in Bitmaps". Ich kenne die Anleitung für Mac und Windows nicht.

Ab Inkscape 1.2+ gibt es jetzt eine native Batch-Export-Funktion.

Sie greifen immer noch wie gewohnt über das Dialogfeld Datei > Exportieren mit ⇧ Shift+ Ctrl+ darauf zu E, aber jetzt gibt es eine Registerkarte Stapel zum Massenexportieren.

Von hier aus können Sie eine Auswahl von Ebenen, mehrere Seiten oder ausgewählte Objekte stapelweise in Raster- (oder sogar Vektor-) Formate exportieren. Sie können der Exportliste auch mehrere gleichzeitige Formate hinzufügen, z. B. JPEG und PNG.

Alle bisher für Save-As unterstützten Formate stehen nun auch für den Batch-Export zur Verfügung.

Geben Sie hier die Bildbeschreibung ein

Um diese Funktionalität voll nutzen zu können, müssen Sie sie möglicherweise unter Bearbeiten > Einstellungen > Eingabe/Ausgabe > Alle Ausgaben im Exportdialog anzeigen aktivieren .

Das folgende Skript ermöglicht den Batch-Export (von der Befehlszeile) einer Reihe von Objekten mit Inkscape, jedes in eine eigene Datei. https://github.com/berteh/svg-objects-export

Zu exportierende Objekte können durch einen regulären Ausdruck in der ID oder mithilfe von xpath identifiziert werden. Jede Option aus der Befehlszeile von synfig kann an das Skript übergeben werden, einschließlich der Angabe Ihres zu exportierenden Bereichs (entweder --export-area-page oder --export-area=x0:y0:x1:y1).

Ergebnisbefehl wäre so etwas wie

./svg-objects-export.py --xpath "//svg:g[@inkscape:groupmode='layer']" --extra '--export-area=40:80:340:580 --export- id-only' -d Ausgabeverzeichnis/ Eingabe.svg

Hoffe das hilft.

Ich habe einen Bash-Einzeiler gefunden, der alle Ebenen in separate Dateien exportieren kann, wobei die Seitengröße beibehalten wird:

for i in $(seq 1 12); do inkscape -f input.svg -z -C -i "layer$i" -j -h 1080 -e "$i.png" & done

Dadurch werden die Ebenen 1 - 12 durchlaufen und jede in einen separaten PNG-Dateinamen layerN.png gerendert

Ich habe diesen netten Python-Code gefunden , um eine input.svg-Datei zu nehmen, zu bestimmen, welche Ebenen angezeigt und welche ausgeblendet werden, und das Ergebnis in eine separate output.svg-Datei zu exportieren:

exportlayers.py --hide layerA --show layerB --show layerB input.svg output.svg

Dies ist sehr praktisch, um programmgesteuert Animationen für die Einbindung in die LaTeX-Beamer-Präsentation zu erstellen. Jede „output.svg“-Datei lässt sich einfach über die Befehlszeile mit Inkscape in eine PDF-Datei konvertieren.

inkscape output.svg --export-pdf=output.pdf

Hoffe das hilft.

Ich habe eine echte Inkscape-Erweiterung für solche Szenarien geschrieben. Ich nenne es den SLiCk Layer Combinator . Sie können es innerhalb von Inkscape oder als Teil eines Skripts verwenden, wenn Sie andere Vorgänge für die Ausgabedateien ausführen müssen, z. B. die Konvertierung in PNG.

Wenn Sie nur eine Ebene pro Datei ausgeben müssen – ohne diese Ebenen mit anderen Ebenen zu kombinieren (was Slick auch kann) – dann würden Sie eine einzelne übergeordnete Ebene namens so etwas wie erstellen --frames--und dann erstellt Slick automatisch eine separate Inkscape-SVG Datei für jede Ebene darunter, --frames--wenn sie ausgeführt wird.

https://github.com/juanitogan/slick