ImageMagick - Erstellen eines animierten GIF aus einem gekachelten Bild, Probleme mit den Metadaten der „virtuellen Leinwand“

ImageMagick - Erstellen eines animierten GIF aus einem gekachelten Bild, Probleme mit den Metadaten der „virtuellen Leinwand“

Ich habe ein Bild, das kleinere Bilder ähnlich diesem enthält:

------
| 1  |
------
| 2  |
------
| 3  |
------
| 4  |
------

Jedes Teilbild ist 100 x 200 groß und das Gesamtbild ist 100 x 800 groß

Ich möchte sie alle zu einer einzigen Animation kombinieren, die die Bilder 1 bis 4 in einer Schleife abspielt.

Ich verwende das Tool von imagemagick, convertum die Bilder zuzuschneiden. Ich habe beispielsweise eine Batchdatei erstellt

convert %1 -crop 100x200+0+0 %~n1_01.png
convert %1 -crop 100x200+0+200 %~n1_02.png
convert %1 -crop 100x200+0+400 %~n1_03.png
convert %1 -crop 100x200+0+600 %~n1_04.png

Führen Sie es dann auf einem Image namensmain.jpg

Dadurch wird eine Reihe von Bildern erstellt, aber wenn ich versuche, sie in ein GIF umzuwandeln, so

convert *.png out.gif

Anstelle einer einzelnen Animation der Größe 100 x 200 erhalte ich eine Animation der Größe 100 x 800 und die Bilder werden einfach mit bestimmten Abständen angezeigt.

Wenn ich identifyein paar der zugeschnittenen Bilder habe, bekomme ich

main_01.png PNG 100x200 100x800+0+0 8-bit sRGB 4.74KB 0.000u 0:00.000
main_02.png PNG 100x200 100x800+0+200 8-bit sRGB 3.39KB 0.000u 0:00.000

Vermutlich versucht Imagemagick, hilfreich zu sein, indem es die Metadaten liest und feststellt, dass ich tatsächlich eine Leinwand im Format 100 x 800 verwenden möchte und jedes Bild an den spezifischen Offsets platziert werden sollte. Was ich aber nicht möchte.

tatsächlich, das Lesen derLernprogramm, Imagemagick lässt es dort, um Ihnen zu helfen.

Das heißt, IM behält die Informationen zur „virtuellen Leinwand“, „Seite“ oder „Ebene“ des Bildes bei, um sie für die spätere Verwendung aufzubewahren. Dies ist besonders wichtig für die korrekte Verarbeitung von GIF-Animationen.

Wenn ich jede Datei manuell in Paint öffne und sie dann erneut speichere, main_02.pngerhalte ich bei der erneuten Identifizierung

main_02.png PNG 100x200 100x200+0+0 8-bit sRGB 4.03KB 0.000u 0:00.000

Ich mache das mit allen Bildern, konvertiere sie noch einmal in ein GIF und erhalte schließlich ein 100 x 200 GIF, das so aussieht, wie ich es möchte.

Wie kann ich alle Offsets auf (0, 0) setzen, sodass ich dies nicht manuell über Paint tun muss?

Antwort1

Sie können die Koordinaten der virtuellen Leinwand zurücksetzen, indem Sie +repagenach dem Zuschneiden Folgendes tun:

convert %1 -crop 100x200+0+0 +repage %~n1_01.png
convert %1 -crop 100x200+0+200 +repage %~n1_02.png
convert %1 -crop 100x200+0+400 +repage %~n1_03.png
convert %1 -crop 100x200+0+600 +repage %~n1_04.png

Sie benötigen auch keine Batchdatei, um das Bild in Kacheln aufzuteilen. Wenn Sie nur eine Größe angeben, wird das Bild automatisch in Kacheln aufgeteilt. Verwenden Sie im Ausgabedateinamen „%d“ für die Kachelnummer:

convert %1 -crop 100x200 +repage %~n1_%d.png

Oder in Ihrem Fall mit der zweistelligen Nummer mit fester Breite:

convert %1 -crop 100x200 +repage %~n1_%02d.png

Dadurch werden vier Bilder erzeugt.

Tatsächlich können Sie die GIF-Konvertierung auch mit demselben Befehl durchführen, ohne überhaupt temporäre Zwischenbilddateien erstellen zu müssen. Der folgende Befehl erledigt alles, was Sie wollen, auf einen Schlag:

convert %1 -crop 100x200 +repage out.gif

Weitere Informationen finden Sie unterdie Dokumentation für-cropund auch+repage(Beachten Sie, dass es -repageauch verwendet werden kann, um virtuelle Leinwanddaten in jedem Bild selbst zu bearbeiten).


Eine andere Möglichkeit zum Teilen von Bildern besteht übrigens darin, dieNummervon Kacheln statt der Größe der Kacheln; Sie können dies tun, indem Sie die Größe angebenin Fliesenzum Zuschneiden und Anhängen eines "@"-Zeichens. Dies führt beispielsweise zu den gleichen Ergebnissen wie oben:

convert %1 -crop 1x4@ +repage %~n1_%02d.png

verwandte Informationen