## 1. À quoi ça sert

ImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit "Redimensionner" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait.

C'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul.

On le retrouve donc naturellement :

- sur des serveurs web qui génèrent des miniatures à la volée,
- dans des scripts qui traitent des dossiers entiers d'un coup,
- dans des pipelines CI/CD pour préparer des assets,
- dans des conteneurs Docker, accessibles uniquement en SSH.

Depuis la version 7, tout passe par une commande unique : `magick`. Les anciennes commandes (`convert`, `identify`, `mogrify`...) existent toujours pour la compatibilité, mais elles ne sont plus la norme.

## 2. Installation

Sur Debian ou Ubuntu :

```bash
sudo apt install imagemagick
```

On vérifie ensuite que tout est en place :

```bash
magick -version
```

La sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation.

## 3. Comment ImageMagick raisonne

Toutes les commandes suivent la même logique :

```
magick [entrée] [options] [sortie]
```

L'image est chargée en mémoire, puis chaque option s'applique **dans l'ordre où elle est écrite**, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final.

Exemple :

```bash
magick input.jpg -resize 800x600 -quality 85 output.jpg
```

Ici, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait `-quality` et `-resize`, le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique.

## 4. Convertir d'un format à un autre

Le cas le plus simple : changer l'extension du fichier de sortie suffit.

```bash
magick image.png image.jpg
```

ImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas.

Quand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement :

```bash
magick image.png -depth 8 image.jpg
```

Utile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant.

## 5. Redimensionner

### La méthode brutale

```bash
magick image.jpg -resize 800x600 image_resized.jpg
```

Cette commande redimensionne à 800×600 **en respectant les proportions** par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé.

Pour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation :

```bash
magick image.jpg -resize 800x600! image_resized.jpg
```

### Ne rétrécir que les grandes images

C'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité).

```bash
magick image.jpg -resize "1600x1600>" image_resized.jpg
```

Le `>` signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car `>` est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec `\>`.

### En pourcentage

```bash
magick image.jpg -resize 50% image_small.jpg
```

Pratique quand on veut diviser la taille par deux sans calculer les dimensions exactes.

## 6. Qualité et poids du fichier

Pour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier :

```bash
magick image.jpg -quality 85 image.jpg
```

Quelques repères en pratique :

- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95.
- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web.
- **75** : encore très acceptable, gain de place notable.
- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur.

### Supprimer les métadonnées

Les fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité.

```bash
magick image.jpg -strip image.jpg
```

L'option `-strip` fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires.

## 7. Recadrer et adapter à un cadre

### Recadrage classique

```bash
magick image.jpg -crop 800x600+100+50 output.jpg
```

La syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut.

### Remplir un cadre exact, sans déformation

C'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine.

```bash
magick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg
```

Trois étapes enchaînées :

1. `-resize 800x600^` redimensionne pour que l'image **remplisse** le cadre (le `^` inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite).
2. `-gravity center` indique qu'on veut centrer le découpage.
3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue.

Le résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs.

## 8. Traiter un dossier entier

Une boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG :

```bash
for f in *.png; do
  magick "$f" "${f%.png}.jpg"
done
```

La syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable.

Pour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` :

```bash
mogrify -resize "1600x1600>" *.jpg
```

Cette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'**il n'y a pas de retour en arrière** : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde.

## 9. Texte et filigranes

### Apposer une mention textuelle

```bash
magick image.jpg \
  -gravity southeast \
  -pointsize 24 \
  -fill white \
  -annotate +10+10 "© MonSite" \
  image_marked.jpg
```

`-gravity` ancre le texte dans un coin de l'image (les neuf positions classiques : `northwest`, `north`, `northeast`, `west`, `center`...), et `-annotate` ajoute un décalage par rapport à ce point d'ancrage. Ici, `+10+10` éloigne le texte de 10 pixels du coin inférieur droit.

### Superposer un logo ou un watermark image

```bash
magick image.jpg watermark.png -gravity center -composite output.jpg
```

L'image principale est lue en premier, le filigrane en second, puis `-composite` les fusionne. Si le watermark a un canal alpha (transparence), il est respecté.

## 10. Couleurs et tons

Passage en noir et blanc :

```bash
magick image.jpg -colorspace Gray output.jpg
```

Réglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) :

```bash
magick image.jpg -brightness-contrast 10x5 output.jpg
```

Ici, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`.

## 11. Inspecter une image

Pour obtenir les informations essentielles — format, dimensions, profondeur :

```bash
magick identify image.jpg
```

Pour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme :

```bash
magick identify -verbose image.jpg
```

La sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier.

## 12. Formats modernes

Le WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants :

```bash
magick image.jpg -quality 80 image.webp
```

L'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent :

```bash
magick image.jpg image.avif
```

Si la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer `libheif` ou recompiler.

## 13. Quelques règles à se fixer

- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas.
- **Stripper les métadonnées** avant toute publication web.
- **Pour de très gros volumes** (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de `libvips` : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant.
- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script.
- **Lire les messages d'erreur** : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie.

## 14. Là où on le croise vraiment

En pratique, ImageMagick finit presque toujours dans les mêmes situations :

- préparation d'images pour un site web (redimensionnement + compression + strip),
- génération de miniatures à la volée côté serveur,
- normalisation d'un catalogue photo hétérogène (formats, tailles, profils),
- conversion massive d'archives anciennes vers des formats modernes,
- nettoyage des métadonnées avant diffusion publique.

---

ImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images.