Exemples ImageMagick -- Découpe et bordures
- L'opérateur de rognage de base
- L'image manquée (issue d'un mauvais rognage)
- Rogner une image possédant déjà un canevas virtuel
- Supprimer le canevas virtuel des résultats avec +repage *
- Rognage par fenêtre (viewport) avec ajustement du canevas virtuel
- Rogner par rapport à la gravité
- Rogner un pourcentage d'une image
- Rognage en tuiles, subdiviser une image en plusieurs images
- Rognage en tuiles centré, laissant les restes autour des bords
- Rognage en bandes, extraire des lignes et des colonnes
- Quadrants, découper autour d'un point unique
- Utiliser des décalages négatifs, retirer le bord inférieur ou gauche
- Rogner en divisions de taille à peu près égale
- Cadre, ajouter des bordures en relief 3D aux images
- Raboter, retirer les bords des images
-
Insertion (splice), ajouter une ligne, une colonne ou un bord
- Rogner avec une couleur spécifique
- Rogner un seul côté d'une image
- Rogner des images « floues » -- images JPEG de basse qualité
- Rogner des images « bruitées » -- images numérisées ou vidéo
Nous explorons ici les opérations ImageMagick qui vous permettent de passer vos images sous le couteau, et d'ajouter des cadres et des bordures autour de l'image. Autrement dit, nous examinons les opérations qui changent la taille d'une image, sans mettre à l'échelle son contenu. Vous pensez peut-être que c'est une opération simple, et elle l'est. Si simple que IM fournit un nombre considérable de façons et de méthodes pour réaliser cette tâche. Tellement nombreuses qu'il m'a fallu leur consacrer une page d'exemples à part entière pour toutes les présenter.
Rognage (réduire les images à la bonne taille)
Rognage et canevas (page)
L'opérateur d'image « [-crop](https://imagemagick.org/command-line-options/#crop) » découpera simplement la partie de toutes les images de la séquence courante, à la taille et à la position que vous spécifiez par son argument de géométrie.
magick rose: rose.gif
magick rose: -crop 40x30+10+10 crop.gif
magick rose: -crop 40x30+40+30 crop_br.gif
magick rose: -crop 40x30-10-10 crop_tl.gif
magick rose: -crop 90x60-10-10 crop_all.gif
magick rose: -crop 40x30+90+60 crop_miss.gif
Pour que vous puissiez vérifier exactement ce qui s'est passé, voici la sortie de « magick identify » sur les résultats du rognage ci-dessus.
magick identify rose: crop.gif crop_br.gif crop_tl.gif \
crop_all.gif crop_miss.gif
Remarquez que la taille de l'image affichée (son canevas virtuel) n'a pas été affectée par l'opération « [-crop](https://imagemagick.org/command-line-options/#crop) ». L'image elle-même a bien été rognée, et peut être plus petite, mais le canevas sur lequel l'image GIF est affichée a toujours la même taille que le canevas d'origine. Vous remarquerez aussi que la taille de l'image réellement produite peut ne pas être la taille que vous aviez demandée au rognage. Elle peut être bien plus petite que ce à quoi vous vous attendiez, car le rognage lui-même se situait partiellement ou totalement à l'extérieur de la zone d'image effectivement rognée. Vous remarquerez également que le « décalage » de l'image sur le canevas virtuel a, dans de nombreux cas, été modifié lui aussi, de sorte que les pixels de l'image rognée restent exactement à la même position que dans l'image d'origine. Autrement dit, le contenu de l'image lui-même ne bouge pas, même si l'image réelle est plus petite. Cela signifie que si vous modifiez maintenant l'image plus petite, puis la superposez (à l'aide des opérateurs de superposition de calques) par-dessus l'originale, elle se replacera exactement là d'où provenait la sous-image. C'est-à-dire que IM conserve les informations de « canevas virtuel », de « page » ou de « calque » de l'image afin de les préserver pour un usage ultérieur. Ceci est particulièrement important pour le bon fonctionnement de la gestion des animations GIF. Pour plus d'informations à ce sujet, voir Déconstruire les animations GIF. | _Les images GIF font un usage actif des informations de « page » ou de « canevas virtuel », de taille et de décalage, dans les images rognées par IM. Si vous ne voulez pas de ces informations, supprimez-les avec « [+repage](https://imagemagick.org/command-line-options/#repage) » immédiatement après le « [-crop](https://imagemagick.org/command-line-options/#crop) ».
Notez que de nombreux formats d'image n'enregistrent pas ces informations de page/canevas virtuel, de sorte que l'enregistrement dans de tels formats les supprime automatiquement. Le JPEG est un exemple typique de format qui supprime ces informations.
Le format PNG ne fait pas grand usage des informations de page/canevas (sauf dans le format multi-PNG (MNG)), mais il enregistre bien l'information de décalage de page (y compris les décalages négatifs). IM ajoutera aussi une petite quantité de métadonnées pour préserver la taille du canevas virtuel en vue d'un usage ultérieur par d'autres commandes IM.
À cause de cette préservation, je vous recommande fortement d'appliquer tout de même un « [+repage](https://imagemagick.org/command-line-options/#repage) », même lors d'un enregistrement en JPEG ou dans un autre format sans page, lorsque vous n'aurez pas besoin de ces informations, par précaution, et pour signaler clairement que vous n'en voulez pas.
_
---|---
Notez que le comportement du rognage peut être influencé par ces définitions :
| trim:percent-background=X% | Définit la quantité d'arrière-plan tolérée dans un bord. Elle s'exprime en pourcentage. 0 % signifie qu'aucun arrière-plan n'est toléré. 50 % signifie qu'un bord peut contenir jusqu'à 50 % de pixels qui sont de l'arrière-plan, selon le facteur de flou (fuzz). |
|---|---|
| trim:edges={north,east,south,west} | Ne rogne que les bords spécifiés de l'image. |
| trim:minSize=geometry | Limite le rognage à la taille spécifiée. |
| type:features=string | Ajoute une fonctionnalité de police à utiliser par le délégué RAQM lors de la mise en page de texte complexe. Cela sert généralement à activer des fonctionnalités de police optionnelles qui ne sont pas activées par défaut, mais peut aussi servir à désactiver des fonctionnalités de police par défaut. Les fonctionnalités incluent celles qui contrôlent le crénage, les ligatures et l'arabe. |
| type:hinting=false | Désactive le hinting des polices. Un rendu correct des glyphes nécessite que les points mis à l'échelle soient alignés sur la grille de pixels du périphérique cible, par une opération souvent appelée hinting. L'un de ses principaux buts est de garantir que les largeurs et hauteurs importantes soient respectées dans toute la police. (Par exemple, il est très souvent souhaitable que les glyphes « I » et « T » aient leur ligne verticale centrale de la même largeur en pixels. Le hinting gère aussi des éléments comme les fûts et les débordements, qui peuvent poser problème aux petites tailles de pixels. |
L'image manquée (issue d'un mauvais rognage)
La dernière image de l'exemple ci-dessus (par ex. « crop_miss.gif ») a également produit une image vide particulière. De telles images peuvent être produites par des opérations comme le Rognage, le Trim, la Comparaison de calques, et même les Optimisations d'animation GIF, qui génèrent des résultats vides ou dénués de sens. Par exemple dans l'exemple précédent ci-dessus, l'opération « [-crop](https://imagemagick.org/command-line-options/#crop) » a manqué l'image qu'elle rognait, elle a donc produit cette image « manquée » particulière, ainsi que quelques messages d'avertissement informatifs...
L'image de sortie, ou image « manquée », est une image minimale, d'un pixel de taille à un décalage de 0, mais conservant la taille de page ou de canevas de l'image d'origine, ainsi que toute autre métadonnée que l'image peut avoir associée. Elle représente ici l'image « vide » ou « de taille nulle » qui aurait dû être renvoyée par « [-crop](https://imagemagick.org/command-line-options/#crop) », mais comme aucun format d'image ne peut produire une image de dimensions « nulles », une image d'un seul pixel transparent est utilisée à la place. Pour que vous puissiez le voir plus clairement, voici la sortie « [identify](basics.html#identify) » de l'image manquée, ainsi qu'une « énumération de pixels IM » de cette image d'un seul pixel, montrant qu'elle ne contient qu'un seul pixel transparent.
magick identify crop_miss.gif
magick crop_miss.gif crop_miss_data.txt
Cette image « manquée » est essentiellement identique à la création d'une image « [null:](files.html#null) », mais avec la taille de page ou de canevas virtuel de l'image source d'origine définie (mais pas son décalage), ainsi que toutes les autres métadonnées de l'image, comme les délais de temporisation d'animation GIF. La méthode de disposition GIF peut toutefois être modifiée pour garantir que les animations restent correctes après le rognage. En substance, vous devez garder à l'esprit que « [-crop](https://imagemagick.org/command-line-options/#crop) » et d'autres opérateurs apparentés peuvent produire une image « manquée » particulière. À ce titre, vous devez prévoir de surveiller le message d'avertissement, ou cette « image manquée » particulière, lorsque vous écrivez un script utilisant IM, si une telle image minimale est possible et peut vous causer des problèmes. Si vous ne voulez pas du message d'avertissement (par exemple parce que vous prévoyez et gérez l'occasionnelle image « manquée »), vous pouvez ajouter un paramètre de contrôle opérationnel « [-quiet](https://imagemagick.org/command-line-options/#quiet) » à la ligne de commande. Cela indique à IM de ne pas produire de messages d'avertissement informatifs, mais seulement les véritables erreurs. À l'heure actuelle, il n'existe aucune méthode pour retirer les images « manquées », ou « [null:](files.html#null) », de la séquence d'images courante. Une telle méthode a toutefois été proposée pour une future version de IM. Écrivez-moi si vous trouvez que vous avez besoin d'une telle méthode.
Rogner une image possédant déjà un canevas virtuel
Si une image possède déjà un canevas virtuel (par exemple une trame d'une animation GIF), alors l'opération « [-crop](https://imagemagick.org/command-line-options/#crop) » sera appliquée par rapport au canevas virtuel, et NON à l'image réelle. C'est-à-dire qu'elle tentera de préserver le décalage des données de pixels réelles de l'image rognée sur le canevas. Autrement dit, un pixel donné avant le rognage devrait toujours se situer au même décalage relatif au canevas virtuel après. De cette façon, le rognage d'images en calques, ou d'animations GIF, continuera de fonctionner correctement, même si le « canevas » lui-même n'a pas été rogné. Ici nous créons une image centrée sur un canevas (page), et nous la rognons de diverses manières. Comme précédemment, la taille du canevas elle-même n'est pas modifiée par l'opération.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 32x32+16+16 crop_page.gif
magick paged.gif -crop 32x32+0+0 crop_page_tl.gif
magick paged.gif -crop 32x32+32+32 crop_page_br.gif
magick paged.gif -crop 60x60+2+2 crop_page_all.gif
magick paged.gif -quiet -crop 32x32+56+56 crop_page_miss.gif
magick identify paged.gif crop_page.gif crop_page_tl.gif crop_page_br.gif \
crop_page_all.gif crop_page_miss.gif
Ce dernier exemple ci-dessus était bien sûr l'image manquée particulière. Notez que j'ai supprimé le message d'avertissement habituel de IM à l'aide d'un paramètre « [-quiet](https://imagemagick.org/command-line-options/#quiet) ». Afin que vous puissiez voir exactement ce qui se passe, examinons de plus près le rognage par page du coin inférieur droit de l'image. Ici j'ai dessiné un carré semi-transparent par-dessus la zone qui a été rognée.
magick paged.gif -page 64x64+32+32 -size 32x32 xc:'#fff8' \
-alpha set -background none -mosaic crop_area_br.png
À partir de cela, vous pouvez voir exactement ce qui se passe. Même si le rognage est entièrement contenu dans le canevas de page, le rognage n'a pas couvert l'image réelle en totalité. Il en résulte que l'image réelle est plus petite que ce que l'utilisateur avait pu vouloir, mais reste positionnée sur un canevas ou une page plus grands.
Supprimer le canevas virtuel des résultats
Si cette information de canevas virtuel n'est pas souhaitée, alors vous pouvez utiliser l'opérateur spécial « [+repage](https://imagemagick.org/command-line-options/#repage) » pour réinitialiser le canevas de page et la position afin qu'ils correspondent à l'image réellement rognée.
magick rose: -crop 40x30+10+10 +repage repage.gif
magick rose: -crop 40x30+40+30 +repage repage_br.gif
magick rose: -crop 40x30-10-10 +repage repage_tl.gif
magick rose: -crop 90x60-10-10 +repage repage_all.gif
magick rose: -quiet -crop 40x30+90+60 +repage repage_miss.gif
C'est bien sûr le résultat que les nouveaux utilisateurs de IM attendraient normalement de l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) ». C'est en fait une chose si courante à faire que l'on pourrait l'ériger en règle empirique.
Utilisez toujours « [+repage](https://imagemagick.org/command-line-options/#repage) » après toute opération de type « crop ».
Sauf si vous avez réellement besoin de préserver ces informations.
La dernière image ci-dessus est bien sûr l'image manquée du rognage particulière, mais j'ai supprimé le message d'avertissement à l'aide du paramètre opérationnel « [-quiet](https://imagemagick.org/command-line-options/#quiet) ». |
Pour IM version 5 et antérieures, l'opération « [+repage](https://imagemagick.org/command-line-options/#repage) » était réalisée par une séquence d'arguments « -page +0+0 », généralement juste avant l'enregistrement dans un format utilisant les informations de canevas virtuel et de décalage, comme le GIF. Mais cela n'était utilisable que lors de la lecture ou de l'écriture de l'image dans un fichier, ce qui empêchait son usage entre plusieurs opérations de traitement d'image.__Avec IM version 6 et larestructuration de la ligne de commande, l'option « [-page](https://imagemagick.org/command-line-options/#page) » est devenue purement un paramètre de lecture/création d'image, destiné à la création d'animations GIF et de calques d'images. De ce fait, des opérateurs « [-repage](https://imagemagick.org/command-line-options/#repage) » et « [-set](https://imagemagick.org/command-line-options/#set) page » distincts ont été ajoutés pour permettre aux utilisateurs de définir ou modifier les informations de canevas virtuel. |
|---|---|
Rognage par fenêtre (viewport) avec ajustement du canevas virtuel
À partir d'ImageMagick version 6.2.4-5, vous pouvez ajouter un nouvel indicateur spécial à l'argument de « [-crop](https://imagemagick.org/command-line-options/#crop) ». Cet indicateur « ! » indique au rognage d'ajuster l'information de canevas virtuel de l'image renvoyée afin qu'elle soit relative à la zone rognée. En d'autres termes, quelle que soit la taille de l'image effectivement rognée, le canevas et le décalage de l'image renvoyée seront ajustés pour correspondre à la zone dont vous avez demandé le rognage. Vous pouvez voir cet indicateur comme le rognage d'une image pour correspondre à une « fenêtre » ou « viewport » de la zone de rognage. Même si la moitié de l'image n'est pas visible dans cette « fenêtre », le canevas virtuel et le décalage de la partie renvoyée correspondront à ce « viewport ». Par exemple...
magick rose: -crop 40x30+10+10\! crop_vp.gif
magick rose: -crop 40x30+40+30\! crop_vp_br.gif
magick rose: -crop 40x30-10-10\! crop_vp_tl.gif
magick rose: -crop 90x60-10-10\! crop_vp_all.gif
magick rose: -quiet -crop 40x30+90+60\! crop_vp_miss.gif
magick identify rose.gif crop_vp.gif crop_vp_br.gif crop_vp_tl.gif \
crop_vp_all.gif crop_vp_miss.gif
| Le caractère « ! » a une signification particulière pour certains shells UNIX, comme « csh », et doit être échappé par une barre oblique inverse, même placé entre guillemets.
---|---
Remarquez comme la taille du canevas de l'image renvoyée correspond désormais à la zone dans laquelle l'image a été rognée. Pour les rognages d'images entièrement contenus dans l'image réelle, le résultat sera équivalent à faire suivre le rognage d'un « [+repage](https://imagemagick.org/command-line-options/#repage) ». Cependant, pour tout rognage partiel ou manqué de l'image, le résultat sera un canevas plus grand et un décalage possible de l'image résultante. À ce titre, cela ne remplace pas un « [+repage](https://imagemagick.org/command-line-options/#repage) » après le rognage pour réinitialiser les informations de page/canevas. Vous pouvez toutefois faire suivre un « rognage par viewport » d'un Aplatissement (Flatten) pour « remplir » le nouveau canevas virtuel de l'image avec de vrais pixels. C'est-à-dire qu'il vous restera une image garantie d'être de la taille du rognage demandé, toute zone « manquée » étant remplie avec la couleur « [-background](https://imagemagick.org/command-line-options/#background) » courante du « viewport ». Par exemple lors du Remplissage d'une image. |
magick rose: -crop 100x100-15-25\! -background skyblue -flatten \
crop_viewport.gif
![[IM Output]](../static/img/crop/crop_viewport.gif)
Aplatir une image après un rognage par viewport est en fait équivalent à utiliser l'opérateur Extent (voir plus bas), pour obtenir un « rognage avec remplissage ». Un indicateur de « rognage par viewport » est aussi très important pour rogner des animations GIF, car il n'ajuste pas seulement la taille du canevas, mais garantit aussi que toutes les trames de l'image restent correctement positionnées dans la zone rognée. Sans cette option, rogner une animation GIF est très difficile et nécessite une correction externe de la taille et des décalages du canevas de l'image. Pour un exemple de cela, voir Rognage d'animation, avec le canevas aussi. À bien des égards, un « rognage par viewport » est étroitement lié au paramètre spécial Viewport de Distort, en ce que tous deux agissent comme s'ils étaient une « fenêtre » dans l'image résultante. Tous deux peuvent être utilisés comme méthode de « rognage ». | L'indicateur « ! » ne PEUT PAS être utilisé lors de la génération de rognages en tuiles multi-images, ni avec un rognage en tuiles de surface égale, où il a une signification différente. Voir les sections appropriées plus bas.
---|---
Rogner par rapport à la gravité
La position de décalage du « [-crop](https://imagemagick.org/command-line-options/#crop) » est par défaut relative au coin supérieur gauche de l'image. Cependant, en définissant le paramètre « [-gravity](https://imagemagick.org/command-line-options/#gravity) », vous pouvez indiquer à « [-crop](https://imagemagick.org/command-line-options/#crop) » de découper l'image par rapport au centre, à un coin ou à un bord de l'image. L'usage le plus courant d'un rognage gravité est de rogner le « center » d'une image. |
magick rose: -gravity Center -crop 32x32+0+0 +repage crop_center.gif
![[IM Output]](../static/img/crop/crop_center.gif)
Le paramètre « [-gravity](https://imagemagick.org/command-line-options/#gravity) » n'affecte pas seulement la position « zéro » initiale du rognage, il affecte aussi la direction du décalage du rognage. Par exemple, si vous utilisez une « [-gravity](https://imagemagick.org/command-line-options/#gravity) » de « South », un décalage de « +0+5 » déplacera la zone de rognage vers le haut, au lieu de vers le bas comme cela se ferait normalement. |
magick rose: -gravity South -crop 20x20+0+5 crop_south.gif
![[IM Output]](../static/img/crop/crop_south.gif)
Notez la position du rognage dans l'exemple ci-dessus. J'ai volontairement omis l'opération « [+repage](https://imagemagick.org/command-line-options/#repage) » afin que vous puissiez voir comment la zone de rognage a été déplacée par rapport au bord inférieur de l'image. Remarquez aussi que la zone de rognage n'est pas seulement relative au bord inférieur (sud), mais que la zone est « justifiée » au centre pour être au milieu du bord inférieur. Cela vaut pour toutes les opérations affectées par la gravité.
Rogner un pourcentage d'une image
L'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » comprend aussi comment rogner une image à un simple pourcentage de sa taille d'origine. Par exemple, ceci réduit de moitié la taille de l'image. |
magick rose: -crop 50%x+0+0 crop_half.gif
![[IM Output]](../static/img/crop/crop_half.gif)
| Si un seul nombre de taille est donné, alors cette valeur est utilisée à la fois pour les pourcentages de largeur et de hauteur, et la taille finale de la zone rognée sera arrondie à l'entier le plus proche. Le décalage n'est pas optionnel.
---|---
Notez que si la taille peut être un pourcentage, le décalage sera toujours en pixels. Vous ne pouvez pas fournir un décalage en pourcentage de la taille de l'image. |
magick rose: -crop 50%x+30+20 crop_percent.gif
![[IM Output]](../static/img/crop/crop_percent.gif)
| _Lorsqu'un rognage est donné avec un décalage, vousdevez fournir un symbole « x » dans l'argument afin qu'il puisse être interprété correctement. Ceci est particulièrement important lorsqu'un seul nombre est fourni pour la largeur et la hauteur de la zone de rognage.
À ce titre, vous ne pouvez pas utiliser un argument comme « 50%+30+20 », qui est une erreur, et amènera le rognage à ne rien faire silencieusement._
---|---
Plus couramment, un rognage en pourcentage se fait à partir du centre d'une image. |
magick rose: -gravity Center -crop 50x80%+0+0 crop_percent_center.gif
![[IM Output]](../static/img/crop/crop_percent_center.gif)
| Le symbole de pourcentage « % » peut apparaître n'importe où dans un argument, et s'il est présent, il se rapportera à la fois aux nombres de largeur et de hauteur. C'est un indicateur qui déclare simplement que les parties « taille d'image » sont une fraction en pourcentage de la taille du canevas virtuel ou de la page de l'image. Les décalages sont toujours donnés en pixels.
---|---
Vous pouvez aussi utiliser un indicateur de « rognage par viewport » avec les rognages en pourcentage, pour définir automatiquement la taille du canevas et le décalage du rognage selon la zone rognée. |
magick rose: -gravity Center -crop 50%\! crop_percent_vp.gif
![[IM Output]](../static/img/crop/crop_percent_vp.gif)
| _Vous ne pouvez pas utiliser de tailles en pourcentage pour le rognage en tuiles (voir ci-après). À ce titre, si le décalage n'est pas fourni et qu'une taille en pourcentage est donnée (comme ci-dessus), un décalage de +0+0 est supposé.
_
---|---
L'indicateur « ! » signifie qu'un « [+repage](https://imagemagick.org/command-line-options/#repage) » n'est pas nécessaire. La prudence reste toutefois recommandée, pour les images d'entrée qui peuvent elles aussi avoir une taille de canevas virtuel et des décalages.
Rognage en tuiles, subdiviser une image en plusieurs images
L'un des aspects les plus utiles du rognage est lorsque vous ne donnez pas de position spécifique à la commande de rognage. C'est-à-dire que vous donnez une taille, et non une position dans l'image à rogner. Dans ce cas, au lieu de générer une seule image, le rognage génère toute une série d'images..
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif +gravity -crop 32x32 tiles_%d.gif
magick identify paged.gif tiles_?.gif
| Si vous voulez simplement extraire un nombre précis de tuiles d'une image, jetez un œil à Rogner en divisions de taille à peu près égale ci-dessous. | C'est une bonne idée de s'assurer que la gravité est désactivée à l'aide de « [+gravity](https://imagemagick.org/command-line-options/#gravity) ». En effet, dans un cas particulier (rognage en pourcentage centré), le paramètre de gravité peut désactiver le rognage en tuiles. Les autres effets de la gravité sur le rognage en tuiles sont également indéfinis. |
|---|---|
En utilisant les opérateurs de superposition de calques « [-mosaic](https://imagemagick.org/command-line-options/#mosaic) » ou « [-flatten](https://imagemagick.org/command-line-options/#flatten) » (voir Aplatissement de calques), vous pouvez empiler toutes ces images les unes sur les autres, restaurant l'image d'origine. |
magick tiles_[0-3].gif -background white -mosaic tiles_mosaic.gif
![[IM Output]](../static/img/crop/tiles_mosaic.gif)
Cependant, comme vous pouvez le voir, le canevas virtuel de l'image a été rempli avec la couleur d'arrière-plan par « [-mosaic](https://imagemagick.org/command-line-options/#mosaic) ». Une alternative consiste à utiliser « [-layers](https://imagemagick.org/command-line-options/#layers) merge » (voir Fusion de calques), qui fusionne les multiples images de calques en une nouvelle image de calque juste assez grande pour contenir toutes les images données. C'est-à-dire que le canevas virtuel n'est pas rempli, comme le feraient les méthodes de superposition « [-mosaic](https://imagemagick.org/command-line-options/#mosaic) » ou « [-flatten](https://imagemagick.org/command-line-options/#flatten) ». |
magick tiles_[0-3].gif -background none -layers merge tiles_layered.gif
magick identify tiles_layered.gif
[![\[IM Text\]](../static/img/crop/tiles_layered_ident.txt.gif)](../static/img/crop/tiles_layered_ident.txt)
Si vous aviez réinitialisé les informations de canevas et de décalage à l'aide de « [+repage](https://imagemagick.org/command-line-options/#repage) », alors les images ne contiendraient plus le décalage de l'endroit où elles ont été rognées, ni la taille d'origine de l'image source. Dans ce cas, vous pouvez réunir à nouveau toutes les images à l'aide du mode spécial de « concatenation » de « magick montage ». Vous devrez indiquer à montage combien de lignes ou de colonnes d'images ont été extraites de l'image d'origine.
magick rose: -crop 20x20 +repage +adjoin rose_tiles_%02d.gif
montage -mode concatenate -tile 4x rose_tiles_*.gif rose_rejoined.gif
Notez que les noms des images individuelles vont de « rose_tiles_00.gif » à « rose_tiles_11.gif », ce qui correspond simplement au numéro d'ordre des tuiles en mémoire. Ce n'est pas très pratique, car les noms de fichiers ne donnent aucune indication facile de la position réelle à laquelle appartient chaque tuile, ni du nombre total de tuiles par ligne et par colonne. À partir de IM v6.4.8-4, vous pouvez aussi utiliser des séquences d'échappement de pourcentage dans les noms de fichiers spéciales pour générer et inclure des étiquettes particulières dans le nom de fichier de sortie. En combinant cela avec les séquences d'échappement de pourcentage FX, vous pouvez calculer une « position de tuile » différente pour chaque image. Par exemple...
magick rose: -crop 20x20 \
-set filename:tile "%[fx:page.x/20+1]_%[fx:page.y/20+1]" \
+repage +adjoin "rose_tile_%[filename:tile].gif"
Cela générera les noms de fichiers de tuiles « rose_tile_1_1.gif » à « rose_tile_4_3.gif », ce qui est un bien meilleur schéma de nommage de fichiers. C'est délicat mais ça fonctionne. Malheureusement, vous ne pouvez pas formater le nombre généré par une séquence d'échappement de pourcentage pour inclure un remplissage par des zéros ou spécifier un nombre exact de décimales en virgule flottante. Du moins pas pour le moment.
Rognage en tuiles centré
Dans une discussion sur le forum IM, une demande a été faite pour centrer le rognage en tuiles afin de répartir les « images de reste » uniformément autour des bords. Ce faisant, on maximise l'effet des tuiles complètes en les plaçant au centre de l'image. Bien sûr, on se retrouve aussi avec davantage de tuiles de bord incomplètes. La solution consistait à centrer l'image d'entrée sur un canevas virtuel dont la taille était un multiple de la taille de tuile voulue. Par exemple, pour rogner en tuiles l'image « rose: » (de taille 70x46 pixels) en le nombre maximal de tuiles complètes 30x20, au centre de l'image (et entourées de tuiles de reste), vous procéderiez comme suit.
-
Calculez d'abord le nombre de tuiles complètes que vous pouvez obtenir de l'image en divisant les tailles de l'image...
70x46 / 30x20 => 2x2 tuiles complètes + reste -
Ajoutez maintenant 2 lignes et colonnes de plus pour contenir les images de reste (si nécessaire)
2x2 + 2x2 => 4x4 images de tuiles -
Multipliez la taille de tuile par cela pour obtenir la taille du canevas virtuel.
30x20 * 4x4 => 120x80 taille du canevas -
Soustrayez la taille de l'image d'origine et divisez par deux pour le décalage de centrage.
( 120x80 - 70x46 ) / 2 => +25+17
Donc le canevas virtuel et le décalage de centrage sont 120x80+25+17. Et ici nous utilisons les calculs ci-dessus pour effectuer un rognage en tuiles centré...
magick rose: -repage 120x80+25+17 -crop 30x20 +repage rose_30x20_%02d.gif
Si vous voulez préserver l'emplacement de décalage d'origine des tuiles, mais retirer le décalage de centrage, vous pouvez faire un ajustement de décalage relatif à l'aide de « -repage -25-17\! » (en remplaçant le « [+repage](https://imagemagick.org/command-line-options/#repage) » ci-dessus). Si vous n'avez pas ajouté deux colonnes et lignes au nombre de tuiles et n'avez donc pas généré de décalage négatif, vous pouvez effectivement ignorer les tuiles de reste des bords, et ne produire que les tuiles complètes et entières présentes dans l'image.
magick rose: -repage 60x40-5-3 -crop 30x20 +repage rose_ctiles_%d.gif
En substance, comme les restes sont maintenant « à l'extérieur » du canevas virtuel calculé, l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » ne sait pas qu'ils étaient là et les ignore. À nouveau, en remplaçant le « [+repage](https://imagemagick.org/command-line-options/#repage) » ci-dessus par un ajustement de décalage relatif utilisant les valeurs de décalage négatées « -repage +5+3\! », vous restaurerez les emplacements de décalage d'origine d'où les tuiles ont été rognées. Une alternative pour un rognage en tuiles centré ignorant les restes consiste simplement à remplacer le paramètre de canevas virtuel par un rognage approprié.
magick rose: -gravity center -crop 60x40+0+0 +gravity +repage \
-crop 30x20 +repage rose_ctiles2_%d.gif
Ce qui précède est plus facile à comprendre, mais aussi un peu plus lent, car vous effectuez maintenant deux rognages. En revanche, moins de calculs sont nécessaires. Mais si vous voulez récupérer les décalages d'origine des tuiles, vous devrez tout de même calculer le décalage relatif dont vous aviez besoin, auquel cas autant réaliser la tâche par la méthode précédente, plus rapide, utilisant le canevas virtuel de l'image.
Rognage en bandes, extraire des lignes et des colonnes
Avec IM version 6.1.1, « [-crop](https://imagemagick.org/command-line-options/#crop) » a été amélioré de sorte que si l'un des arguments de taille est manquant, ou mis à zéro, alors l'argument de taille manquant est défini à la taille du canevas/page de l'image. Dans la plupart des cas, c'est suffisamment grand pour couvrir l'image située sur le canevas, si le décalage associé est aussi mis à zéro. Ce petit changement vous permet d'extraire facilement une seule ligne ou colonne de l'image, sans avoir besoin d'un nombre énorme comme « 999999 » pour couvrir la taille de l'image. Par exemple, ici nous extrayons une simple ligne et une simple colonne de notre image rose « avec page ».
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 20x0+30+0 strip_column.gif
magick paged.gif -crop 0x20+0+30 strip_row.gif
magick identify paged.gif strip_column.gif strip_row.gif
[![\[IM Text\]](../static/img/crop/strip_ident.txt.gif)](../static/img/crop/strip_ident.txt)
Si vous retirez les deux décalages ainsi qu'un argument de taille, vous pouvez diviser l'image en une série de bandes ou de colonnes, au lieu de tuiles.
magick rose: -crop 40x30+10+10 crop.gif
magick crop.gif -quiet -crop 20x strips_%d.gif
magick identify crop.gif strips_?.gif
[![\[IM Text\]](../static/img/crop/strips_ident.txt.gif)](../static/img/crop/strips_ident.txt)
Remarquez que le rognage en tuiles, en bandes ou autrement, s'effectue sur tout le canevas de page de l'image, et est de ce fait aligné sur ce canevas, et NON sur la seule image réelle. C'est pourquoi la première et la dernière image réellement générées dans l'exemple ci-dessus ne font que 10 pixels de large. Bien sûr, si une tuile spécifique, ou dans ce cas une « colonne », manque l'image réelle sur le canevas virtuel (comme la dernière image ci-dessus), alors une image manquée du rognage est générée. L'avertissement que IM aurait normalement produit a été supprimé à l'aide d'un paramètre « [-quiet](https://imagemagick.org/command-line-options/#quiet) ». Ceci n'est pas recommandé sauf si vous vous attendez à un tel événement et y êtes préparé, comme dans un script. | _Il est possible qu'une image soit positionnée de telle sorte qu'elle n'apparaisse même pas sur sa propre page ou canevas virtuel, ou qu'elle soit si grande que le canevas de page ne puisse contenir qu'une petite fenêtre ou partie de l'image.
Dans ces rares cas, le rognage en bandes sans aucun argument de taille subdivisera l'image de façon incorrecte, et produira respectivement des images manquées, ou des tuiles plus petites contenant seulement les parties situées dans les limites du canevas virtuel.
L'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » ne sera toutefois pas corrigé pour gérer ces rares cas particuliers, car le faire empêcherait son usage dans d'autres cas, comme ceux présentés ci-dessous.
Si cela vous pose problème, assainissez les décalages de page de l'image avant le rognage en utilisant « [+repage](https://imagemagick.org/command-line-options/#repage) » pour supprimer le canevas virtuel avant de tenter de générer les images de tuiles._
---|---
Comme autre méthode pour diviser des images en lignes distinctes, examinez le script spécial « [divide_vert](../static/img/scripts/divide_vert) ». Ce programme vous laissera diviser une image selon des « espaces » horizontaux d'une seule couleur uniforme. Par exemple, donné une image de texte simple, il la divisera en images alternées de « lignes » et d'« espaces ». Une option simple vous permet de retirer ces espaces.
Quadrants, découper autour d'un point unique
Comme tout nombre de taille de rognage manquant est remplacé par la taille du canevas de l'image que vous rognez, cela devrait, dans la plupart des cas, faire en sorte que toute l'image dans cette dimension fasse partie du résultat du rognage. Cela permet, avec un usage prudent des arguments, la capacité de rogner une image en quartiers autour d'un point spécifique (ce pixel spécifique étant placé comme le pixel supérieur droit de l'image du quadrant inférieur gauche). Vous n'avez pas besoin de connaître la taille de l'image pour faire cela. Par exemple, ici je rogne l'image en quadrants autour du point 30,40
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 30x40+0+0 quadrant_tl.gif
magick paged.gif -crop 0x40+30+0 quadrant_tr.gif
magick paged.gif -crop 30x0+0+40 quadrant_bl.gif
magick paged.gif -crop +30+40 quadrant_br.gif
Bien sûr, si le point autour duquel vous rogniez manque l'image réelle, alors deux ou même trois des images de quadrant résultantes seront les images d'erreur du rognage manqué particulières.
Utiliser des décalages négatifs, retirer le bord inférieur ou gauche
Il n'y a aucune raison de ne pas pouvoir utiliser un décalage négatif avec « [-crop](https://imagemagick.org/command-line-options/#crop) ». En fait, cela peut parfois présenter de très nets avantages. Par exemple, prenons notre image rose « avec page » et rognons-la progressivement avec des décalages négatifs de plus en plus grands. Nous ne fournirons pas de taille d'image à l'argument « [-crop](https://imagemagick.org/command-line-options/#crop) », il prendra donc par défaut la taille du canevas de l'image.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop -10-10 neg_offset_1.gif
magick paged.gif -crop -20-20 neg_offset_2.gif
magick paged.gif -crop -30-30 neg_offset_3.gif
magick paged.gif -crop -40-40 neg_offset_4.gif
magick paged.gif -crop -50-50 neg_offset_5.gif
Comme vous pouvez le voir, diminuer régulièrement le décalage vers une valeur négative plus grande aboutit lentement à ce que les bords inférieur et droit soient « découpés », le dernier exemple manquant presque l'image réelle. Si nous allions un cran plus loin, une image manquée serait générée. C'est un peu comme utiliser un opérateur « [-chop](https://imagemagick.org/command-line-options/#chop) » mais sans paramètre « [-gravity](https://imagemagick.org/command-line-options/#gravity) ». Voir Découpe (chop), retirer des bords. Bien sûr, en utilisant « [-crop](https://imagemagick.org/command-line-options/#crop) », vous pourriez avoir besoin d'utiliser un opérateur « [+repage](https://imagemagick.org/command-line-options/#repage) » pour ajuster les informations de canevas/page, là où un « [-chop](https://imagemagick.org/command-line-options/#chop) » effectue automatiquement un tel ajustement. C'est la vie.
Rogner en divisions de taille à peu près égale
Le plus gros problème du rognage en tuiles est que vous ne pouvez définir que la taille finale de chaque tuile. Cela fonctionne très bien quand la taille de l'image est un multiple exact de la taille de tuile souhaitée, mais comme vous l'avez vu, si ce n'est pas le cas vous pouvez vous retrouver avec des tuiles « courtes » sur les bords droit et inférieur. Par exemple, divisons à nouveau l'image rose intégrée, mais en essayant de la diviser en tuiles 3x3. L'image d'origine fait 70x46 pixels, donc divisée par 3 chaque tuile fait 23x15 pixels...
magick rose: -crop 23x15 +repage +adjoin rose_23x15_%02d.gif
Eh bien, comme vous pouvez le voir, cela n'a pas fonctionné, car l'image rose ne peut pas être divisée exactement en 3 tuiles de taille égale. Dans ce cas, vous vous retrouvez avec une tuile « courte » d'1 pixel. Même si vous agrandissez la taille de la tuile à 24x16 pixels, vous vous retrouverez quand même avec une tuile plus « courte » de 2 pixels que les autres tuiles. Cette situation empire à mesure que le nombre de tuiles souhaitées augmente. Par exemple, essayez de subdiviser une longueur de 100 en 30 tuiles. C'est impossible. Soit vous utilisez une longueur de 3 et obtenez 34 tuiles, soit 4 et obtenez 25 tuiles. Obtenir exactement 30 tuiles de taille égale est impossible ! À partir de IM v6.5.8-9, vous pouvez maintenant ajouter l'indicateur spécial « @ » à l'argument « [-crop](https://imagemagick.org/command-line-options/#crop) ». Cet indicateur dit à l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » de faire de son mieux pour diviser également l'image en le nombre de tuiles donné. Par exemple...
magick rose: -crop 3x3@ +repage +adjoin rose_3x3@_%d.gif
Il en résulte que l'image a été divisée en tuiles ayant des tailles légèrement différentes. Cependant, la taille des tuiles ne diffèrera que d'1 pixel au maximum ! Vérifiez par vous-même ! En prime, vous pouvez aussi subdiviser l'image de sorte que chaque tuile « chevauche » ses voisines. Pour cela, n'utilisez pas seulement un indicateur « @ », mais spécifiez aussi le nombre de pixels de chevauchement que vous voulez. Par exemple, divisons la rose en quartiers mais avec un chevauchement de 20 pixels.
magick rose: -crop 2x2+20+20@ +repage +adjoin rose_2x2+20+20@_%d.gif
À nouveau, toutes les pièces ne diffèreront en taille que d'un pixel au maximum ! Bien que dans ce cas les images résultantes soient de même taille, car la rose se divise par 2 de façon égale. Cela ne serait toutefois pas le cas si le chevauchement ou l'image avait une taille impaire. Dans ce cas, l'élément le plus grand serait le long du bord supérieur et gauche. Avec trois tuiles cependant, l'élément le plus grand (ou le plus petit) sera placé au milieu ! Vous pouvez même utiliser un chevauchement négatif pour « sauter » exactement ce nombre de pixels entre les tuiles ! La façon exacte d'appliquer l'opérateur dépend exactement des pixels que vous voulez « chevaucher », ou « sauter ». Et cela dépend des caractéristiques de « bord » de l'image (voir Séparer des images en tuiles espacées ci-dessous). Comme pour tout usage de l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) », il est recommandé d'utiliser un « [+repage](https://imagemagick.org/command-line-options/#repage) » pour retirer le décalage de « page » s'il n'est pas voulu. Mais l'information de décalage de l'image rognée peut être très utile, ce qui explique pourquoi elle est préservée. Vous pouvez par exemple l'utiliser pour nommer les fichiers de sortie, ou pour connaître la taille et l'emplacement des tuiles que IM a calculés. Notez que le rognage en tuiles de taille égale est la seule situation dans laquelle l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » ignore le canevas virtuel réel de l'image lorsqu'il détermine quelle partie de l'image est rognée. C'est-à-dire que les calculs du rognage en tuiles sont basés sur la taille réelle de l'image plutôt que sur la taille du canevas virtuel. Même ainsi, les décalages finaux des tuiles resteront relatifs au canevas virtuel d'origine. Cette option de rognage peut aussi être utilisée comme alternative à l'opérateur Raboter (Shave) pour les images « avec page ». |
Avant IM version v6.6.1-0, le rognage en tuiles de taille égale était cassé pour les images ayant un décalage de canevas virtuel. |
|---|---|
Séparer des images en tuiles espacées
Vous avez souvent une image comportant des tuiles de taille fixe séparées par une quantité d'espace fixe. Le nouvel opérateur de rognage à indicateur « @ » vous permettra de rogner plus facilement ces tuiles, en incluant ou en sautant l'espace environnant. Le principal problème, cependant, est que si les images « tuiles » ont une quantité d'espace fixe autour d'elles, la quantité d'espace autour du bord n'est généralement pas aussi fixe. Cela produit trois styles de base de caractéristiques de bord pour un ensemble d'images « espacées », et chaque type doit être traité un peu différemment. Tuiles montées (Montaged) Ici les images d'origine se sont simplement vu attribuer une bordure de taille fixe avant d'être accolées ensemble. Il en résulte que vous aurez toujours un nombre pair de pixels d'espacement entre les tuiles. Plus important encore, l'« espacement de bord » est exactement la moitié de l'espacement placé entre les tuiles. C'est en fait ainsi que « [montage](montage.html) » espace les « cellules » de tuilage, et c'est en utilisant cette commande que l'image d'exemple ci-dessous a été générée. Comme les images ont simplement été tuilées ensemble, vous pouvez utiliser soit un rognage en tuiles normal (si vous connaissez la taille de la tuile), soit un rognage de taille égale (si vous connaissez le nombre de tuiles), pour séparer les sous-images et la bordure environnante. Il n'y a en gros aucun chevauchement entre les tuiles, et un simple opérateur Raboter (Shave) peut alors être utilisé pour retirer cette bordure des tuiles résultantes.
magick montage.gif -crop 5x1@ +repage +adjoin montage_%d.gif
magick montage_?.gif -shave 3x3 montage-3_%d.gif
Même espacement autour du bord Ici les sous-images n'ont pas seulement été « espacées » de 6 pixels, mais ont aussi un espacement de 6 pixels autour du bord, ce qui lui donne un aspect plutôt soigné et net. Cela se gère en utilisant le rognage de taille égale par défaut avec la quantité appropriée de « chevauchement » en pixels. Par exemple...
magick edged.gif -crop 5x1+6+6@ +repage +adjoin edged+6_%d.gif
Remarquez comme l'opérateur a séparé les images de sorte qu'elles restent de la même taille, mais avec un chevauchement de 6 pixels. C'est précisément ce pour quoi il a été conçu. En utilisant un décalage négatif, vous dites à IM que la zone de chevauchement (les parties d'espacement) ne doit pas être incluse dans les résultats finaux.
magick edged.gif -crop 5x1-6-6@ +repage +adjoin edged-6_%d.gif
Si je devais aller plus loin et soustraire davantage de pixels, je pourrais même rogner une partie de la bordure blanche des chiffres ci-dessus.
magick edged.gif -crop 5x1-8-8@ +repage +adjoin edged-8_%d.gif
Vous pouvez même utiliser ceci comme méthode alternative à l'opérateur Raboter (Shave), en spécifiant simplement un rognage d'1 tuile...
magick edged+6_0.gif -crop 1x1-6-6@ +repage tile-shave.gif
Tuiles simplement espacées Les images en tuiles espacées les plus simples n'ont aucun espacement de bord, ou bien cet espacement de bord a été rogné (Trimmed) de l'image. Cependant, pour que cela soit géré, vous devez informer IM de cette situation particulière, en incluant À LA FOIS les indicateurs « @ » et « ! ».
magick spaced.gif -crop 5x1+6+6@\! +repage +adjoin spaced+6_%d.gif
Notez que les images aux bords de cette subdivision sont légèrement plus courtes que les images du milieu. C'est pourquoi ce « mode » de fonctionnement particulier n'est PAS celui par défaut, même s'il est en réalité plus simple que la catégorie précédente de tuiles espacées. Notez aussi que lorsque l'on utilise à la fois les indicateurs « @ » et « ! », un rognage à une seule tuile (verticalement dans ce cas) n'a aucun effet, car le haut et le bas de la tuile sont tous deux des « bords », et il n'y a donc pas d'« espace de bord » à retirer. À nouveau, en utilisant une valeur négative pour le chevauchement, vous pouvez dire à IM de ne pas inclure la zone de chevauchement (espacement) dans les résultats du rognage en tuiles.
magick spaced.gif -crop 5x1-6-6@\! +repage +adjoin spaced-6_%d.gif
| Le caractère « ! » a une signification particulière pour certains shells UNIX, comme « csh », et doit être échappé par une barre oblique inverse, même placé entre guillemets.
---|---
Avec ces formules, vous devriez maintenant être capable de rogner en tuiles des images formant une grille, même lorsque les images se chevauchent ou sont espacées. Même si le problème précis que vous avez ne rentre pas exactement dans l'un des cas ci-dessus, vous devriez pouvoir ajouter ou retirer des pixels de bord de façon appropriée afin que l'image entre dans l'une des catégories d'images espacées ci-dessus.
Ajouter/supprimer des bords à une image
Bordure, ajouter de l'espace autour de l'image
Souvent, vous voulez simplement ajouter un peu d'espace de travail autour du bord d'une image, mais sans avoir besoin de connaître la taille d'une image, ni en dépendre. Il existe de nombreuses façons d'ajouter de l'espace supplémentaire à une image, en dehors des ajouts directs d'espace, notamment accoler des images ou des étiquettes vierges, composer des superpositions « Src », ou même simplement positionner l'image sur un canevas plus grand. Mais ces méthodes nécessitent généralement au moins une idée de la taille réelle de l'image avec laquelle vous travaillez. L'une des formes les plus simples d'ajout d'espace à une image est l'opération « [-border](https://imagemagick.org/command-line-options/#border) ». La couleur de l'espace ajouté provient du paramètre « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) ». Voici quelques exemples simples..
magick rose: -bordercolor SkyBlue -border 10x10 border.gif
magick rose: -border 15x6 border_default.gif
magick rose: -bordercolor LimeGreen -border 10x0 border_sides.gif
magick rose: -bordercolor Tomato -border 0x10 border_topbot.gif
magick rose: -alpha set -bordercolor none -border 10 border_none.gif
Notez le dernier exemple d'image ci-dessus. La couleur de bordure a été définie comme la couleur transparente « none », mais pour que cela fonctionne comme prévu, il fallait s'assurer que l'image contenait effectivement un canal « matte » ou « alpha ». Notez aussi que si les tailles de bordure verticale et horizontale sont identiques, vous pouvez omettre le second nombre dans la bordure, en n'utilisant qu'un seul nombre. |
Comme montré ci-dessus, la couleur par défaut utilisée par l'opérateur « [-border](https://imagemagick.org/command-line-options/#border) » est un gris clair, car elle s'accorde bien avec la couleur de page grise par défaut des pages web sur le WWW. |
|---|---|
| Vous pouvez spécifier les bordures en pourcentage de la taille de l'image... |
magick rose: -border 10%x10% border_percent.jpg
![[IM Output]](../static/img/crop/border_percent.jpg)
En interne, ce qui se passe réellement, c'est que « [-border](https://imagemagick.org/command-line-options/#border) » crée une nouvelle image de la bonne taille, puis superpose l'image source d'origine par-dessus ce nouvel arrière-plan. C'est en soi une opération très utile dans ImageMagick, pour définir l'arrière-plan d'images transparentes et semi-transparentes. C'est-à-dire que l'opération en apparence inutile « -border 0 » est, dans IM version 6, très utile. Par exemple...
magick star.gif -bordercolor LimeGreen -border 0 star_background.gif
| Il existe bien sûr de nombreuses autres façons de retirer la transparence alpha. | Le fait que l'ajout d'une bordure à des images avec transparence remplisse aussi par défaut l'arrière-plan transparent de l'image a été la cause de quelques débats parmi les utilisateurs de IM et l'équipe de développement. Un résumé de ce débat est donné surBordure, cadre et usage de BorderColor. |
|---|---|
Bordure et composition alpha
La superposition de l'image sur le canevas de la couleur de bordure est contrôlée par le paramètre « [-compose](https://imagemagick.org/command-line-options/#compose) », qui par défaut est réglé sur la composition alpha « [Over](compose.html#over) ». S'il est réglé sur un autre paramètre, l'opération « [-border](https://imagemagick.org/command-line-options/#border) » peut produire des résultats inattendus. Par exemple, voici quelques-uns des usages les plus intéressants de « [-compose](https://imagemagick.org/command-line-options/#compose) » avec l'opérateur d'image « [-border](https://imagemagick.org/command-line-options/#border) », appliqué à une image contenant des zones transparentes.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -border 5 {_result_}
Le choix entre « Over » et « Copy » décide essentiellement si vous voulez préserver ou non la transparence dans l'image. Par exemple, voici la même image « star » avec transparence, mais cette fois la bordure a été ajoutée sans détruire la transparence de l'image. |
magick star.gif -bordercolor LimeGreen -compose Copy \
-border 5 star_border_copy.gif
![[IM Output]](../static/img/crop/star_border_copy.gif)
La composition « [Src](compose.html#src) » ajoutera une bordure transparente à une image (si elle possède un canal alpha), indépendamment du paramètre « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » courant. En substance, le canevas d'arrière-plan généré par « [-border](https://imagemagick.org/command-line-options/#border) » est ignoré. La composition « [Dst](compose.html#dst) » peut ne pas sembler très utile, mais peut servir à générer un canevas de la même taille (ou un peu plus grand) que l'image d'origine. L'image d'origine ne sert qu'à déterminer la taille finale du canevas. Pour plus d'exemples, voir Canevas dimensionnés selon une image existante. Pour plus d'informations sur les diverses méthodes « [-compose](https://imagemagick.org/command-line-options/#compose) », voir les Exemples de composition alpha.
Bordure et canevas virtuel
Lorsque « [-border](https://imagemagick.org/command-line-options/#border) » est appliqué à une image contenant un canevas virtuel, il ajoutera tout de même la bordure autour de l'image réelle sur ce canevas virtuel, et NON autour de tout le canevas.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
Notez que la taille du canevas virtuel a également été augmentée du double de l'épaisseur de la bordure pour accommoder la bordure ajoutée. Cela signifie bien sûr que vous ne pouvez pas simplement ajouter une Bordure à une animation GIF typique directement, sauf si vous voulez réellement identifier les sous-trames individuelles de l'animation (par exemple, voir le script Montage de trames d'animation qui utilise cela comme option pour « encadrer » les images superposées). Si vous voulez ajouter une bordure, vous devriez d'abord fusionner (Coalesce) l'animation pour retirer toute optimisation de trame qu'elle pourrait avoir.
Cadre, ajouter une bordure en relief 3D
L'opérateur « [-frame](https://imagemagick.org/command-line-options/#frame) » est très similaire à « [-border](https://imagemagick.org/command-line-options/#border) », et si vous regardez la première image d'exemple générée ci-dessous, vous constaterez qu'il produit exactement le même résultat, sauf qu'il a utilisé « [-mattecolor](https://imagemagick.org/command-line-options/#mattecolor) » plutôt que « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) ». Notez que « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » est toujours utilisé dans la génération des images encadrées, voir ci-dessous. Pour utiliser « [-frame](https://imagemagick.org/command-line-options/#frame) » correctement, vous devez fournir quatre arguments à la commande, au lieu de seulement 2. Les arguments supplémentaires spécifient la largeur des biseaux « extérieur » et « intérieur » du cadre produit. Voici quelques exemples d'utilisation de l'opérateur « [-frame](https://imagemagick.org/command-line-options/#frame) » avec divers réglages.
magick rose: -frame 10x10 frame.gif
magick rose: -frame 15x6+2+2 frame_wierd.gif
magick rose: -mattecolor SkyBlue -frame 6x6+2+2 frame_blue.gif
magick rose: -mattecolor Tomato -frame 10x10+5+5 frame_red.gif
magick rose: -frame 10x10+10+0 frame_rasied.gif
magick rose: -frame 10x10+6+0 frame_rasied_part.gif
magick rose: -frame 10x10+0+6 frame_sunken_part.gif
magick rose: -frame 10x10+0+10 frame_sunken.gif
L'utilisation de plusieurs opérations de cadre peut aussi produire des styles d'encadrement plus étranges.
magick rose: -frame 10x10+3+3 frame_normal.gif
magick rose: -frame 3x3+3+0 -frame 7x7+3+0 frame_popped.gif
magick rose: -frame 7x7+0+3 -frame 3x3+0+3 frame_pressed.gif
magick rose: -frame 3x3+3+0 -frame 4x4 -frame 3x3+0+3 frame_inverted.gif
| Le « [-mattecolor](https://imagemagick.org/command-line-options/#mattecolor) » par défaut est un gris légèrement plus foncé que le réglage par défaut de « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) ». Cela lui permet aussi de s'accorder à la couleur grise par défaut des pages web sur le WWW (utilisée par les premiers navigateurs comme « mosaic » et « netscape »). (Voir ci-dessous)
---|---
| Bien que « [-frame](https://imagemagick.org/command-line-options/#frame) » utilise effectivement la couleur « [-mattecolor](https://imagemagick.org/command-line-options/#mattecolor) », il génère aussi quatre couleurs supplémentaires à partir de cette base pour dessiner le cadre. C'est-à-dire que cinq couleurs liées seront probablement ajoutées à une image, et pas seulement une.
---|---
Avec un peu d'effort, vous pouvez même reproduire une image encadrée à la manière de « magick montage », complète avec une étiquette de texte. |
magick rose: -mattecolor grey -background grey -frame 3x3+0+3 \
-gravity South -splice 0x15 -annotate 0x0 'A Red Rose' \
-frame 6x6+3+0 frame_montage.gif
![[IM Output]](../static/img/crop/frame_montage.gif)
Vous pouvez même utiliser une « [-mattecolor](https://imagemagick.org/command-line-options/#mattecolor) » semi-transparente pour le cadre « [-frame](https://imagemagick.org/command-line-options/#frame) », puis « glisser » un motif intéressant en dessous (comme un canevas plasma fractal), pour produire un cadre plus coloré. |
magick rose: -alpha set -mattecolor '#CCC6' -frame 10x10+3+4 \
\( -size 100x100 plasma:fractal -normalize -blur 0x1 \) \
-compose DstOver -composite frame_plasma.gif
![[IM Output]](../static/img/crop/frame_plasma.gif)
Vous pouvez aussi colorer le cadre séparément (généré à l'aide d'un paramètre de composition spécial « Dst »), puis superposer l'image dans le cadre une fois que vous l'avez coloré. Mais cela devient vraiment très délicat. Pour des techniques plus avancées d'utilisation des cadres, voir Techniques d'encadrement.
Cadre et composition alpha
Le cadre est étroitement lié à l'opérateur « [-border](https://imagemagick.org/command-line-options/#border) ». Non seulement un cadre est dessiné à l'aide de « [-mattecolor](https://imagemagick.org/command-line-options/#mattecolor) », mais cet opérateur utilise aussi le paramètre « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » pour définir l'arrière-plan sur lequel le cadre est initialement dessiné. Or, pour les images sans transparence, « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » ne sera pas visible, car il est recouvert par l'image elle-même. Mais pour les images qui contiennent des zones transparentes, la couleur d'arrière-plan devient visible. |
magick star.gif -frame 6x6+2+2 star_framed.gif
![[IM Output]](../static/img/crop/star_framed.gif)
En d'autres termes, « [-frame](https://imagemagick.org/command-line-options/#frame) » agit comme si vous preniez votre image et la superposiez sur un cadre photo à fond de couleur unie. À ce titre, toute partie de votre image qui est transparente sera remplacée par la couleur « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » qui par défaut est un gris clair. | Le fait que l'ajout d'un cadre à des images avec transparence remplisse aussi par défaut l'arrière-plan transparent de l'image avec la couleur de bordure a causé quelques débats parmi les utilisateurs de IM et l'équipe de développement. Un résumé de ce débat est donné surBordure, cadre et usage de BorderColor.
---|---
Si vous voulez préserver la transparence de l'image tout en l'encadrant, vous avez deux solutions. La première consiste à utiliser une « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » transparente comme « none ». |
magick star.gif -bordercolor none -frame 6x6+2+2 star_framed_none.gif
![[IM Output]](../static/img/crop/star_framed_none.gif)
L'autre solution, et la méthode préférée, est de s'assurer que les pixels transparents sont préservés lorsque l'image est ajoutée au cadre. Cela se fait à l'aide d'une méthode « [-compose](https://imagemagick.org/command-line-options/#compose) » spéciale appelée « [Copy](compose.html#copy) ». |
magick star.gif -compose Copy -frame 6x6+2+2 star_framed_copy.gif
![[IM Output]](../static/img/crop/star_framed_copy.gif)
| L'usage de "-bordercolor" comme image d'arrière-plan à la fois pour « [-border](https://imagemagick.org/command-line-options/#border) » et « [-frame](https://imagemagick.org/command-line-options/#frame) » a été ajouté à IM avec la version 6.1.4. Avant cela, le canevas d'arrière-plan généré consistait en un canevas noir sur lequel la bordure ou le cadre était dessiné.
Cet usage du noir était particulièrement néfaste pour la commande « magick montage » qui fait un usage intensif de la fonction interne « [-frame](https://imagemagick.org/command-line-options/#frame) » dans son traitement interne. (Voir Gestion de l'arrière-plan et de la transparence par Montage)
---|---
Comme vous pouvez le voir, l'opérateur « [-frame](https://imagemagick.org/command-line-options/#frame) », comme « [-border](https://imagemagick.org/command-line-options/#border) », utilise aussi le paramètre « [-compose](https://imagemagick.org/command-line-options/#compose) » pour définir comment l'image source est superposée sur le cadre d'arrière-plan.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -frame 6x6+2+2 {_result_}
L'usage d'un paramètre « [-compose](https://imagemagick.org/command-line-options/#compose) » de « [Copy](compose.html#copy) » devient très important si vous voulez aussi utiliser le paramètre « [-bordercolor](https://imagemagick.org/command-line-options/#bordercolor) » dans les cadres de « magick montage ». Voir Gestion de l'arrière-plan et de la transparence par Montage pour plus de détails.
Cadre et canevas virtuel
Comme pour Bordure et canevas virtuel, le cadre est aussi appliqué autour de l'image réelle sur ce canevas virtuel, et NON autour de tout le canevas.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -frame 5x5+2+2 paged_framed.gif
Notez que la taille du canevas virtuel a également été augmentée du double de l'épaisseur de la bordure pour accommoder le cadre ajouté. Cela signifie bien sûr que vous ne pouvez pas simplement ajouter un Cadre à une animation GIF typique directement, sauf si vous voulez réellement identifier les sous-trames individuelles de l'animation (par exemple, voir Montage de trames d'animation). Si vous voulez ajouter une bordure, vous devriez d'abord fusionner (Coalesce) l'animation pour retirer toute optimisation de trame qu'elle pourrait avoir.
Raboter, retirer les bords d'une image
L'inverse des opérateurs « [-border](https://imagemagick.org/command-line-options/#border) » ou « [-frame](https://imagemagick.org/command-line-options/#frame) » est « [-shave](https://imagemagick.org/command-line-options/#shave) », qui, si on lui donne les mêmes arguments, retirera l'espace ajouté par ces commandes.
magick border.gif -shave 10x10 shave.gif
magick border.gif -shave 10x0 shave_sides.gif
magick border.gif -shave 0x20 shave_topbot.gif
La principale chose à garder à l'esprit à propos de ces trois opérateurs est qu'ils ajoutent et retirent de l'espace sur les côtés opposés des images, et non sur un seul côté, ou sur des côtés adjacents. Si vous voulez ne retirer qu'un seul bord d'une image, alors vous devrez utiliser l'opérateur « [-chop](https://imagemagick.org/command-line-options/#chop) » à la place. (Voir les exemples de Chop ci-dessous). Comme précédemment, tous les opérateurs « [-border](https://imagemagick.org/command-line-options/#border) », « [-frame](https://imagemagick.org/command-line-options/#frame) » et « [-shave](https://imagemagick.org/command-line-options/#shave) » n'affectent que l'image réelle sur le canevas virtuel et non le canevas virtuel lui-même.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
magick paged_border.gif -frame 5x5+2+2 paged_frame.gif
magick paged_frame.gif -shave 10x10 paged_shave.gif
Une alternative à l'utilisation de shave est d'utiliser le nouvel opérateur de rognage en tuiles de taille égale. L'avantage de cet opérateur est que, contrairement à « [-shave](https://imagemagick.org/command-line-options/#shave) », il ne modifiera pas la taille du canevas de l'image résultante.
magick paged_frame.gif -crop 1x1-10-10@ paged_tile_shave.gif
| Avant IM version v6.6.1-0, le rognage en tuiles de taille égale pour les images ayant un décalage de canevas (comme ci-dessus) était cassé.
---|---
Étendue (extent), ajustement direct de la taille de l'image
Après quelques discussions, un opérateur pour ajuster directement la taille finale d'une image a été ajouté à IM version 6.2.4 : l'opérateur « [-extent](https://imagemagick.org/command-line-options/#extent) ». Si la taille de l'image augmente, de l'espace sera ajouté aux bords droit ou inférieur de l'image. Si elle diminue, les données de l'image sont simplement jetées ou rognées pour tenir dans la nouvelle taille de l'image. Dans les deux cas, la zone supérieure gauche de l'image restera probablement inchangée.
magick rose: -background skyblue -extent 100x60 extent_enlarge.gif
magick rose: -background skyblue -extent 40x40 extent_shrink.gif
magick rose: -background skyblue -extent 100x40 extent_wider.gif
magick rose: -background skyblue -extent 40x60 extent_taller.gif
Comme vous pouvez le voir, il remplira toute nouvelle zone avec la couleur « [-background](https://imagemagick.org/command-line-options/#background) » des nouvelles zones ajoutées à l'image. |
Avant IM version v6.3.2, « [-extent](https://imagemagick.org/command-line-options/#extent) » se contentait d'effacer la mémoire de toute nouvelle zone à zéro, ou noir pur. Il ne remplissait pas les zones avec la couleur « [-background](https://imagemagick.org/command-line-options/#background) ». |
|---|---|
De plus, après IM v6.3.2, « [-extent](https://imagemagick.org/command-line-options/#extent) » utilisera la « [-gravity](https://imagemagick.org/command-line-options/#gravity) » pour définir où les zones ajoutées/retirées sont positionnées par rapport à l'image d'origine. |
magick rose: -gravity north -extent 100x80 extent_north.gif
magick rose: -gravity south -extent 100x80 extent_south.gif
magick rose: -gravity east -extent 100x80 extent_east.gif
magick rose: -gravity west -extent 100x80 extent_west.gif
magick rose: -gravity center -extent 100x80 extent_center.gif
magick rose: -gravity center -extent 40x80 extent_center2.gif
Le dernier exemple ci-dessus montre que extent peut aussi faire des rognages centrés, mais sans avoir besoin d'un « [-repage](https://imagemagick.org/command-line-options/#repage) », bien qu'il « aplatisse » l'image avec la couleur « [-background](https://imagemagick.org/command-line-options/#background) » courante. Vous pouvez même utiliser des décalages, ce qui signifie en gros que l'opérateur Extent est simplement un Rognage direct avec remplissage d'arrière-plan, quelle que soit la position. |
magick rose: -background skyblue -extent 100x100-15-25 extent.png
![[IM Output]](../static/img/crop/extent.png)
Cette capacité à la fois de rogner et d'étendre une image selon la gravité rend cet opérateur parfait pour remplir ou rogner une image afin qu'elle tienne dans une zone de taille spécifique, par exemple voir Remplir/compléter une miniature pour qu'elle tienne. Notez que « [-extent](https://imagemagick.org/command-line-options/#extent) » fonctionne en utilisant la même technique de « superposition » qu'utilisent les opérateurs Bordure et Cadre. À ce titre, l'utiliser par défaut avec une image contenant de la transparence remplacera la transparence par la couleur « [-background](https://imagemagick.org/command-line-options/#background) » courante. |
magick star.gif -background LimeGreen -extent 80x80-10-10 star_extent.gif
![[IM Output]](../static/img/crop/star_extent.gif)
À nouveau, la solution est soit de définir une méthode « [-compose](https://imagemagick.org/command-line-options/#compose) » appropriée, soit de définir la couleur « [-background](https://imagemagick.org/command-line-options/#background) » sur « None ».
Ajouter/supprimer des lignes, des colonnes et des bords
Insertion (splice), ajouter des lignes, des colonnes et des bords
L'opérateur « [-splice](https://imagemagick.org/command-line-options/#splice) » est nouveau dans IM version 6, voir Splice, exemple de la création d'un nouvel opérateur d'image. Il fournit essentiellement la capacité très demandée d'ajouter une ligne ou une colonne d'espace au milieu ou sur un bord d'une image. La couleur de l'espace inséré provient du paramètre de couleur « [-background](https://imagemagick.org/command-line-options/#background) ».
magick rose: -background blue -splice 20x10+40+30 splice.gif
magick rose: -background blue -splice 20x0+40+0 splice_column.gif
magick rose: -background blue -splice 0x10+0+30 splice_row.gif
magick rose: -background blue -splice 20x10 splice_topleft.gif
| Si la couleur d'arrière-plan n'est pas définie, IM tentera de déterminer cette valeur à partir de l'image elle-même. Cela signifie que pour certaines images elle peut être blanche (le défaut habituel), pour d'autres elle peut être noire, ou pour le format GIF cela pourrait être n'importe quelle couleur d'arrière-plan définie au moment où cette image a été enregistrée. Cela signifie en gros que si vous ne définissez pas la couleur « [-background](https://imagemagick.org/command-line-options/#background) », sa valeur par défaut dépend de l'image, et vous pourriez obtenir à peu près n'importe quoi. Définissez toujours « [-background](https://imagemagick.org/command-line-options/#background) » avant d'utiliser un opérateur qui s'en sert.
---|---
Or, si ajouter une ligne et une colonne à une image est bien, l'opérateur « [-splice](https://imagemagick.org/command-line-options/#splice) » est idéal pour ajouter de l'espace sur un seul bord d'une image. Le bord concerné est déterminé en utilisant l'option « [-gravity](https://imagemagick.org/command-line-options/#gravity) » et le paramètre de géométrie du splice.
magick rose: -background blue -splice 0x10 splice_top.gif
magick rose: -gravity south \
-background blue -splice 0x10 splice_bottom.gif
magick rose: -background blue -splice 20x0 splice_left.gif
magick rose: -gravity east \
-background blue -splice 20x0 splice_right.gif
magick rose: -gravity southeast \
-background blue -splice 20x10 splice_botright.gif
L'un des usages les plus courants de splice est d'ajouter de l'espace dans lequel dessiner une étiquette. (Voir Étiqueter des images) |
magick rose: -gravity South -background LimeGreen -splice 0x15 \
-annotate 0x0 'Rose' splice_label.gif
Découpe (chop), retirer des lignes, des colonnes et des bords
L'inverse naturel de « [-splice](https://imagemagick.org/command-line-options/#splice) » est l'opérateur bien plus ancien « [-chop](https://imagemagick.org/command-line-options/#chop) ». Donné le même argument que « [-splice](https://imagemagick.org/command-line-options/#splice) » et le même paramètre « [-gravity](https://imagemagick.org/command-line-options/#gravity) », « [-chop](https://imagemagick.org/command-line-options/#chop) » restaurera l'image dans sa forme d'origine.
magick splice.gif -chop 20x10+40+30 splice_chop.gif
magick splice_chop.gif -chop 20x10+30+20 chop.gif
magick chop.gif -background grey \
-splice 20x10+30+20 chop_splice.gif
J'ai poursuivi le traitement du dernier exemple pour montrer comment vous pouvez inverser l'ordre de « [-splice](https://imagemagick.org/command-line-options/#splice) » et « [-chop](https://imagemagick.org/command-line-options/#chop) » afin de « vider » une ligne ou une colonne (ou les deux) au milieu d'une image sans utiliser de dessins ou de superpositions. Chop est plus couramment utilisé pour couper un seul bord d'une image, en utilisant la gravité pour sélectionner ce bord. Par exemple...
magick frame_red.gif -chop 0x10 chop_top.gif
magick frame_red.gif -chop 10x0 chop_left.gif
magick frame_red.gif -gravity East -chop 10x0 chop_right.gif
magick frame_red.gif -gravity South -chop 0x10 chop_bottom.gif
Comme alternative à l'utilisation de « [-chop](https://imagemagick.org/command-line-options/#chop) » pour retirer un seul bord, vous pouvez en fait utiliser l'opérateur plus universel « [-crop](https://imagemagick.org/command-line-options/#crop) » à la place. Cela ne nécessite pas l'usage de « [-gravity](https://imagemagick.org/command-line-options/#gravity) » pour obtenir les bords inférieur ou droit, mais cela vous oblige à « [+repage](https://imagemagick.org/command-line-options/#repage) » le canevas de l'image ensuite.
magick frame_red.gif -crop +0+10 +repage crop_edge_top.gif
magick frame_red.gif -crop +10+0 +repage crop_edge_left.gif
magick frame_red.gif -crop -10+0 +repage crop_edge_right.gif
magick frame_red.gif -crop +0-10 +repage crop_edge_bottom.gif
Cela repose sur le fait que si « [-crop](https://imagemagick.org/command-line-options/#crop) » ne reçoit pas de zone d'image à retirer, il prendra par défaut la taille du canevas de l'image (pas l'image réelle mais le canevas virtuel de l'image). Cela signifie que vous pouvez (pour les images simples) retirer des bords d'image juste en décalant la zone de rognage à découper. La méthode consistant à utiliser « [-crop](https://imagemagick.org/command-line-options/#crop) » pour « découper » les bords d'image a été découverte et publiée par Don Sheythe, et après quelques discussions a été jugée comme une « fonctionnalité » de IM, et ainsi incluse ici.
Techniques de rognage avancées
Rogner selon un rapport d'aspect donné
Vous pouvez rogner des images pour qu'elles correspondent à un rapport d'aspect spécifique, mais c'est délicat et cela utilise des techniques mathématiques « faites maison ». Par exemple, vous pouvez écrire un script pour faire les calculs puis effectuer le Rognage. Ou, dans IM v6, vous pouvez faire des calculs avec le Viewport de Distort, pour extraire la partie souhaitée de l'image lors d'une distorsion sans effet (No-Op), comme décrit dans Rognage carré centré. Cependant, dans ImageMagick version 7, vous pouvez maintenant faire des calculs mathématiques directement dans des commandes comme « [-crop](https://imagemagick.org/command-line-options/#crop) » et « [-extent](https://imagemagick.org/command-line-options/#extent) », contournant ainsi le besoin de détourner « [-distort](https://imagemagick.org/command-line-options/#distort) ». Ceci est discuté en détail dans le forum des développeurs IM Rogner selon un rapport d'aspect.
Trim, l'opérateur de « rognage automatique »
L'opérateur « [-trim](https://imagemagick.org/command-line-options/#trim) » est très proche du très polyvalent opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) » discuté ci-dessus. Cependant, au lieu de fournir un argument, cet opérateur tente de retirer toute bordure ou tout bord d'une image qui ne change pas de couleur ou de transparence. En d'autres termes, il retire les parties « ennuyeuses » qui entourent une image. |
Notez que dans ImageMagick version 5 et avant, une opération de rognage automatique était réalisée en utilisant un argument « 0x0 » pour l'opérateur « [-crop](https://imagemagick.org/command-line-options/#crop) ». Ce n'est plus le cas, car les arguments de taille « zéro » dans crop signifient désormais « infini » ou « jusqu'à la limite de la taille de l'image ». À ce titre, un argument « 0x0 » pour crop signifie désormais en pratique rogner l'image en tuiles de la taille du canevas d'origine de l'image. En d'autres termes, avec IM v6, le résultat sera identique à l'image d'origine, soit un « no-op ». |
|---|---|
| Par exemple, ici nous prenons le logo IM, que nous redimensionnons, et nous « rognons » (trim) ou « rognons automatiquement » tout l'espace supplémentaire environnant dans le logo. |
magick logo: -resize 30% -trim trim.gif
Deux choses sont à noter dans ce qui précède. La première est que, comme « [-crop](https://imagemagick.org/command-line-options/#crop) », « [-trim](https://imagemagick.org/command-line-options/#trim) » conservera la taille du canevas de l'image. Cela signifie que les arguments numériques du trim peuvent être extraits, pour permettre un traitement ultérieur, ou un ajustement du traitement de l'image (voir Rogner des images « bruitées » pour un exemple de cela). ![[IM Output]](../static/img/crop/trim.gif)
Ici nous rognons l'image, mais seulement pour lister le résultat de quelle partie de l'image a été rognée, et non l'image rognée elle-même.
magick logo: -resize 30% -trim info:-
Cependant, si vous ne vous souciez pas de cette information, jetez-la simplement en réinitialisant l'information de page de l'image, soit à l'aide d'un opérateur « [+repage](https://imagemagick.org/command-line-options/#repage) », soit en enregistrant dans un format qui n'enregistre pas l'information de canevas (comme le format JPEG). Ici nous faisons les deux, pour qu'il soit clair que nous jetons l'information de canevas. |
magick logo: -resize 30% -trim +repage trim_repage.jpg
![[IM Output]](../static/img/crop/trim_repage.jpg)
La seconde chose à noter est que trim n'a pas réellement rogné jusqu'au bord même de l'image finale. C'est particulièrement visible dans le coin inférieur droit de l'image du logo, où l'on peut voir un écart net entre le pied et son ombre et le bord rogné. Dans ce coin, les couleurs sont devenues numériquement différentes de la couleur d'arrière-plan de l'image. Donc, même si nous ne pouvons voir aucun changement réel dans l'image, l'opérateur « [-trim](https://imagemagick.org/command-line-options/#trim) » voit un changement de couleur mineur, il n'a donc pas rogné aussi près de l'image que nous l'aurions attendu. Si l'image est entièrement d'une seule couleur, alors « [-trim](https://imagemagick.org/command-line-options/#trim) » rognera l'image jusqu'à une image manquée minimale d'un seul pixel transparent. C'est logique et cela prévient des problèmes plus graves si l'image était laissée telle quelle.
Rogner avec une couleur spécifique
L'un des problèmes les plus inquiétants avec « [-trim](https://imagemagick.org/command-line-options/#trim) », surtout dans les scripts de traitement d'image automatisés, est que trim peut être un peu imprévisible. Il ne se limite par exemple pas à une couleur spécifique, ni même à une seule couleur. À ce titre, vous pourriez facilement rogner bien plus que prévu. Par exemple, faisons un simple trim d'une image simple de couleurs en rayures.
magick -size 32x32 xc:red xc:green xc:blue +append stripes.gif
magick stripes.gif -trim +repage stripes_trimmed.gif
Comme vous pouvez le voir, « [-trim](https://imagemagick.org/command-line-options/#trim) » a rogné non pas une mais deux couleurs ! Dans un script automatique, cela peut être très néfaste et produire des résultats inattendus. Si vous savez quelle couleur vous voulez rogner d'une image, alors la meilleure façon est d'ajouter une petite « [-border](https://imagemagick.org/command-line-options/#border) » d'un pixel de large de cette couleur à l'image. Prenons « red » dans ce cas.
magick stripes.gif -bordercolor red -border 1x1 \
-trim +repage stripes_trim_red.gif
magick stripes.gif -bordercolor red -border 1x1 -trim \
stripes_trim_red_shifted.gif
![[IM Output]](../static/img/crop/stripes_trim_red_shifted.gif)
Alors essayons de corriger la taille du canevas virtuel (soustraire _largeur_de_bordure_ x2 ) et le décalage (soustraire _largeur_de_bordure_) lors du rognage d'une couleur spécifique. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-set page '%[fx:page.width-2]x%[fx:page.height-2]+%[fx:page.x-1]+%[fx:page.y-1]' \
stripes_trim_red_fix.gif
![[IM Output]](../static/img/crop/stripes_trim_red_fix.gif)
Notez que je restaure la taille et le décalage du canevas de l'image d'origine, que l'opérateur Bordure avait agrandis et décalés ci-dessus. L'opération « [-trim](https://imagemagick.org/command-line-options/#trim) » elle-même a préservé l'emplacement de l'image correctement. C'est, comme vous pouvez le voir, un ajustement plutôt peu maniable. Sinon, si vous ne vous souciez pas de la taille du canevas (typique dans une image en calques), vous pouvez utiliser un Repage relatif bien plus simple pour n'ajuster que la position de l'image sur le canevas agrandi. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-repage -1-1\! stripes_trim_red_fix2.gif
Rogner un seul côté d'une image
Comme vous l'avez vu ci-dessus, « [-trim](https://imagemagick.org/command-line-options/#trim) » rognera autant de côtés qu'il le peut. Allant même jusqu'à retirer deux couleurs différentes de côtés différents (ou, si arrangé très soigneusement, quatre couleurs auraient pu être retirées). Cela rend les choses un peu plus difficiles lorsque vous voulez restreindre le rognage à un seul côté. Pour garantir que nous ne rognons qu'un seul côté, nous devons ajouter quelques rayures de couleur sur l'autre côté pour protéger les trois autres côtés. Voici le processus étape par étape pour rogner seulement le côté « gauche » ou « ouest » de l'image « border » que nous avons créée précédemment. J'ai utilisé des rayures bien plus épaisses que nécessaire afin que vous puissiez mieux les voir dans cet exemple. Normalement, une largeur d'un seul pixel suffit.
magick border.gif -gravity East \
-background white -splice 5x0 \
-background black -splice 5x0 trim_protect.gif
magick trim_protect.gif -trim +repage trim_oneside.gif
magick trim_oneside.gif -gravity East -chop 5x0 trim_west.gif
Notez que j'ajoute des rayures de deux couleurs différentes ! Ainsi, si l'une des couleurs correspond à la couleur de bordure existante entourant l'image, l'autre continuera à fonctionner pour protéger ces trois bords. De plus, une seule des couleurs sera aussi rognée, ne laissant qu'une seule rayure de couleur à nettoyer. Voici le rognage d'un côté complet en une seule commande, mais pour rogner le bord supérieur (les rayures sont ajoutées au bord inférieur ou « Sud »).
![[IM Output]](../static/img/crop/trim_west.gif)
|
magick border.gif -gravity South \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_north.gif
![[IM Output]](../static/img/crop/trim_north.gif)
Et voici un trim du bord inférieur seulement. Bien sûr, le paramètre « [-gravity](https://imagemagick.org/command-line-options/#gravity) » utilisé dans l'exemple précédent n'est pas nécessaire et le paramètre prend par défaut un réglage « North-West » pour les images. |
magick border.gif \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_south.gif
![[IM Output]](../static/img/crop/trim_south.gif)
Bien sûr, comme précédemment avec border, insérer des couleurs supplémentaires sur une image changera à nouveau la taille du canevas de l'image virtuelle et le décalage des images en calques. À nouveau, cela peut être corrigé avec les mêmes méthodes que celles montrées dans la section précédente, mais cela dépend du côté sur lequel vous avez ajouté les couleurs supplémentaires pour préserver ces bords.
Rogner avec sélection de couleur floue (fuzzy) -- images JPEG de basse qualité
Comme le JPEG est « avec perte », les couleurs dans l'image ne forment généralement pas une seule couleur mais une bande légèrement variable de couleurs différentes. À cause de cela, « [-trim](https://imagemagick.org/command-line-options/#trim) » échouera souvent pour le JPEG ou les images du monde réel. FUTUR : exemple d'échec ici À ce titre, vous devez indiquer à ImageMagick que des couleurs qui ne sont pas exactement identiques, mais sont raisonnablement proches, doivent être traitées comme étant identiques. Ajouter un très petit paramètre « [-fuzz](https://imagemagick.org/command-line-options/#fuzz) » fera cela.
magick image.jpg -fuzz 1% -trim +repage image_fuzzy_trim.jpg
C'est aussi une très bonne idée de spécifier la couleur précise par rapport à laquelle vous voulez que ce flou (fuzz) s'applique. Cela peut s'ajouter en ajoutant spécifiquement une bordure de cette couleur à l'aide de l'opérateur « [-border](https://imagemagick.org/command-line-options/#border) ». La bordure correspondra bien sûr toujours à la couleur à rogner, elle sera donc toujours retirée par « [-trim](https://imagemagick.org/command-line-options/#trim) ». FUTUR : exemple de trim avec bordure floue ici
Rogner des images « bruitées » -- images numérisées
Un problème similaire se pose avec les images numérisées, où les scanners produisent souvent de petites erreurs d'un seul pixel, causées par la poussière, la saleté, de légères variations du scanner, ou simplement du bruit électronique capté par le lecteur. Les erreurs de pixels dans ce cas sont cependant généralement trop importantes pour qu'un petit facteur de flou (fuzz) puisse les surmonter, une technique différente est donc nécessaire pour rogner de telles images. La solution la plus simple, bien que souvent la moins pratique, est de prendre plusieurs numérisations de la même image, ou plusieurs trames dans une séquence fixe de vidéo, puis de faire la moyenne des résultats pour réduire l'interférence. Cependant, cela ne retirera pas les grains de poussière sur le scanner et n'aidera pas lorsqu'une seule image ou trame est disponible, rendant cette méthode impraticable dans la plupart des cas. Une solution pratique se fait en deux étapes. Avec une copie de l'image, traitez-la d'une manière ou d'une autre pour atténuer les erreurs d'un seul pixel, ou la poussière du scanner, tout en accentuant l'effet de grands blocs de couleurs fortement contrastées. Puis, en utilisant « [-trim](https://imagemagick.org/command-line-options/#trim) » sur cette copie, et en examinant exactement ce qu'il a fait, vous pouvez ensuite « [-crop](https://imagemagick.org/command-line-options/#crop) » l'image d'origine non modifiée de la même quantité. Il existe un certain nombre de méthodes pour atténuer les erreurs d'un seul pixel. Celles-ci incluent « [-blur](https://imagemagick.org/command-line-options/#blur) », « [-median](https://imagemagick.org/command-line-options/#median) », ou même l'utilisation des opérateurs de morphologie de base pour retirer des détails spécifiques, comme le texte et les lignes fines. La méthode « blur » offre deux contrôles principaux :
- Le rayon sigma de «
[-blur](https://imagemagick.org/command-line-options/#blur)», ou le rayon de convolution de «[-median](https://imagemagick.org/command-line-options/#mediam)», qui détermine la taille des grains de poussière que vous voulez ignorer. Notez que ces deux valeurs peuvent être un nombre à virgule flottante, vous avez donc un contrôle fin sur la quantité de flou appliquée. Pour plus d'informations sur le flou, voir Flouter des images. - Le second contrôle est le facteur de couleur «
[-fuzz](https://imagemagick.org/command-line-options/#fuzz)» qui contrôle l'ampleur du changement de couleur pris en compte par l'opérateur «[-trim](https://imagemagick.org/command-line-options/#trim)». C'est-à-dire à quel point vous voulez que le trim s'approche de l'image souhaitée.
Par exemple, utilisons une image « logo: » plus petite. |
magick logo: -resize 30% noisy.jpg
Dans cette petite image, nous pourrions considérer les étoiles et le titre de l'image comme du bruit que nous voulons que trim ignore. Les étoiles ci-dessus font environ 5 pixels de large, nous voulons donc utiliser une valeur d'environ le double pour que trim les ignore en gros. ![[IM Output]](../static/img/crop/noisy.jpg)
Voici le résultat. Notez que dans ce cas nous ne voulons pas d'image, juste l'information de canevas de l'image.
magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim info:
| _Vous devrez peut-être vérifier le paramètrePixel virtuel pour garantir que vous obtenez les bons « effets de bord » avec le flou.
Sinon, vous pouvez ajouter une large bordure de la même couleur d'arrière-plan à l'image avant de la flouter et ajuster les résultats de décalage de façon appropriée. Cela peut être préférable pour des résultats plus précis des deux opérateurs « [-blur](https://imagemagick.org/command-line-options/#blur) » et « [-trim](https://imagemagick.org/command-line-options/#trim) »._
---|---
À partir du résultat ci-dessus, nous pouvons déterminer que « [-trim](https://imagemagick.org/command-line-options/#trim) » avait utilisé en interne un argument « [-crop](https://imagemagick.org/command-line-options/#crop) » de « 89x121+78+23 ». C'est la taille réelle de l'image rognée, et son décalage sur le canevas virtuel, et vraisemblablement l'emplacement de l'objet majeur (unique) que nous recherchons dans l'image. Cela peut ensuite être utilisé sur l'image d'origine, qui n'a pas été floutée. |
magick noisy.jpg -crop 89x121+78+23 +repage noisy_trimmed.jpg
Et nous voici, ayant rogné notre image jusqu'au seul magicien ! ![[IM Output]](../static/img/crop/noisy_trimmed.jpg)
Cela peut se faire en une seule ligne, en utilisant un peu de « script shell UNIX » supplémentaire, et un peu de formatage des résultats de cette première commande. |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% \
-trim -format '%wx%h%O' info:` +repage noisy_trimmed_2.jpg
Voir Séquences d'échappement de propriétés d'image pour plus d'informations sur le paramètre « [-format](https://imagemagick.org/command-line-options/#format) » utilisé pour contrôler la sortie de « [info:](files.html#info) ». ![[IM Output]](../static/img/crop/noisy_trimmed_2.jpg)
| _Ce qui précède utilise une fonctionnalité du shell de ligne de commande UNIX pour la méthode de « substitution de commande » utilisant des guillemets inversés '...' pour insérer l'argument « [-crop](https://imagemagick.org/command-line-options/#crop) » généré dans la commande « magick » externe.
Vous pouvez faire cela dans un script batch Windows, en utilisant une construction spéciale FOR..DO. Suivez le lien ci-dessus pour les détails._
---|---
Notez que si la main du magicien est entièrement visible, la pointe du chapeau ne l'est pas. C'est l'inconvénient de cette méthode : elle ignorera les pointes aiguës et les détails fins. Mais c'est aussi ce que nous lui demandions d'ignorer au départ. La méthode pourrait être améliorée en élargissant la zone rognée d'une petite quantité (10 pixels dans les 4 directions), en utilisant une séquence d'échappement FX pour faire les mathématiques... |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-format '%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]' \
info:` +repage noisy_trimmed_3.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_3.jpg)
Si les limites calculées s'étendent au-delà de l'image d'origine, l'opérateur crop la limitera automatiquement aux limites de l'image. Dans IMv7 (en utilisant la commande « magick »), vous pouvez tout faire en une seule commande, en sauvegardant la taille de trim calculée dans un paramètre pour un usage ultérieur. |
magick noisy.jpg \
\( +clone -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-set option:fuzzy_trim \
'%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]'\
+delete \) \
-crop %[fuzzy_trim] noisy_trimmed_4.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_4.jpg)
D'autres méthodes de rognage flou (fuzzy) utilisent diverses méthodes morphologiques pour retirer les parties indésirables de l'image, avant de rogner pour trouver les limites de la zone voulue dans l'image d'origine. Un utilisateur, HugoRune, avait besoin de rogner une image jusqu'à une région de contraste très différent à des fins de numérisation. Voir Discussion sur les forums IM, pour les détails.
![[IM Output]](../static/img/crop/rose.gif)
![[IM Output]](../static/img/crop/crop.gif)
![[IM Output]](../static/img/crop/crop_br.gif)
![[IM Output]](../static/img/crop/crop_tl.gif)
![[IM Output]](../static/img/crop/crop_all.gif)
![[IM Output]](../static/img/crop/crop_miss.gif)
![[IM Text]](../static/img/crop/crop_indent.txt.gif)
![[IM Text]](../static/img/crop/crop_error.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_ident.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_data.txt.gif)
![[IM Output]](../static/img/crop/paged.gif)
![[IM Output]](../static/img/crop/crop_page.gif)
![[IM Output]](../static/img/crop/crop_page_tl.gif)
![[IM Output]](../static/img/crop/crop_page_br.gif)
![[IM Output]](../static/img/crop/crop_page_all.gif)
![[IM Output]](../static/img/crop/crop_page_miss.gif)
![[IM Text]](../static/img/crop/crop_page_ident.txt.gif)
![[IM Output]](../static/img/crop/crop_area_br.png)
![[IM Output]](../static/img/crop/repage.gif)
![[IM Output]](../static/img/crop/repage_br.gif)
![[IM Output]](../static/img/crop/repage_tl.gif)
![[IM Output]](../static/img/crop/repage_all.gif)
![[IM Output]](../static/img/crop/repage_miss.gif)
![[IM Output]](../static/img/crop/crop_vp.gif)
![[IM Output]](../static/img/crop/crop_vp_br.gif)
![[IM Output]](../static/img/crop/crop_vp_tl.gif)
![[IM Output]](../static/img/crop/crop_vp_all.gif)
![[IM Output]](../static/img/crop/crop_vp_miss.gif)
![[IM Text]](../static/img/crop/crop_vp_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_0.gif)
![[IM Output]](../static/img/crop/tiles_1.gif)
![[IM Output]](../static/img/crop/tiles_2.gif)
![[IM Output]](../static/img/crop/tiles_3.gif)
![[IM Text]](../static/img/crop/tiles_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_layered.gif)
![[IM Output]](../static/img/crop/rose_tiles_00.gif)
![[IM Output]](../static/img/crop/rose_tiles_01.gif)
![[IM Output]](../static/img/crop/rose_tiles_02.gif)
![[IM Output]](../static/img/crop/rose_tiles_03.gif)
![[IM Output]](../static/img/crop/rose_tiles_04.gif)
![[IM Output]](../static/img/crop/rose_tiles_05.gif)
![[IM Output]](../static/img/crop/rose_tiles_06.gif)
![[IM Output]](../static/img/crop/rose_tiles_07.gif)
![[IM Output]](../static/img/crop/rose_tiles_08.gif)
![[IM Output]](../static/img/crop/rose_tiles_09.gif)
![[IM Output]](../static/img/crop/rose_tiles_10.gif)
![[IM Output]](../static/img/crop/rose_tiles_11.gif)
![[IM Output]](../static/img/crop/rose_rejoined.gif)
![[IM Output]](../static/img/crop/rose_tile_1_1.gif)
![[IM Output]](../static/img/crop/rose_tile_2_1.gif)
![[IM Output]](../static/img/crop/rose_tile_3_1.gif)
![[IM Output]](../static/img/crop/rose_tile_4_1.gif)
![[IM Output]](../static/img/crop/rose_tile_1_2.gif)
![[IM Output]](../static/img/crop/rose_tile_2_2.gif)
![[IM Output]](../static/img/crop/rose_tile_3_2.gif)
![[IM Output]](../static/img/crop/rose_tile_4_2.gif)
![[IM Output]](../static/img/crop/rose_tile_1_3.gif)
![[IM Output]](../static/img/crop/rose_tile_2_3.gif)
![[IM Output]](../static/img/crop/rose_tile_3_3.gif)
![[IM Output]](../static/img/crop/rose_tile_4_3.gif)
![[IM Output]](../static/img/crop/rose_30x20_00.gif)
![[IM Output]](../static/img/crop/rose_30x20_01.gif)
![[IM Output]](../static/img/crop/rose_30x20_02.gif)
![[IM Output]](../static/img/crop/rose_30x20_03.gif)
![[IM Output]](../static/img/crop/rose_30x20_04.gif)
![[IM Output]](../static/img/crop/rose_30x20_05.gif)
![[IM Output]](../static/img/crop/rose_30x20_06.gif)
![[IM Output]](../static/img/crop/rose_30x20_07.gif)
![[IM Output]](../static/img/crop/rose_30x20_08.gif)
![[IM Output]](../static/img/crop/rose_30x20_09.gif)
![[IM Output]](../static/img/crop/rose_30x20_10.gif)
![[IM Output]](../static/img/crop/rose_30x20_11.gif)
![[IM Output]](../static/img/crop/rose_30x20_12.gif)
![[IM Output]](../static/img/crop/rose_30x20_13.gif)
![[IM Output]](../static/img/crop/rose_30x20_14.gif)
![[IM Output]](../static/img/crop/rose_30x20_15.gif)
![[IM Output]](../static/img/crop/rose_ctiles_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles_3.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_3.gif)
![[IM Output]](../static/img/crop/strip_column.gif)
![[IM Output]](../static/img/crop/strip_row.gif)
![[IM Output]](../static/img/crop/strips_0.gif)
![[IM Output]](../static/img/crop/strips_1.gif)
![[IM Output]](../static/img/crop/strips_2.gif)
![[IM Output]](../static/img/crop/strips_3.gif)
![[IM Output]](../static/img/crop/quadrant_tl.gif)
![[IM Output]](../static/img/crop/quadrant_tr.gif)
![[IM Output]](../static/img/crop/quadrant_bl.gif)
![[IM Output]](../static/img/crop/quadrant_br.gif)
![[IM Output]](../static/img/crop/neg_offset_1.gif)
![[IM Output]](../static/img/crop/neg_offset_2.gif)
![[IM Output]](../static/img/crop/neg_offset_3.gif)
![[IM Output]](../static/img/crop/neg_offset_4.gif)
![[IM Output]](../static/img/crop/neg_offset_5.gif)
![[IM Output]](../static/img/crop/rose_23x15_00.gif)
![[IM Output]](../static/img/crop/rose_23x15_01.gif)
![[IM Output]](../static/img/crop/rose_23x15_02.gif)
![[IM Output]](../static/img/crop/rose_23x15_03.gif)
![[IM Output]](../static/img/crop/rose_23x15_04.gif)
![[IM Output]](../static/img/crop/rose_23x15_05.gif)
![[IM Output]](../static/img/crop/rose_23x15_06.gif)
![[IM Output]](../static/img/crop/rose_23x15_07.gif)
![[IM Output]](../static/img/crop/rose_23x15_08.gif)
![[IM Output]](../static/img/crop/rose_23x15_09.gif)
![[IM Output]](../static/img/crop/rose_23x15_10.gif)
![[IM Output]](../static/img/crop/rose_23x15_11.gif)
![[IM Output]](../static/img/crop/rose_23x15_12.gif)
![[IM Output]](../static/img/crop/rose_23x15_13.gif)
![[IM Output]](../static/img/crop/rose_23x15_14.gif)
![[IM Output]](../static/img/crop/rose_23x15_15.gif)
![[IM Output]](../static/img/crop/rose_3x3@_0.gif)
![[IM Output]](../static/img/crop/rose_3x3@_1.gif)
![[IM Output]](../static/img/crop/rose_3x3@_2.gif)
![[IM Output]](../static/img/crop/rose_3x3@_3.gif)
![[IM Output]](../static/img/crop/rose_3x3@_4.gif)
![[IM Output]](../static/img/crop/rose_3x3@_5.gif)
![[IM Output]](../static/img/crop/rose_3x3@_6.gif)
![[IM Output]](../static/img/crop/rose_3x3@_7.gif)
![[IM Output]](../static/img/crop/rose_3x3@_8.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_0.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_1.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_2.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_3.gif)
![[IM Output]](../static/img/crop/montage.gif)
![[IM Output]](../static/img/crop/montage_0.gif)
![[IM Output]](../static/img/crop/montage_1.gif)
![[IM Output]](../static/img/crop/montage_2.gif)
![[IM Output]](../static/img/crop/montage_3.gif)
![[IM Output]](../static/img/crop/montage_4.gif)
![[IM Output]](../static/img/crop/montage-3_0.gif)
![[IM Output]](../static/img/crop/montage-3_1.gif)
![[IM Output]](../static/img/crop/montage-3_2.gif)
![[IM Output]](../static/img/crop/montage-3_3.gif)
![[IM Output]](../static/img/crop/montage-3_4.gif)
![[IM Output]](../static/img/crop/edged.gif)
![[IM Output]](../static/img/crop/edged+6_0.gif)
![[IM Output]](../static/img/crop/edged+6_1.gif)
![[IM Output]](../static/img/crop/edged+6_2.gif)
![[IM Output]](../static/img/crop/edged+6_3.gif)
![[IM Output]](../static/img/crop/edged+6_4.gif)
![[IM Output]](../static/img/crop/edged-6_0.gif)
![[IM Output]](../static/img/crop/edged-6_1.gif)
![[IM Output]](../static/img/crop/edged-6_2.gif)
![[IM Output]](../static/img/crop/edged-6_3.gif)
![[IM Output]](../static/img/crop/edged-6_4.gif)
![[IM Output]](../static/img/crop/edged-8_0.gif)
![[IM Output]](../static/img/crop/edged-8_1.gif)
![[IM Output]](../static/img/crop/edged-8_2.gif)
![[IM Output]](../static/img/crop/edged-8_3.gif)
![[IM Output]](../static/img/crop/edged-8_4.gif)
![[IM Output]](../static/img/crop/tile-shave.gif)
![[IM Output]](../static/img/crop/spaced.gif)
![[IM Output]](../static/img/crop/spaced+6_0.gif)
![[IM Output]](../static/img/crop/spaced+6_1.gif)
![[IM Output]](../static/img/crop/spaced+6_2.gif)
![[IM Output]](../static/img/crop/spaced+6_3.gif)
![[IM Output]](../static/img/crop/spaced+6_4.gif)
![[IM Output]](../static/img/crop/spaced-6_0.gif)
![[IM Output]](../static/img/crop/spaced-6_1.gif)
![[IM Output]](../static/img/crop/spaced-6_2.gif)
![[IM Output]](../static/img/crop/spaced-6_3.gif)
![[IM Output]](../static/img/crop/spaced-6_4.gif)
![[IM Output]](../static/img/crop/border_default.gif)
![[IM Output]](../static/img/crop/border_sides.gif)
![[IM Output]](../static/img/crop/border_topbot.gif)
![[IM Output]](../static/img/crop/border_none.gif)
![[IM Output]](../static/img/images/star.gif)
![[IM Output]](../static/img/crop/star_background.gif)
![[IM Output]](../static/img/crop/border_compose.jpg)
![[IM Output]](../static/img/crop/paged_border.gif)
![[IM Output]](../static/img/crop/frame.gif)
![[IM Output]](../static/img/crop/frame_wierd.gif)
![[IM Output]](../static/img/crop/frame_blue.gif)
![[IM Output]](../static/img/crop/frame_red.gif)
![[IM Output]](../static/img/crop/frame_rasied.gif)
![[IM Output]](../static/img/crop/frame_rasied_part.gif)
![[IM Output]](../static/img/crop/frame_sunken_part.gif)
![[IM Output]](../static/img/crop/frame_sunken.gif)
![[IM Output]](../static/img/crop/frame_normal.gif)
![[IM Output]](../static/img/crop/frame_popped.gif)
![[IM Output]](../static/img/crop/frame_pressed.gif)
![[IM Output]](../static/img/crop/frame_inverted.gif)
![[IM Output]](../static/img/crop/frame_compose.jpg)
![[IM Output]](../static/img/crop/paged_framed.gif)
![[IM Output]](../static/img/crop/shave.gif)
![[IM Output]](../static/img/crop/shave_sides.gif)
![[IM Output]](../static/img/crop/shave_topbot.gif)
![[IM Output]](../static/img/crop/paged_frame.gif)
![[IM Output]](../static/img/crop/paged_shave.gif)
![[IM Output]](../static/img/crop/paged_tile_shave.gif)
![[IM Output]](../static/img/crop/extent_enlarge.gif)
![[IM Output]](../static/img/crop/extent_shrink.gif)
![[IM Output]](../static/img/crop/extent_wider.gif)
![[IM Output]](../static/img/crop/extent_taller.gif)
![[IM Output]](../static/img/crop/extent_north.gif)
![[IM Output]](../static/img/crop/extent_south.gif)
![[IM Output]](../static/img/crop/extent_east.gif)
![[IM Output]](../static/img/crop/extent_west.gif)
![[IM Output]](../static/img/crop/extent_center.gif)
![[IM Output]](../static/img/crop/extent_center2.gif)
![[IM Output]](../static/img/crop/splice.gif)
![[IM Output]](../static/img/crop/splice_column.gif)
![[IM Output]](../static/img/crop/splice_row.gif)
![[IM Output]](../static/img/crop/splice_topleft.gif)
![[IM Output]](../static/img/crop/splice_top.gif)
![[IM Output]](../static/img/crop/splice_bottom.gif)
![[IM Output]](../static/img/crop/splice_left.gif)
![[IM Output]](../static/img/crop/splice_right.gif)
![[IM Output]](../static/img/crop/splice_botright.gif)
![[IM Output]](../static/img/crop/splice_label.gif)
![[IM Output]](../static/img/crop/splice_chop.gif)
![[IM Output]](../static/img/crop/chop.gif)
![[IM Output]](../static/img/crop/chop_splice.gif)
![[IM Output]](../static/img/crop/chop_top.gif)
![[IM Output]](../static/img/crop/chop_left.gif)
![[IM Output]](../static/img/crop/chop_right.gif)
![[IM Output]](../static/img/crop/chop_bottom.gif)
![[IM Output]](../static/img/crop/crop_edge_top.gif)
![[IM Output]](../static/img/crop/crop_edge_left.gif)
![[IM Output]](../static/img/crop/crop_edge_right.gif)
![[IM Output]](../static/img/crop/crop_edge_bottom.gif)
![[IM Text]](../static/img/crop/trim_info.txt.gif)
![[IM Output]](../static/img/crop/stripes.gif)
![[IM Output]](../static/img/crop/stripes_trimmed.gif)
![[IM Output]](../static/img/crop/stripes_trim_red.gif)
![[IM Output]](../static/img/crop/stripes_trim_red_fix2.gif)
![[IM Text]](../static/img/crop/blur_trim_info.txt.gif)