Combine várias imagens usando o ImageMagick

166

Gostaria de combinar várias imagens em uma imagem usando o ImageMagick. Para explicar um pouco melhor, quero que o resultado seja semelhante a este:

Ou seja, tenho várias capturas de tela e quero transformá-las em uma imagem com as imagens originais umas sobre as outras.

Ao pesquisar no Google, encontrei o comando 'composto', mas não sei se e, nesse caso, como usá-lo para obter o resultado desejado.

Petter
fonte

Respostas:

256

Para qualquer número de arquivos de entrada nomeados :in-<something>.jpg

convert -append in-*.jpg out.jpg

Para ter arquivos específicos anexados ou pular números em vez de obter o "glob" completo, você pode mencionar explicitamente os arquivos de entrada e colocar o appendcomando posteriormente

converter in-1.jpg in-5.jpg em N .jpg + acrescentar out-in1-plus-in5-e-in N .jpg

Você pode usar -append(em vez de +append) para colar verticalmente.

Ou:

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

também criará um arquivo out.jpgque contém uma concatenação vertical das imagens de origem.

convert

Para concatenação simples em uma única linha ou coluna, a appendopção da convertferramenta é suficiente. Observe que -appendconcatena todas as imagens verticalmente, criando uma coluna com n linhas e +appendconcatena horizontalmente, criando uma linha com n colunas.

(Consulte ImageMagick: opções de linha de comando .)

montage

Para obter um controle mais preciso sobre o layout, precisaríamos da montageferramenta. montage -mode concatenatecolará as imagens de entrada como a appendopção e -tile 1xcontrola o layout a ser aplicado.

tilesegue o formato colunas × linhas , mas ambos os lados podem estar ausentes e montagedescobrirão como atender às restrições.

Estamos usando 1x(exatamente uma coluna com qualquer número de linhas) aqui para obter o mesmo efeito que -append. Sem -tile 1x, ele juntaria as imagens como +append, por padrão -tile x1(qualquer número de colunas em uma linha).

(Veja Exemplos do ImageMagick: montagem, matrizes de imagens .)

peth
fonte
1
Obrigado. O append funciona bem, mas considero a montagem interrompida: se as fontes ghostscript não estiverem instaladas, elas serão salvas, MESMO, se você não estiver anotando as imagens. As fontes devem ser carregadas sob demanda, não com antecedência.
Bram
@Ram: Eu não sabia disso e concordo plenamente. Você sabe se o GraphicsMagick se comporta da mesma forma?
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.jpgdeve fazer o trabalho.
gozzilli
2
Observe que o convert -tile 2x2comando etc. lerá os arquivos em ordem alfabética . Isso significa que os pedaços nomeados 0-10serão lidos como 0,10,1,2,..,9. Levei quase duas horas para perceber algo tão básico.
23917 phil294
1
@Blauhirn: Isso converte a classificação dos nomes dos arquivos ou é apenas a sua glob retornando arquivos nessa ordem? por exemplo ls *, retornará esses valores nessa ordem.
naught101