Bonjour,
je vous propose de vous faire partager le script que j'ai écrit pour gérer de A à Z la création d'une galerie.
Je me suis inspiré du script Rep2Thumb de ce forum, en en gardant qu'un petit bout au final, mais il m'a donné les idées, merci Gothico ;)
Bien sûr, il correspond à mes besoins persos et donc ne vous sera peut-être pas utile, mais il pourra vous aider pour en faire un à vous.
Voici d'abord comment je suis organisé pour gérer mes galeries :
Je gère des galeries de photos de mon club de volley.
Chaque galerie a pour nom la date et le nom de l'évènement "20060102_tournoi_paris", il peut y avoir ou non des vidéos, et j'archive toutes les galeries sous forme de zip téléchargeable depuis PWG (j'ai ajouté une icone disquette le permettant).
Je suis chez Free, donc les vidéos ne sont pas synchronisables, j'utilise donc une page videos.html qui contient les liens vers ces vidéos (qui sont dans le meme répertoire que la galerie), pour contourner ce problème provisoirement.
J'ai 3 catégories de galeries : Matchs, Tournois, En dehors du terrain, donc pour les liens des videos il faut choisir une des trois catégories.
Quand le script est terminé, il suffit d'uploader le répertoire créé dans le répertoire courant vers le ftp de son site.
Idem pour l'archive zip.
Par exemple, j'ai :
galleries/
> 20060102_tournois_paris/
>> thumbnail/
TN-DSCxxx.jpg
TN-DSCyyy.jpg
>> DSCxxx.jpg
>> DSCyyy.jpg
>> myvideo.avi
>> videos.html
et dans un repertoire en dehors de phpwebgallery :
archives/
> 20060102_tournois_paris.zip
Mon script effectue les taches suivantes, chronologiquement :
- Création du répetoire de la galerie (nom identique au répertoire actuel)
- Renommage des fichiers (enleve caractères spéciaux)
- Création des miniatures (dans /thumbnail, taille modifiable)
- Création des images affichées dans la galerie (taille modifiable, avec ou sans données EXIF)
- Resize les photos originales pour l'archivage (taille modifiable, avec ou sans données EXIF)
- Création d'une archive zip de tous les fichiers de la galerie (du nom de la galerie)
- Si présence de vidéos (avi,mpg,wmv), création d'une page html de liens pour ces vidéos
- Copie des fichiers vidéos dans le répertoire de la galerie créée
Voici ce que donne l'exécution du script :
Un mode intéractif permet de décider de l'exécution ou non de chaque étape, il suffit de passer le paramètre -i au lancement du script. On obtient alors, par exemple :
Voici le script en question :
#!/bin/bash ####################################################################### # EasyGallery # Script de création de galerie pour PhpWebGallery # par wiloo # # Création de miniatures # Création de photos redimensionnées # Archivage de la galerie au format ZIP # Création de page de liens pour vidéos (contournement problème Free) # # Mode intéractif : paramètre "-i" # # Inspiré du script Rep2Thumb de Gothico (c) ######################################################################## ## CONFIGURATION ########################################### # Nom de ce script SCRIPT="gallery.sh" # Chemin complet de la galerie à créer GALLERY_PATH="`pwd`" # Nom de la galerie # (nom du répertoire contenant les photos par défaut) GALLERY_NAME="`basename $GALLERY_PATH`" # URL du répertoire des galeries dans PWG URL_GALLERY_DIR="http://monsite.free.fr/pwg/galleries" # URL du répertoire des archives zip URL_ARCH_DIR="http://monsite.free.fr/archives" # Nom du répertoire à créer pour les miniatures # ("thumbnail" par défaut dans phpwebgallery) THUMB_DIR="thumbnail" # Préfixe des miniatures THUMB_PREFIX="TN-" # L'extension des images (indépendant de la casse) IMG_TYPE="jpg" ## L pour Largeur ## H pour Hauteur # Taille des photos miniatures THUMB_L="128" THUMB_H="96" # Taille des photos à afficher dans phpwebgallery PICT_L="800" PICT_H="600" # Taille des photos à archiver ARCH_L="1024" ARCH_H="768" # Garder les données EXIF ou non # Avec EXIF => "" # Sans EXIF => "-strip" EXIF="-strip" # Mode intéractif désactivé par défaut # Utiliser l'argument -i au lancement du script pour l'activer INTERACT="false" ############################################################ # Vérification du mode intéractif if ( [ -n "$1" ] && [ "$1" = "-i" ] ) then INTERACT="true" fi # Création du répertoire echo -e "\033[1;31m## Création du répertoire de la galerie...\033[0;m" mkdir $GALLERY_PATH/$GALLERY_NAME 2> err_create_dir # Vérification de présence d'erreur, proposition d'arreter le script si erreur if [ -s err_create_dir ] then rm -f err_create_dir echo -e "\033[1;34mERREUR\033[0;m : Le repertoire existe deja." echo "Si les noms des photos sont différents, les photos seront simplement ajoutées à cette galerie." while ([ -z $continu ] || ([ "$continu" != "o" ] && [ "$continu" != "y" ] && [ "$continu" != "n" ])) do echo -n "Souhaitez-vous continuer? (o/n) : " read continu done else rm -f err_create_dir fi # Arret du script si réponse = non if [ "$continu" = "n" ] then echo "Arret du script volontaire." exit fi # Renommage des fichiers si nécessaire (enlève les caractères spéciaux) echo -e "\033[1;31m## Renommage des fichiers si nécessaire...\033[0;m" ls -b | while read i ; do mv -f "$i" `echo "$i" | sed -e s/\ /_/g | sed -e s/\'//g | sed -e s/\"//g | sed -e s/\,//g | sed -e s/\;//g | sed -e s/§//g | sed -e s/!//g | sed -e s/ç/c/g | sed -e s/ù/u/g | sed -e s/ë/e/g | sed -e s/ä/a/g | sed -e s/ï/i/g | sed -e s/î/i/g | sed -e s/ö/o/g | sed -e s/ô/o/g | sed -e s/ü/u/g | sed -e s/û/u/g | sed -e s/é/e/g | sed -e s/è/e/g | sed -e s/~//g | sed -e s/²/2/g | sed -e s/\&//g | sed -e s/\#//g | sed -e s/\(//g | sed -e s/\)//g | sed -e s/ê/e/g | sed -e s/°//g | sed -e s/=//g | sed -e s/\{//g | sed -e s/\}//g | sed -e s/+//g` ; done &> /dev/null # Sélection de toutes les photos de la galerie all_pict=`find . -maxdepth 1 -iname "*.$IMG_TYPE"` # Création des miniatures dans le répertoire configuré if [ "$INTERACT" = "true" ] then while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Voulez-vous générer les miniatures ? (o/n) : " read choice done fi if ( [ "$choice" = "o" ] || [ "$INTERACT" = "false" ] ) then echo -e "\033[1;31m## Création des miniatures...\033[0;m" mkdir $GALLERY_PATH/$GALLERY_NAME/$THUMB_DIR for i in $all_pict; do L="`identify $i | cut -d\ -f3 | cut -dx -f1`" H="`identify $i | cut -d\ -f3 | cut -dx -f2`" if [ $L -gt $H ] then THUMB_SIZE="${THUMB_L}x${THUMB_H}" else THUMB_SIZE="${THUMB_H}x${THUMB_L}" fi echo "Création de ${THUMB_PREFIX}`basename $i` Taille : $THUMB_SIZE L:$L H:$H" convert -thumbnail $THUMB_SIZE -density 72 $i $GALLERY_PATH/$GALLERY_NAME/$THUMB_DIR/$THUMB_PREFIX`basename $i`; done echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Traitement des miniatures effectué avec succès\033[0;m" echo "" fi choice="x" # Création des images affichées dans la galerie if [ "$INTERACT" = "true" ] then while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Voulez-vous générer les images affichées dans la galerie ? (o/n) : " read choice done fi if ( [ "$choice" = "o" ] || [ "$INTERACT" = "false" ] ) then echo -e "\033[1;31m## Création des photos pour la galerie...\033[0;m" for i in $all_pict; do L="`identify $i | cut -d\ -f3 | cut -dx -f1`" H="`identify $i | cut -d\ -f3 | cut -dx -f2`" if [ $L -gt $H ] then PICT_SIZE="${PICT_L}x${PICT_H}" else PICT_SIZE="${PICT_H}x${PICT_L}" fi echo "Création de `basename $i` Taille : $PICT_SIZE L:$L H:$H" convert -density 72 $EXIF -resize $PICT_SIZE $i $GALLERY_PATH/$GALLERY_NAME/$i; done echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Traitement des photos effectué avec succès\033[0;m" echo "" fi choice="x" # Redimensionnement des images originales pour archivage if [ "$INTERACT" = "true" ] then while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Voulez-vous modifier les images originales pour l'archivage ? (o/n) : " read choice done fi if ( [ "$choice" = "o" ] || [ "$INTERACT" = "false" ] ) then echo -e "\033[1;31m## Redimensionnement des photos originales pour archivage...\033[0;m" for i in $all_pict; do L="`identify $i | cut -d\ -f3 | cut -dx -f1`" H="`identify $i | cut -d\ -f3 | cut -dx -f2`" if [ $L -gt $H ] then ARCH_SIZE="${ARCH_L}x${ARCH_H}" else ARCH_SIZE="${ARCH_H}x${ARCH_L}" fi echo "Modification de `basename $i`" convert -density 72 $EXIF -resize $ARCH_SIZE $i $i; done echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Traitement des photos d'archive effectué avec succès\033[0;m" echo "" fi choice="x" # Archivage des photos if [ "$INTERACT" = "true" ] then while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Voulez-vous archiver la galerie ? (o/n) : " read choice done fi if ( [ "$choice" = "o" ] || [ "$INTERACT" = "false" ] ) then echo -e "\033[1;31m## Archivage de la galerie...\033[0;m" zip -D9 $GALLERY_NAME.zip * -x $SCRIPT echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Archivage effectué avec succès\033[0;m" echo -n "Taille de l'archive : " du -h $GALLERY_PATH/$GALLERY_NAME.zip echo "" fi choice="x" # Rétablissement des droits pour l'affichage au naviguateur # (facultatif : dépend de votre configuration linux, mais cela est préconisé dans les instructions PWG) #chmod -R 777 * # Recherche des fichiers video (avi, mpg, wmv) all_video="`find . -maxdepth 1 -regex ".*\(avi\|AVI\|mpg\|MPG\|wmv\|WMV\)$"`" if [ -n "$all_video" ] then while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Il y a des vidéos dans ce répertoire, voulez-vous générer une page HTML de liens vers ces vidéos ? (o/n) : " read choice done if [ "$choice" = "o" ] then echo "Dans quelle catégorie se place la galerie ? (1/2/3) : " echo "1) Matchs" echo "2) Tournois" echo "3) En dehors du terrain" echo -n "Votre choix : " read cat case "$cat" in 1) echo -e "Catégorie choisie : \033[1;32mMatchs\033[0;m" REP="Matchs" ;; 2) echo -e "Catégorie choisie : \033[1;32mTournois\033[0;m" REP="Tournois" ;; 3) echo -e "Catégorie choisie : \033[1;32mEn dehors du terrain\033[0;m" REP="En_dehors_du_terrain" ;; *) echo "Choix incorrect" esac echo "" echo -e "\033[1;31m## Création de la page HMTL...\033[0;m" echo "<HTML><BODY>Vidéos de la galerie $GALLERY_NAME<br><br>" > videos.html for i in $all_video; do echo "Création du lien pour `basename $i`" echo "<a href="$URL_GALLERY_DIR/$REP/$GALLERY_NAME/`basename $i`" target="_blank">`basename $i`</a><br><br>" >> videos.html done echo "</BODY></HTML>" >> videos.html mv videos.html $GALLERY_NAME echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Page HTML générée avec succès\033[0;m" echo "" fi choice="x" while ( [ -z $choice ] || ( [ "$choice" != "o" ] && [ "$choice" != "n" ] )) do echo -n "Voulez-vous copier les vidéos dans la galerie ? (o/n) : " read choice done fi if ( [ "$choice" = "o" ] || [ "$INTERACT" = "false" ] ) then echo -e "\033[1;31m## Copie des vidéos dans le répertoire de la galerie...\033[0;m" for i in $all_video; do cp `basename $i` $GALLERY_PATH/$GALLERY_NAME echo "Copie de `basename $i`" done echo -e "\033[1;34m[\033[1;32mOK\033[1;34m] Copie des videos effectuée avec succès\033[0;m" echo "" choice="x" fi # Messages de fin echo -e "\033[1;31mGalerie \033[1;34m$GALLERY_NAME\033[1;31m créée!\033[0;m" echo -n "Taille totale : " du -h -s $GALLERY_PATH/$GALLERY_NAME echo ""
Le fichier est là : http://wiloo1.free.fr/gallery.sh
Voila, ça me permet d'automatiser mes créations de galeries, et j'espère que ça pourra servir à certains.
Il contient peut-être des erreurs de scripting, mais c'est mon premier script en bash, soyez indulgents ! :p
Wiloo
Dernière modification par wiloo (2006-06-07 22:49:56)
Hors ligne
Très intéressant :-) Peux-tu créer une extension dans le gestionnaire d'extension ? Tu aurais une bien meilleures visibilité !
Hors ligne
Merci :)
Je ne sais pas si ça vaut le coup de le mettre dans l'extension manager, il est très ciblé sur mes besoins et peu de gens vont pouvoir l'utiliser comme ça. En plus le temps de lire mes explications ils vont s'endormir :p
Mais si tu penses que si, je le mets sans problème !
Hors ligne
Comme Rep2thumb l'a été pour toi, ton script peut servir de (bonne) base de départ pour qui voudra. Il est souvent plus simple de partir de quelque chose de déjà fait, lorsqu'il y a peu de modifs à appliquer.
Hors ligne