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.