Łącz wiele obrazów za pomocą ImageMagick


166

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.



Odpowiedzi:


256

Dla dowolnej liczby plików wejściowych o nazwie :in-<something>.jpg

convert -append in-*.jpg out.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ć appendpolecenie później

konwersja in-1.jpg in-5.jpg in N .jpg + dołącz out-in1-plus-in5-and-in N .jpg

Możesz użyć -append(zamiast +append) do pionowego wklejania.

Lub:

montage -mode concatenate -tile 1x in-*.jpg out.jpg

utworzy również plik out.jpgzawierający pionową konkatenację obrazów źródłowych.

convert

Do prostego łączenia w jednym rzędzie lub kolumnie wystarcza appendopcja tego convertnarzędzia. Zauważ, że -appendkonkatenuje wszystkie obrazy w pionie, tworząc jedną kolumnę z n rzędami, i +appendkonkatenuje 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 montagenarzędzia. montage -mode concatenatesklei obrazy wejściowe razem, podobnie jak appendopcja, i -tile 1xsteruje układem, który zostanie zastosowany.

tilepostępuje zgodnie z formatem kolumn × wierszy , ale może brakować jednej ze stron i montagedowie 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 1xtego łączyłby obrazy jak +append, domyślnie -tile x1(dowolna liczba kolumn w jednym rzędzie).

(Zobacz przykłady ImageMagick: montaż, tablice obrazów .)


1
Dzięki. append działa dobrze, ale uważam, że montaż jest zepsuty: jeśli czcionki ghostscript nie zostaną zainstalowane, wyskoczy, NAWET jeśli nie dodasz adnotacji do obrazów. Czcionki należy ładować na żądanie, a nie z wyprzedzeniem.
Bram

@Bram: Nie wiedziałem o tym i zdecydowanie się zgadzam. Czy wiesz, czy GraphicsMagick zachowuje się tak samo?
peth

2
@MikeRobinson convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpgpowinien wykonać zadanie.
gozzilli

2
Zauważ, że convert -tile 2x2polecenie itd. Odczyta pliki alfabetycznie . Oznacza to, że nazwane fragmenty 0-10będą czytane jak 0,10,1,2,..,9. Zajęło mi prawie 2 godziny, aby zrealizować coś tak podstawowego.
Blauhirn

1
@Blauhirn: Czy ten konwerter sortuje nazwy plików, czy to tylko glob zwracający pliki w tej kolejności? np. ls *zwróci te wartości w tej kolejności.
naught101
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.