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.
imagemagick
image-processing
Petter
fonte
fonte
Respostas:
Para qualquer número de arquivos de entrada nomeados :
in-<something>.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
append
comando posteriormenteVocê pode usar
-append
(em vez de+append
) para colar verticalmente.Ou:
também criará um arquivo
out.jpg
que contém uma concatenação vertical das imagens de origem.convert
Para concatenação simples em uma única linha ou coluna, a
append
opção daconvert
ferramenta é suficiente. Observe que-append
concatena todas as imagens verticalmente, criando uma coluna com n linhas e+append
concatena 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
montage
ferramenta.montage -mode concatenate
colará as imagens de entrada como aappend
opção e-tile 1x
controla o layout a ser aplicado.tile
segue o formato colunas × linhas , mas ambos os lados podem estar ausentes emontage
descobrirã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 .)
fonte
convert -append `counter=0; for x in in-*; do if [[ $(($counter % 2)) == 0 ]]; then echo $x; fi; counter=$((counter + 1)); done` out.jpg
deve fazer o trabalho.convert -tile 2x2
comando etc. lerá os arquivos em ordem alfabética . Isso significa que os pedaços nomeados0-10
serão lidos como0,10,1,2,..,9
. Levei quase duas horas para perceber algo tão básico.ls *
, retornará esses valores nessa ordem.