•  » Outils
  •  » EasyGallery : script linux de création de galerie

#1 2006-06-07 19:39:51

wiloo
Membre
2006-06-02
12

EasyGallery : script linux de création de galerie

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 :
http://wiloo1.free.fr/screen_script.jpg

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 :
http://wiloo1.free.fr/script-interactif.jpg

Voici le script en question :

Code:

#!/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

#2 2006-06-08 10:05:23

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12254

Re: EasyGallery : script linux de création de galerie

Très intéressant :-) Peux-tu créer une extension dans le gestionnaire d'extension ? Tu aurais une bien meilleures visibilité !


Dernier billet du blog Piwigo.com (3 mai 2018) Nouveau formulaire d'abonnement

Hors ligne

#3 2006-06-08 14:36:09

volcom
Former Piwigo Team
2005-01-24
489

Re: EasyGallery : script linux de création de galerie

Très beau travail, avec des couleurs et tout !

Merci de le faire partager et je l'essaierai/adapterai certainement à mes besoins.

Hors ligne

#4 2006-06-08 16:48:51

wiloo
Membre
2006-06-02
12

Re: EasyGallery : script linux de création de galerie

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

#5 2006-06-08 18:37:05

mathiasm
Former Piwigo Team
2006-02-06
2692

Re: EasyGallery : script linux de création de galerie

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

#6 2006-06-08 20:35:05

volcom
Former Piwigo Team
2005-01-24
489

Re: EasyGallery : script linux de création de galerie

bien sûr que tu devrais le mettre dans l'extensions manager !  en expliquant bien ce qu'il fait, c'est nickel.

Hors ligne

#7 2006-06-08 22:42:28

wiloo
Membre
2006-06-02
12

Re: EasyGallery : script linux de création de galerie

Ok les gars, je vais l'ajouter quand j'aurai un moment :)

Hors ligne

  •  » Outils
  •  » EasyGallery : script linux de création de galerie

Pied de page des forums

Propulsé par FluxBB