Chciałbym połączyć wiele obrazów w jeden obraz za pomocą ImageMagick. Aby wyjaśnić trochę lepiej, chcę, aby wynik wyglądał podobnie do tego:
To znaczy, mam kilka zrzutów ekranu i chcę je przekształcić w jeden obraz z oryginalnymi obrazami na sobie.
W Googlingu natknąłem się na polecenie „kompozytowe”, ale nie wiem, czy w takim przypadku jak go użyć, aby uzyskać pożądany rezultat.
imagemagick
image-processing
Petter
źródło
źródło
Odpowiedzi:
Dla dowolnej liczby plików wejściowych o nazwie :
in-<something>.jpg
Aby dodać określone pliki lub pominąć liczby zamiast pełnego „glob”, możesz wyraźnie wspomnieć o plikach wejściowych i umieścić
append
polecenie późniejMożesz użyć
-append
(zamiast+append
) do pionowego wklejania.Lub:
utworzy również plik
out.jpg
zawierający pionową konkatenację obrazów źródłowych.convert
Do prostego łączenia w jednym rzędzie lub kolumnie wystarcza
append
opcja tegoconvert
narzędzia. Zauważ, że-append
konkatenuje wszystkie obrazy w pionie, tworząc jedną kolumnę z n rzędami, i+append
konkatenuje w poziomie, tworząc jeden wiersz z n kolumnami.(Zobacz ImageMagick: Opcje wiersza polecenia .)
montage
Aby uzyskać lepszą kontrolę nad układem, potrzebowalibyśmy tego
montage
narzędzia.montage -mode concatenate
sklei obrazy wejściowe razem, podobnie jakappend
opcja, i-tile 1x
steruje układem, który zostanie zastosowany.tile
postępuje zgodnie z formatem kolumn × wierszy , ale może brakować jednej ze stron imontage
dowie się, jak spełnić ograniczenia.Używamy tutaj
1x
(dokładnie jednej kolumny z dowolną liczbą wierszy), aby uzyskać taki sam efekt jak-append
. Bez-tile 1x
tego łączyłby obrazy jak+append
, domyślnie-tile x1
(dowolna liczba kolumn w jednym rzędzie).(Zobacz przykłady ImageMagick: montaż, tablice obrazów .)
źródło
convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpg
powinien wykonać zadanie.convert -tile 2x2
polecenie itd. Odczyta pliki alfabetycznie . Oznacza to, że nazwane fragmenty0-10
będą czytane jak0,10,1,2,..,9
. Zajęło mi prawie 2 godziny, aby zrealizować coś tak podstawowego.ls *
zwróci te wartości w tej kolejności.