Combina più immagini usando ImageMagick


166

Vorrei combinare più immagini in un'unica immagine usando ImageMagick. Per spiegare un po 'meglio, voglio che il risultato sia simile a questo:

Cioè, ho un certo numero di schermate e voglio trasformarle in un'immagine con le immagini originali sovrapposte.

Da Google, mi sono imbattuto nel comando 'composito', ma non so se, e in quel caso come usarlo per ottenere il risultato che desidero.



Risposte:


256

Per qualsiasi numero di file di input denominati :in-<something>.jpg

convert -append in-*.jpg out.jpg

Per aggiungere file specifici o saltare i numeri invece di ottenere l'intero "glob", puoi menzionare esplicitamente i file di input e inserire il appendcomando in seguito

converti in-1.jpg in-5.jpg in- N .jpg + aggiungi out-in1-plus-in5-and-in N .jpg

È possibile utilizzare -append(anziché +append) per incollare verticale.

O:

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

creerà anche un file out.jpgche contiene una concatenazione verticale delle immagini di origine.

convert

Per una semplice concatenazione in una singola riga o colonna, l' appendopzione dello convertstrumento è sufficiente. Si noti che -appendconcatena tutte le immagini in verticale, creando una colonna con n righe e +appendconcatena in orizzontale, creando una riga con n colonne.

(Vedi ImageMagick: Opzioni della riga di comando .)

montage

Per ottenere un controllo più preciso sul layout, avremmo bisogno dello montagestrumento. montage -mode concatenateincollerà insieme le immagini di input come l' appendopzione e -tile 1xcontrollerà il layout da applicare.

tilesegue il formato colonne × righe , ma entrambi i lati potrebbero mancare e montagescopriranno come soddisfare i vincoli.

Stiamo usando 1x(esattamente una colonna con un numero qualsiasi di righe) qui per ottenere lo stesso effetto di -append. Senza -tile 1x, si unirebbe alle immagini come +append, per impostazione predefinita -tile x1(qualsiasi numero di colonne su una riga).

(Vedi esempi ImageMagick: Montage, Arrays of Images .)


1
Grazie. append funziona bene, ma ritengo che il montaggio non sia corretto: se i caratteri ghostscript non sono installati, verrà salvato, ANCHE se non si stanno annotando le immagini. I caratteri devono essere caricati su richiesta, non in anticipo.
Bram,

@Bram: non lo sapevo e sono fortemente d'accordo. Sai se GraphicsMagick si comporta allo stesso modo?
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.jpgdovrebbe fare il lavoro.
Gozzilli,

2
Notare che il convert -tile 2x2comando ecc. Leggerà i file in ordine alfabetico . Ciò significa che i blocchi denominati 0-10verranno letti come 0,10,1,2,..,9. Mi ci sono voluti quasi 2 ore per realizzare qualcosa di così semplice.
phil294,

1
@ Blauhirn: si tratta di convertire l'ordinamento dei nomi dei file o è solo il tuo glob che restituisce i file in questo ordine? ad es. ls *restituirà quei valori in quell'ordine.
naught101
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.