Files
varlog/_cache/articles/11186836-bbac-4054-82db-a3bfed14a274.json
T
2026-05-15 10:37:48 +02:00

1 line
12 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"uuid":"11186836-bbac-4054-82db-a3bfed14a274","slug":"imagemagick-traiter-des-images-en-ligne-de-commande","title":"ImageMagick : traiter des images en ligne de commande","author":"cedric@abonnel.fr","published":true,"published_at":"2025-12-28 14:56","created_at":"2025-12-28 14:56:14","updated_at":"2026-05-12 00:36:01","revisions":[{"n":1,"date":"2026-05-12 00:33:58","comment":"","title":"ImageMagick : traiter des images en ligne de commande"},{"n":2,"date":"2026-05-12 00:36:01","comment":"","title":"ImageMagick : traiter des images en ligne de commande"}],"cover":"cover.png","files_meta":{"cover.png":{"author":"","source_url":"https://imagemagick.org/image/logo.png"}},"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"linux","content":"# ImageMagick : traiter des images en ligne de commande\n\n## 1. À quoi ça sert\n\nImageMagick, 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.\n\nC'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.\n\nOn le retrouve donc naturellement :\n\n- sur des serveurs web qui génèrent des miniatures à la volée,\n- dans des scripts qui traitent des dossiers entiers d'un coup,\n- dans des pipelines CI/CD pour préparer des assets,\n- dans des conteneurs Docker, accessibles uniquement en SSH.\n\nDepuis 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.\n\n## 2. Installation\n\nSur Debian ou Ubuntu :\n\n```bash\nsudo apt install imagemagick\n```\n\nOn vérifie ensuite que tout est en place :\n\n```bash\nmagick -version\n```\n\nLa 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.\n\n## 3. Comment ImageMagick raisonne\n\nToutes les commandes suivent la même logique :\n\n```\nmagick [entrée] [options] [sortie]\n```\n\nL'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.\n\nExemple :\n\n```bash\nmagick input.jpg -resize 800x600 -quality 85 output.jpg\n```\n\nIci, 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.\n\n## 4. Convertir d'un format à un autre\n\nLe cas le plus simple : changer l'extension du fichier de sortie suffit.\n\n```bash\nmagick image.png image.jpg\n```\n\nImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas.\n\nQuand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement :\n\n```bash\nmagick image.png -depth 8 image.jpg\n```\n\nUtile 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.\n\n## 5. Redimensionner\n\n### La méthode brutale\n\n```bash\nmagick image.jpg -resize 800x600 image_resized.jpg\n```\n\nCette 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é.\n\nPour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation :\n\n```bash\nmagick image.jpg -resize 800x600! image_resized.jpg\n```\n\n### Ne rétrécir que les grandes images\n\nC'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é).\n\n```bash\nmagick image.jpg -resize \"1600x1600>\" image_resized.jpg\n```\n\nLe `>` 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 `\\>`.\n\n### En pourcentage\n\n```bash\nmagick image.jpg -resize 50% image_small.jpg\n```\n\nPratique quand on veut diviser la taille par deux sans calculer les dimensions exactes.\n\n## 6. Qualité et poids du fichier\n\nPour les JPEG, le paramètre `-quality` règle le compromis entre fidélité visuelle et poids du fichier :\n\n```bash\nmagick image.jpg -quality 85 image.jpg\n```\n\nQuelques repères en pratique :\n\n- **100** : qualité maximale, fichier énorme, différence imperceptible avec 95.\n- **85** : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web.\n- **75** : encore très acceptable, gain de place notable.\n- **En dessous de 70** : les artefacts deviennent visibles, surtout sur les aplats de couleur.\n\n### Supprimer les métadonnées\n\nLes 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é.\n\n```bash\nmagick image.jpg -strip image.jpg\n```\n\nL'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.\n\n## 7. Recadrer et adapter à un cadre\n\n### Recadrage classique\n\n```bash\nmagick image.jpg -crop 800x600+100+50 output.jpg\n```\n\nLa 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.\n\n### Remplir un cadre exact, sans déformation\n\nC'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.\n\n```bash\nmagick image.jpg -resize 800x600^ -gravity center -extent 800x600 output.jpg\n```\n\nTrois étapes enchaînées :\n\n1. `-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).\n2. `-gravity center` indique qu'on veut centrer le découpage.\n3. `-extent 800x600` coupe ce qui dépasse pour obtenir exactement la taille voulue.\n\nLe résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs.\n\n## 8. Traiter un dossier entier\n\nUne boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG :\n\n```bash\nfor f in *.png; do\n magick \"$f\" \"${f%.png}.jpg\"\ndone\n```\n\nLa syntaxe `${f%.png}` retire l'extension `.png` du nom, on y ajoute `.jpg`. Simple et fiable.\n\nPour modifier les fichiers **sur place**, ImageMagick fournit `mogrify` :\n\n```bash\nmogrify -resize \"1600x1600>\" *.jpg\n```\n\nCette 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.\n\n## 9. Texte et filigranes\n\n### Apposer une mention textuelle\n\n```bash\nmagick image.jpg \\\n -gravity southeast \\\n -pointsize 24 \\\n -fill white \\\n -annotate +10+10 \"© MonSite\" \\\n image_marked.jpg\n```\n\n`-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.\n\n### Superposer un logo ou un watermark image\n\n```bash\nmagick image.jpg watermark.png -gravity center -composite output.jpg\n```\n\nL'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é.\n\n## 10. Couleurs et tons\n\nPassage en noir et blanc :\n\n```bash\nmagick image.jpg -colorspace Gray output.jpg\n```\n\nRéglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) :\n\n```bash\nmagick image.jpg -brightness-contrast 10x5 output.jpg\n```\n\nIci, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : `-brightness-contrast -10x0`.\n\n## 11. Inspecter une image\n\nPour obtenir les informations essentielles — format, dimensions, profondeur :\n\n```bash\nmagick identify image.jpg\n```\n\nPour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme :\n\n```bash\nmagick identify -verbose image.jpg\n```\n\nLa sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier.\n\n## 12. Formats modernes\n\nLe WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants :\n\n```bash\nmagick image.jpg -quality 80 image.webp\n```\n\nL'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent :\n\n```bash\nmagick image.jpg image.avif\n```\n\nSi 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.\n\n## 13. Quelques règles à se fixer\n\n- **Toujours travailler sur une copie** quand on découvre une nouvelle commande. `mogrify` en particulier ne pardonne pas.\n- **Stripper les métadonnées** avant toute publication web.\n- **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.\n- **Automatiser dès qu'on répète** : si la même commande revient deux fois, elle mérite un script.\n- **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.\n\n## 14. Là où on le croise vraiment\n\nEn pratique, ImageMagick finit presque toujours dans les mêmes situations :\n\n- préparation d'images pour un site web (redimensionnement + compression + strip),\n- génération de miniatures à la volée côté serveur,\n- normalisation d'un catalogue photo hétérogène (formats, tailles, profils),\n- conversion massive d'archives anciennes vers des formats modernes,\n- nettoyage des métadonnées avant diffusion publique.\n\n---\n\nImageMagick 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.","featured":false,"tags":[]}