Łą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.

Petter
źródło
Czy sprawdziłeś przykłady warstw obrazów w obrazie ?
timbooo
stackoverflow.com/questions/12076293/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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 .)

peth
źródło
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