Ich möchte mit ImageMagick mehrere Bilder zu einem Bild kombinieren. Um es etwas besser zu erklären, möchte ich, dass das Ergebnis so aussieht:
Das heißt, ich habe eine Reihe von Screenshots, und ich möchte sie in ein Bild mit den Originalbildern übereinander verwandeln.
Beim Googeln bin ich auf den Befehl 'composite' gestoßen, aber ich weiß nicht, ob und wie ich ihn verwenden soll, um das gewünschte Ergebnis zu erzielen.
imagemagick
image-processing
Petter
quelle
quelle
Antworten:
Für eine beliebige Anzahl von Eingabedateien mit dem Namen :
in-<something>.jpg
Um bestimmte Dateien anhängen zu lassen oder Zahlen zu überspringen, anstatt den vollständigen "Glob" zu erhalten, können Sie die Eingabedateien explizit erwähnen und den
append
Befehl danach einfügenSie können
-append
(anstelle von+append
) für vertikales Einfügen verwenden.Oder:
erstellt auch eine Datei
out.jpg
, die eine vertikale Verkettung der Quellbilder enthält.convert
Für die einfache Verkettung in einer einzelnen Zeile oder Spalte ist die
append
Option desconvert
Tools ausreichend. Beachten Sie, dass-append
alle Bilder vertikal verkettet werden, wobei eine Spalte mit n Zeilen erstellt wird, und+append
horizontal verkettet wird, wobei eine Zeile mit n Spalten erstellt wird.(Siehe ImageMagick: Befehlszeilenoptionen .)
montage
Um eine genauere Kontrolle über das Layout zu erhalten, benötigen wir das
montage
Tool.montage -mode concatenate
klebt die eingegebenen Bilder wie bei derappend
Option zusammen und-tile 1x
steuert das anzuwendende Layout.tile
folgt dem Format Spalten × Zeilen , aber jede Seite kann fehlen undmontage
wird herausfinden, wie die Einschränkungen zu erfüllen sind.Wir verwenden hier
1x
(genau eine Spalte mit einer beliebigen Anzahl von Zeilen), um den gleichen Effekt wie zu erzielen-append
. Ohne-tile 1x
würde es die Bilder wie+append
standardmäßig verbinden-tile x1
(beliebig viele Spalten in einer Zeile).(Siehe ImageMagick-Beispiele: Montage, Arrays von Bildern .)
quelle
convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpg
sollte den Job machen.convert -tile 2x2
Befehl etc. die Dateien alphabetisch liest . Dies bedeutet, dass die genannten Chunks0-10
wie folgt gelesen werden0,10,1,2,..,9
. Ich brauchte fast 2 Stunden, um etwas so grundlegendes zu realisieren.ls *
werden diese Werte in dieser Reihenfolge zurückgegeben.