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, convert
um 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 identify
ein 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.png
erhalte 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 +repage
nach 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-crop
und auch+repage
(Beachten Sie, dass es -repage
auch 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