Besoin : redimensionner un lot d'images pour réduire leur taille et augmenter leur taux de compression afin d'économiser de la place sur le disque dur.

En effet, les appareils photos d'entrée de gamme et moyen de gamme retournent souvent des images avec des millions de pixels et font donc une taille sur le disque de plusieurs méga-otets alors que la plupart de ces images ne méritent souvent pas plus de 100 ou 200ko. Ce gain d'environ 10x sur des centaines voir des milliers d'images peut permettre un gain significatif de place sur le disque dur.

 

Si ces images sont sur un serveur web, cela permet, outre le gain de mémoire, un chargement des images plus rapide.

Dans la continuité de mon article (tutoriel) sur le renommage des photos par lot, voici comment réaliser ce redimensionnement en ligne de commande, donc possible sur un serveur ne disposant pas d'interface graphique :

J'utilise pour cela l'incontournable ImageMagick qui contient différentes commandes :

pour commencer vous pouvez en savoir plus sur votre(vos) image(s) avec la commande identify

identify -verbose *.jpg

sans -verbose, vous ne récuperez guère que les dimensions de l'image, la taille du fichier... ce qui peut suffire

ensuite, si vous n'avez pas besoin de conserver les images originales, on peut utiliser la commande mogrify (soyez prudent, faites des essais avant de traiter votre lot d'images)

mogrify -resize 1920000@ -quality 65 *.jpg

-resize 1920000@ va redimensionner l'image à 2,4 millons de pixels en conservant les proportions. Pour des images au format paysage, cela donne environ 1600x1200 pixels ce qui est souvent amplement suffisant pour la visualisation d'images de bonne qualité. Voici ci-dessous un tableau des équivalents pour les images au format 4/3.

taille de l'image taille globale de l'image en pixels remarques
4160×2336 9'717'760

pas du 4/3… format de smartphone, inutile pour visu sur écran et tirage normale, abérrant pour des capteurs de smartphone (sauf très haut de gamme), le seul intérêt est de pouvoir zoomer/recadrer… encore faut-il avoir un piqué (résolution) d'image correcte!

3216×2136 6'869'376 un bon compromis entre taille et résolution pour la conservation d'image de qualité (réflex, APN et smartphone haut de gamme)
2048×1536 3'145'728 suffisant pour des photos qui ne sont pas exceptionnelles
 1800×1350  2'430'000 taille grande mais appréciable pour visu sur les écrans 16/9 actuels
 1600×1200  1'920'000  
1280×1024 1'310'720  
1024×768 786'432  


ATTENTION : s'il y a de petites images dans le lot, elles seront agrandies pour approcher la taille définie ! Pour éviter cela, on peut utiliser le 'flag' > :

mogrify -resize 6869376@\> -quality 65 *.jpg

-quality 65 spécifie le pourcentage de compression jpeg, là aussi 65% donne un bon compromis qualité/efficacité de compression pour le web ou conservation d'images "moyennes", 70-75% pour des images correctes, 80-90% si vous prévoyez d'en réaliser des tirages.

Si vous souhaitez conserver vos originaux, vous pouvez renommer les images en les redimensionnant en utilisant la commande convert

convert *.jpg -resize 1200000@ -quality 65 -set filename:fname 'prefixe%t' +adjoin repertoire_existant/'%[filename:fname].jpg'

 Quelques liens :

http://www.tux-planet.fr/imagemagick-manipuler-des-images-en-ligne-de-commande/

http://barthes.enssib.fr/cours/photo/ par Eric Guichard

mogrify sur un ensemble de sous-répertoire :

Vous avez accumulé des années ou des mois de photos dans une arborescence.

Se positionner sur le répertoire parents qui contient les répertoires et sous-répertoires à traiter, puis lancer la commande :

find -iname *.jpg -exec mogrify -resize 3145728@\> -quality 70 -verbose {} \;

mogrify avec des expressions régulières (regex) :

Si vous regroupez des images de différentes personnes par exemple et que vous avez déjà traité les premiers lots, il peut-être utile de ne traiter que les nouvelles images... souvent les noms, notamment les préfixes suffisent à le différencier facilement... mais parfois, c'est moins simple. Dans l'exemple ci-dessous, les photos d'un smartphone ne contenaient pas de préfixe... seules les regex associées à la commande find pouvaient donc m'aider :

find . -regextype posix-extended -regex '^./201511[0-9]{2}_[0-9]{6}\.jpg' -exec mogrify -resize 3145728@\> -quality 70 -verbose {} \;

j'avoue, comme dirait certain, ça pique !