[python] redimensionnement d'images

Bonsoir,

Pour faire suite à ma proposition à Ricardo, voici un petit programme en python 2.7 qui redimensionne les images:

redim_photos.py

Je l’ai fait pour traiter automatiquement mes photos pour générer une image de moindre résolution et une miniature pour importation ultérieure dans une galerie piwigo.

Il ne traite que les fichiers jpeg (ça devrait fonctionner avec les autres formats, mais je ne traite que du jpeg).

Il tient compte de l’orientation de la photo (paysage ou portrait) avant de la redimensionner.

Il tient compte également du rapport hauteur/largeur de chaque photo :
[ul][li]2560x1920 devient 1024x768 (compact numérique)[/li]
[li]3151x2040 devient 1024x663 (diapo 24x36 scannées)[/li][/ul]

ATTENTION : il utilise la librairie python-pythonmagick, mais la version de Squeeze (0.9.1-3+b1) n’est pas compatible (l’option resize n’est pas implémentée). La version de Wheezy/Sid (0.9.7-2+b1) fonctionne bien.

Pourquoi utilise cette librairie ? Parce que la librairie python-imaging (PIL), qui fait aussi bien le travail de redimensionnement, supprime également les méta-données (EXIF/IPTC/XMP). Et justement je me sers de ces méta-données pour récupérer dans piwigo le nom, la légende et la géolocalisation de mes photos.

Il faut donc installer cette librairie (aptitude install python-pythonmagick) avant toute chose.

Le programme fonctionne sans arguments, et alors il utilise le paramétrage par défaut :
[ul][li]répertoire contenant les photos à traiter : ./a_transformer[/li]
[li]répertoire où placer les photos redimensionnées : ./fait[/li]
[li]préfixe des miniatures : TN- (convention piwigo)[/li]
[li]taille des photos : 1024[/li]
[li]taille des miniatures : 134[/li][/ul]

Si on veut utiliser un autre emplacement, une autre résolution, … on le lance avec arguments, et il faut obligatoirement préciser les 5 arguments :
[ul][li]répertoire où sont stocké les photos à transformer (chemin absolu, /home/utilisateur/photos/a_transformer par exemple)[/li]
[li]répertoire où seront stocké les photos transformées (chemin absolu, /home/utilisateur/photos/faites par exemple)[/li]
[li]le préfixe pour les miniatures, TN- par exemple pour piwigo[/li]
[li]la résolution souhaitée pour le redimensionnement, en ne précisant que la taille la plus grande, la résolution exacte sera calculée à partir de la géométrie réelle; pour redimensionner en 1024x768 ou 768x1024 utilisez 1024[/li]
[li]la résolution souhaitée pour le redimensionnement de la miniature, en ne précisant que la taille la plus grande, la résolution exacte sera calculée à partir de la géométrie réelle; pour redimensionner en 134x102 ou 102x134 utilisez 134[/li][/ul]

Soit :

$ python redim_photos.py /home/utilisateur/photos/a_transformer /home/utilisateur/photos/faites TN- 1024 134

Voici ce que ça donne sans arguments :

$ python redim_photos.py Utilisation du paramétrage par défaut Répertoire à traiter : /home/sebastien/src/outils-seb/photo/a_transformer Répertoire de sortie : /home/sebastien/src/outils-seb/photo/fait Préfixe pour les miniatures : TN- Résolution : 1024 (134 pour les miniatures) OK : traitement du fichier portrait.jpg portrait.jpg est en portrait, redimensionnement en 768x1024 et 101x134 OK : traitement du fichier dia201101-024.jpg dia201101-024.jpg est en paysage, redimensionnement en 1024x663 et 134x87 ATTENTION : le fichier Sélection_001.png n'est pas un fichier jpeg, il sera ignoré OK : traitement du fichier Nation-sans_iptc.jpg Nation-sans_iptc.jpg est en paysage, redimensionnement en 1024x768 et 134x101 OK : traitement du fichier Nation-iptc.jpg Nation-iptc.jpg est en paysage, redimensionnement en 1024x768 et 134x101 ATTENTION : le fichier mon_fichier.pdf n'est pas un fichier jpeg, il sera ignoré

