Magazine Internet

Imagemagick et Zenphoto pour votre galerie photo - script et envoi par FTP (5)

Publié le 11 juillet 2008 par Gnomeinwonderland

Dernier billet sur ce sujet. Le script complet de traitement automatique de photos et sa mise en place, puis les dernières opérations avec Zenphoto pour l'intégration à la galerie... en fournissant un effort minimum. Voir le premier billet | voir le billet précédent.

Création du fichier de script

Créez votre fichier qui contiendra le script complet. Assurez-vous qu'il possède bien les droits en execution. Dans le doute, faites un

chmod +x <chemin de votre fichier>
Copier le script ci-dessous, puis éditez les valeurs des VARIABLES comme les commentaires (lignes précédées d'un "#") l'indiquent, en fonction de vos souhaits et de l'emplacement de vos fichiers de photos par exemple. Une fois ces variables renseignées, il n'y a presque plus rien à faire.
On aperçoit un élément supplémentaire par rapport aux billets précédents : l'envoi par FTP. Mais d'abord place au script... n'oubliez pas de lire les commentaires qui le suivront...
#! /bin/bash
# applique un traitement à des photos puis les envoie à Zenphoto par FTP
########## VARIABLES ##########
# répertoire qui contiendra les images après-traitement
DESTINATION="/home/alexis/Bureau/photos"
# dimensions maximum : la taille des "grandes photos"
HRESIZE=595
VRESIZE=446
# chemin des masques graphiques
MASKpaysage="<chemin vers le fichier de masque paysage>"
MASKportrait="<chemin vers le fichier de masque portrait>"
# fichier temporaires [ces valeurs peuvent rester inchangées]
TEMPJPG="$DESTINATION/tmp.jpg"
TEMPTXT="$DESTINATION/tmp.txt"
# paramètres FTP pour l'accès à votre Zenphoto
FTPHOST="<hôte/serveur FTP>"
FTPUSER="<login>"
FTPPASS="<password>"
FTPDIR="<chemin vers votre répertoire des albums ou sous-album de zenphoto>"
########## FIN VARIABLES ##########
mkdir -p $DESTINATION
########## FONCTION ##########
function EXIF-ORIENT() {
   # vérification de l'orientation de la photo selon les données EXIF
   # fixe dans $TEMPTXT la valeur de la rotation à effectuer
   FILE=$1
   TEMPTXT=$2
   echo "$FILE..."
   #typeset -i ORIENT=$(identify -format "%[EXIF:Orientation]" $FILE)
   typeset -i ORIENT=$(identify -format "%[exif:*]" $FILE |grep Orientation |cut -c 18-21)
   if [ $ORIENT -ne 1 ]
   then
      if [ $ORIENT -eq 8 ]
      then
         OPARAM=270
         elif [ $ORIENT -eq 6 ]
      then
         OPARAM=90
         fi
   else
      OPARAM=0
     fi
   echo $OPARAM > $TEMPTXT
}
########## FIN FONCTION ##########
   echo "Nom à donner au répertoire de la galerie photo ?"
   read DIRORIGNAME
   NEWDIRNAME=$DIRORIGNAME
   echo $NEWDIRNAME
########## TRAITEMENTS ##########
   for FILE in $(ls)
   do
      EXIF-ORIENT $FILE $TEMPTXT
      typeset -i ROTATION=$(cat $TEMPTXT)
      if [ $ROTATION = 0 ]
      then
         convert $FILE -resize $HRESIZEx$VRESIZE -sharpen 1 -format jpg -quality 90 -rotate $OPARAM $TEMPJPG
         composite -compose src-in -dissolve 40 -format jpg -quality 90 $MASKpaysage $TEMPJPG $DESTINATION/$FILE
      elif [ $ROTATION = 270 ]
      then
         convert $FILE -resize $HRESIZEx$VRESIZE -sharpen 1 -format jpg -quality 90 -rotate $OPARAM $TEMPJPG
         composite -compose src-in -dissolve 40 -format jpg -quality 90 $MASKportrait $TEMPJPG $DESTINATION/$FILE
      elif [ $ROTATION = 90 ]
      then
         convert $FILE -resize $HRESIZEx$VRESIZE -sharpen 1 -format jpg -quality 90 -rotate $OPARAM $TEMPJPG
         composite -compose src-in -dissolve 40 -format jpg -quality 90 $MASKportrait $TEMPJPG $DESTINATION/$FILE
      fi
   done
########## FIN DES TRAITEMENTS ##########
   # on vérifie les photos une fois traitées
   gqview $DESTINATION
   # on fait le nettoyage du répertoire d'upload
   rm -f $TEMPJPG
   rm -f $TEMPTXT
########## ENVOI PAR FTP ##########
   # session FTP pour l'envoi des images sur la galerie photo
   ftp -pinv <<-EOF
   open $FTPHOST
   user $FTPUSER $FTPPASS
   cd $FTPDIR
   mkdir $NEWDIRNAME
   cd $NEWDIRNAME
   bin
   mput *
   quit
   EOF
########## FIN ENVOI PAR FTP ##########  
 

Les commentaires

Nouveau répertoire

Ligne 62 à 65, on entre au clavier le nom du répertoire qui sera créé dans Zenphoto et où seront placées les photos.
Attention : ce n'est pas débuggé, et il n'y a pas de traitement pour rendre le nom de répertoire "informatiquement" valide.
Vois êtes donc invité à n'utiliser pour ce nom de répertoire que des caractères ASCII standards et à éviter comme la peste les caractères accentués et spéciaux, puis à vous limiter aussi aux signes "-" et "_" en remplacement des <espaces>.
Il y a quelques temps j'avais fais un script basé sur la commande sed et qui corrige l'essentiel des erreurs pouvant être faites à ce niveau là. A bon entendeur...  ;-)

