Combinez plusieurs images à l'aide d'ImageMagick

164

J'aimerais combiner plusieurs images en une seule image à l'aide d'ImageMagick. Pour expliquer un peu mieux, je veux que le résultat ressemble à ceci:

C’est-à-dire que j’ai plusieurs captures d’écran et que je veux les transformer en une seule image avec les images originales les unes sur les autres.

En cherchant sur Google, je suis tombé sur la commande 'composite', mais je ne sais pas si, et dans ce cas, comment l'utiliser pour obtenir le résultat souhaité.

Petter
la source
stackoverflow.com/questions/12076293/…
Ciro Santilli dans la base de données 996ICU le

Réponses:

254

Pour n'importe quel nombre de fichiers d'entrée nommés :in-<something>.jpg

convert -append in-*.jpg out.jpg

Afin d’ajouter des fichiers spécifiques ou d’ignorer des numéros au lieu d’obtenir le "glob" complet, vous pouvez mentionner explicitement les fichiers d’entrée et mettre la appendcommande par la suite.

convertir in-1.jpg in-5.jpg in N .jpg + append in -in1-plus-in5-and-in N .jpg

Vous pouvez utiliser -append(au lieu de +append) pour coller verticalement.

Ou:

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

créera également un fichier out.jpgcontenant une concaténation verticale des images sources.

convert

Pour une concaténation simple dans une seule ligne ou une seule colonne, l' appendoption de l' convertoutil est suffisante. Notez que -appendconcatène toutes les images verticalement, créant une colonne de n lignes et +appendconcaténant horizontalement, créant une ligne de n colonnes.

(Voir ImageMagick: Options de ligne de commande .)

montage

Pour mieux contrôler la mise en page, nous aurions besoin de l' montageoutil. montage -mode concatenatecollera les images d'entrée ensemble comme l' appendoption et -tile 1xcontrôlera la mise en page à appliquer.

tilesuit le format colonnes × lignes , mais l’un ou l’autre des côtés peut être manquant et montagedéterminera comment respecter les contraintes.

Nous utilisons 1x(exactement une colonne avec un nombre quelconque de lignes) ici pour obtenir le même effet que -append. Sans -tile 1xcela, les images seraient jointes comme par +appenddéfaut -tile x1(nombre quelconque de colonnes sur une ligne).

(Voir Exemples ImageMagick: Montage, Tableaux d'images .)

peth
la source
1
Merci. append fonctionne bien, mais je considère que le montage est défectueux: si les polices ghostscript ne sont pas installées, le logiciel sera automatiquement supprimé, MÊME si vous n'annotez pas les images. Les polices doivent être chargées à la demande et non à l’avance.
Bram le
@Bram: Je ne le savais pas et suis tout à fait d'accord. Savez-vous si GraphicsMagick se comporte de la même manière?
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.jpgdevrait faire le travail.
Gozzilli
2
Notez que la convert -tile 2x2commande etc. lira les fichiers par ordre alphabétique . Cela signifie que les morceaux nommés 0-10seront lus comme 0,10,1,2,..,9. Il m'a fallu presque 2 heures pour réaliser quelque chose d'aussi basique.
Blauhirn
1
@Blauhirn: Est-ce que cette conversion trie les noms de fichiers, ou est-ce juste votre glob qui renvoie des fichiers dans cet ordre? par exemple ls *, renverra ces valeurs dans cet ordre.
naught101