Si on omet un paramètre, ça donne :

[code]$ python redim_photos.py /home/sebastien/src/outils-seb/photo/a_transformer /home/sebastien/src/outils-seb/photo/fait TN- 1024
Vous tentez d’utiliser ce programme avec des arguments, mais vous n’avez pas fourni les 5 arguments nécessaires.
Si vous lancez ce programme sans arguments, il utilisera le paramétrage par défaut à savoir :
Répertoire à traiter : /home/sebastien/src/outils-seb/photo/a_transformer
Répertoire de sortie : /home/sebastien/src/outils-seb/photo/fait
Préfixe pour les miniatures : TN-
Résolution : 1024 (134 pour les miniatures)
Les paramètres à utiliser sont :

  • répertoire où sont stocké les photos à transformer (chemin absolu, /home/utilisateur/photos/a_transformer par exemple)
  • répertoire où seront stocké les photos transformées (chemin absolu, /home/utilisateur/photos/faites par exemple)
  • le préfixe pour les miniatures, TN- par exemple pour piwigo
  • la résolution souhaitée pour le redimensionnement, en ne précisant que la taille la plus grande, la résolution exacte sera calculée à partir de la géométrie réelle; pour redimensionner en 1024x768 ou 768x1024 utilisez 1024
  • la résolution souhaitée pour le redimensionnement de la miniature, en ne précisant que la taille la plus grande, la résolution exacte sera calculée à partir de la géométrie réelle; pour redimensionner en 134x102 ou 102x134 utilisez 134
    Exemple : python redim_photos.py /home/utilisateur/photos/a_transformer /home/utilisateur/photos/faites TN- 1024 134[/code]

C’est un premier jet, et c’est le premier programme que je publie, les conseils/critiques/remarques sont les bienvenues.

Je ne vérifie pas les arguments, c’est en projet pour la prochaine version.

Je le distribue selon la licence GPLv3, à utiliser à vos risques et périls :mrgreen:

Je reste à disposition pour tout complément d’information, clarification de mon exposé, … dans la mesure de ma disponibilité qui n’est pas très grande.

Usti

PS1 : je n’ai pas (encore) d’appareil photo numérique performant, aussi mon flux de production est assez simple :
[ul][li]photo prise sur le compact[/li]
[li]copie du contenu de la carte mémoire sur un répertoire de mon ordinateur (lecteur de carte interne au portable ou externe sur ma tour)[/li]
[li]tri des photos[/li]
[li]renommage de l’extension de JPG en jpg avec pyrenamer[/li]
[li]ajout des étiquettes et des coordonnées GPS dans digikam[/li]
[li]tournage des photos en portait dans digikam[/li]
[li]retouche des yeux rouges dans digikam[/li]
[li]redimensionnement avec mon programme[/li]
[li]copie par ssh sur ma galerie piwigo[/li]
[li]archivage sur ma tour + sauvegarde par Crashplan[/li][/ul]

Je n’ai fait que lire succinctement le prog, mais le premier avantage que j’y vois c’est qu’il est parfaitement “expliqué”. Bravo :023

J’étais en train de modifier un script qui fait la même chose, mais basé sur PIL.
Je voulais utiliser les possibilités de parallélisation.

Je reprend le tien. Je posterai probablement le résultat ici.
Merci pour cet outil :slightly_smiling:

Mon objectif est légèrement différent. J’archive les photos persos. Mais je les consulte sur des appareils qui n’ont pas tous la même résolution (TV, ordinateur, smartphone, ou même console de jeu portable). Je cherche à faire un truc du genre “export.py --device”. Un serveur s’occupe de récupérer les photos, les redimensionne et les transfere sur le périphérique cible.

Ce script Python sera porté en JS (avenir moyen terme).