ImageMagick'i kullanarak birden fazla görüntüyü birleştirin


166

ImageMagick kullanarak birden fazla görüntüyü bir görüntüde birleştirmek istiyorum. Biraz daha iyi açıklamak için, sonucun buna benzer görünmesini istiyorum:

Yani, çok sayıda ekran resmim var ve üst üste orijinal görüntülerle tek bir görüntüye dönüştürmek istiyorum.

Googling ile 'composite' komutuna rastladım, ancak bilmiyorum ve bu durumda istediğim sonucu elde etmek için nasıl kullanılacağını bilmiyorum.



Yanıtlar:


256

Herhangi bir sayıdaki giriş dosyası için :in-<something>.jpg

convert -append in-*.jpg out.jpg

Belirli dosyaların eklenmesi veya "glob" un tam yerine geçmek yerine sayıları atlamak için, giriş dosyalarından açıkça bahsedebilir ve appendkomutu daha sonra koyabilirsiniz.

in içinde 5.jpg içinde 1.jpg dönüştürmek N .jpg + ekleme IN5-ve-içinde-in-1-artı- N .jpg

Dikey yapıştırma için -append(yerine +append) kullanabilirsiniz .

Veya:

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

ayrıca out.jpgkaynak görüntülerin dikey bir birleşimini içeren bir dosya oluşturur .

convert

Tek bir satır veya sütunda basit birleştirme için append, convertaracın seçeneği yeterlidir. Not -appendile bir sütun oluşturarak, dikey olarak her görüntü birleştirir n satır ve +appendbirlikte bir satır oluşturarak yatay birleştirir n sütunlar.

(Bkz. ImageMagick: Komut Satırı Seçenekleri .)

montage

Düzen üzerinde daha iyi kontrol elde etmek için montagearaca ihtiyacımız var . montage -mode concatenateGiriş görüntülerini appendseçenek gibi bir araya yapıştırır ve -tile 1xuygulanacak düzeni kontrol eder.

tilesütunlar × satır biçimini izler , ancak her iki taraf da eksik olabilir montageve kısıtlamaları nasıl karşılayacağını çözer.

1xAynı etkiyi elde etmek için burada (herhangi bir sayıda satır içeren tam olarak bir sütun) kullanıyoruz -append. Olmadan -tile 1x, bu gibi görüntüleri katılacağı +appendvarsaymak, -tile x1(bir satırda herhangi bir sayıda sütun).

(Bkz. ImageMagick Örnekleri: Montaj, Görüntü Dizileri .)


1
Teşekkürler. append iyi çalışıyor, ancak montajı bozmuş olarak görüyorum: eğer ghostscript fontları kurulu değilse, görüntüleri ek açıklama yapmazsanız EVEN kurtarılır. Yazı tipleri önceden değil, istek üzerine yüklenmelidir.
Bram

@Bram: Bunu bilmiyordum ve kesinlikle katılıyorum. GraphicsMagick'in aynı şekilde davranıp davranmadığını biliyor musunuz?
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.jpgişi yapmalı.
gozzilli

2
Etc. convert -tile 2x2komutunun dosyaları alfabetik olarak okuyacağını unutmayın . Bu, adlandırılan parçaların 0-10okunacağı anlamına gelir 0,10,1,2,..,9. Bu kadar basit bir şeyi fark etmem neredeyse 2 saatimi aldı.
phil294

1
@Blauhirn: Bu dosya adlarını sıralamaya dönüştürüyor mu, yoksa sadece glob'unuzun dosyaları o sırada mı geri veriyor? örneğin ls *, bu değerleri bu sırayla döndürür.
naught101
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.