L'envoi par lot en FTP

l'astuce présentée dans le script est archi connue pour peu que l'on se soit intéressé à la problématique d'envoi de fichiers en nombre par FTP. En fait, la commande

ftp -pinv <<-EOF

signifie que l'on executera toutes les commandes en vocabulaire FTP qui suivent jusqu'à ce qu'on trouve sur notre chemin la suite de caractères "EOF". Rien de compliqué.
Pour les options de la commande ftp (-pinv), je vous... recommande la page de man correspondante  :-D

Juste un mot sur l'option -p (connexion en mode FTP passif) : quand j'ai fait ce script, j'utilisais la commande ftp -inv, sans connexion FTP passive. A l'époque, j'étais chez FREE. Depuis que je suis passé chez NEUF, j'ai dû intégrer à ma commande l'option -p. Il est donc possible que vous ayez à faire l'essai de votre côté...

Lancement du script et finalisation avec Zenphoto

Ouvrez maintenant un terminal, puis executez votre script (genre "~$ <chemin vers mon script>" ou "~$ .<mon script>" si vous êtes dans le même répertoire).
On vous demande tout d'abord le nom du répertoire dans la galerie photo, puis après, sous vos yeux, le terminal affiche les traitements qu'il est en train de produire. A la fin de ceux-ci, gqview nous permet de voir les photos finales, pour vérifier. Puis quand on ferme gqview,  il y a connexion à votre hébergement web en FTP, on se place dans la bon répertoire principal, puis on envoie toutes les photos traitées dedans.
...Il ne reste plus à utiliser votre navigateur favori et vous rendre sur votre Zenphoto. Dans mon exemple, avant l'execution du script, ça donne ceci :

Après execution du script, ça donne ceci :

On remarque en haut à gauche un nouvel album. Celui-ci porte le nom que l'on a donné à notre répertoire, au début de l'execution de notre script.
Il ne reste plus qu'à se connecter à l'interface d'administration de Zenphoto et à changer les propriétés de ce nouvel album : son nom "humain", sa date, sa description, ses tags, l'attribution d'une vignette représentative, et que sais-je encore...
Ce billet va en peu vite en besogne et n'explique pas forcément l'intérêt de l'envoi en masse de photos par FTP. Imaginez simplement que vous ayez 30 photos à placer dans un album : à chaque fois il faut aller chercher le fichier sur votre disque dur, cliquer au bon endroit après avoir utilisé l'ascenseur... au bout de 5 ou 6 photos, on devient rapidement fou, et intégrer des photos en grand nombre dans une galerie en ligne relève du cauchemard en terme de perte de temps...

Cette solution est à la fois rapide et efficace, et supprime quelques obstacles à l'usage d'une galerie photo en ligne, dont Zenphoto est un (très) digne représentant. Et par la même occasion, elle nous fourni à nous, utilisateurs de Linux, les moyens de nous passer de Photoshop, car le traitement graphique par lot sous Linux ça existe bel et bien. Et c'est incroyablement plus rapide que Photoshop... Pour réaliser les traitements graphiques, même automatisés, ce logiciel a besoin de nous montrer les fichiers et les traitements dans des fenêtres : pour quoi faire ??? Ca consomme du temps, des ressources système, et... surtout c'est inutile. Le pack ImageMagick, lui, est composé de tout petits programmes, n'affiche rien, mais est fait pour des traitements par lot et est ultra rapide. En plus d'être économe en temps-processeur.




Retour à La Une de Logo Paperblog

A propos de l’auteur


Gnomeinwonderland 6 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog