J'ai un tas de photos. Ils sont tous de la même hauteur, et j'essaie de les assembler dans une image composite en utilisant le programme de montage d'ImageMagick via Bash. Le problème est que par défaut, la taille de la tuile (une image occupe une tuile) est égale à l'image avec les plus grandes dimensions. Les images étroites sont donc entourées de beaucoup d'espace blanc. Je veux supprimer cet espace blanc. Comment puis-je le faire?
bash
imagemagick
image-manipulation
Gilles 'SO- arrête d'être méchant'
la source
la source
Réponses:
Essayez quelque chose comme ceci:
Cela rendra la frontière entre les images aussi petite que possible et tout ce qui s'y trouvera sera transparent.
Pour voir une démonstration de la différence à l'aide d'images intégrées, essayez-les et comparez:
Voir Utilisation du montage .
Si vous publiez un exemple de ce que vous obtenez et modifiez manuellement ensemble un exemple de ce que vous souhaitez en conséquence, nous pourrons peut-être nous rapprocher un peu de cela.
Voici des exemples que j'aime mieux que ceux que j'ai initialement publiés ci-dessus:
la source
Je serais d'accord avec la réponse acceptée de
-geometry +0+0
supprimer l'espace de tuile supplémentaire, et j'ajouterais-mode Concatenate
(sous certaines conditions).De plus, une fois que vous avez des tailles différentes
montage
, il devient un peu difficile de discerner ce qui est "fond de tuile" (espace de tuile) vs "cadre" et "bordure" - je perds souvent la trace moi-même, voici donc un petit test avec images (cliquables):Eh bien, j'espère que cela pourra vous être utile,
Cheers!
EDIT: J'ai mis en place une petite interface graphique Python / Tkinter / PIL pour ImageMagick, tkGui_ImageMagick.py - et enfin j'ai pu trouver la ligne de commande appropriée pour quelque chose que je voulais: faire un montage de quatre images, où la hauteur et la largeur des tuiles correspondent à la plus grande largeur de cette colonne (ou hauteur de ligne).
Dans cet exemple, img1 (200x100) et img2 (300x200) vont dans la première colonne, la plus grande largeur est 300 - ce qui devrait définir la largeur de tuile de img1. En outre, img1 doit avoir sa hauteur corrélée à la plus grande hauteur d'img3 (300 px), avec laquelle il forme une ligne. Cela peut être spécifié via l'
extent
opérateur (voir aussi ImageMagick • Voir le sujet - Redimensionner et remplir au lieu d'étirer ). Et cette ligne de commande nécessite des appels de sous-processus pour séparer lesmontage
s pour chaque colonne - et à partir de là, lesconvert
s séparés pour chaque image:Notez ici, si nous l'avions utilisé
-extents
directement dans la ligne de montage, comme ceci:... on remarquera que la première spécification de hauteur (200) sera ignorée, et 400 comme le plus grand sera appliqué aux deux tuiles de toute façon !
Ainsi, nous devons contrôler le remplissage de chaque image individuelle (en appelant
convert
avecextents
pour chacun ) - puis éviterextents
dans lamontage
ligne; et en tant que tel, nous devons a priori connaître la largeur (la plus grande) de chaque colonne (et la hauteur de chaque ligne). A noter également:convert
)montage
,-gravity
doit généralement venir après (entièrement spécifié: w & h)-extent
; àconvert
,-gravity
travaille avant-extent
(généralement)la source
Pas avec
montage
, mais se sent plus précis avec les éléments suivants:x500
étant la hauteur finale souhaitéela source