Create albums web site
28/01/2009
Commentaires fermés
#! /bin/sh
# Version 1.0
# Nom des fichiers template
TEMPLATE_PHOTO="template.photo.xsp";
TEMPLATE_INDEX="template.index.xsp";
TEMPLATE_ALBUMS="template.albums.xsp";
# Taille des images
THUMB_MAX=102
IMAGE_MAX=512
#
NB_THUMB_PER_LINE=5
# Supression du fichier de log
if [ -f warning.log ]; then date=`date '+%T-%r'`; mv warning.log warning.log.$date; fi
# Methode de recuperation des informations de l'image
# @param $1 Nom de l'image
getImageHeight() {
identify $1 | awk '{ print $3 }' | awk -F"+" '{ print $1 }' | awk -F"x" '{ print $2 }';
}
# Methode de recuperation des informations de l'image
# @param $1 Nom de l'image
getImageWidth() {
identify $1 | awk '{ print $3 }' | awk -F"x" '{ print $1 }';
}
# Methode de calcul du pourcentage de reduction ? appliquer pour obtenir une image ? la taille donn??e
# @param $1 Nom de l'image
# @param $2 Taille ? atteindre
getPourcentage() {
if [ "$1" != "" ] && [ "$2" != "" ]; then
# Recup??ration de la taille de l'image
WIDTH=`getImageWidth $1`;
HEIGHT=`getImageHeight $1`;
# Recup??ration du cote le plus grand
if [ `expr $WIDTH \> $HEIGHT` = 1 ]; then SIZE="$WIDTH"; else SIZE=$HEIGHT; fi
# Calcul du pourcentage
POUR=`expr $2 \* 100`;
POUR=`expr $POUR / $SIZE`;
# Recuperation de ce qu'il y a apres la virgule
POUR1=`expr $2 \* 10000`;
POUR1=`expr $POUR1 / $SIZE`;
POUR2=`expr $2 \* 100`;
POUR2=`expr $POUR2 / $SIZE`;
POUR2=`expr $POUR2 \* 100`;
DIFF=`expr $POUR1 - $POUR2`;
# Si le reste est superieur ? 50 on arondie ? la dixaine superieure
if [ `expr $DIFF \> 50` = 1 ]; then POUR=`expr $POUR + 1`; fi
# Affichage du resultat
echo $POUR;
fi
}
# Methode de retouche des images
# @param $1 Nom du template ? utiliser
# @param $2 Nombre d'image ? traiter
# @param $3 Nom du repertoire contenant les images (JPEG)
addImagesAlbum() {
# Get user parameters
FOLDER=$1;
ALBUM=$2;
OFFSET=$3;
# Initialize variables
c=1;
# Verify parameters
if [ "$1" != "" ] && [ "$2" != "" ]; then
if [ -d $FOLDER ]; then
if [ ! -d $ALBUM ]; then
# Create Album folder
mkdir $ALBUM;
mkdir $ALBUM/photos;
mkdir $ALBUM/thumb;
# Get offset (if set)
if [ "$3" != "" ]; then c=$OFFSET; fi
# Manage all JPEG images
for i in `find $FOLDER -iname "*.jpg"`;
do
if [ -f $i ]; then
# Format image number
if [ `expr $c \< 10` = 1 ]; then c="0$c"; fi
printf "\r Photo n??°${c}";
# Retouche de l'image pour obtenir la taille souhait??e
#getPourcentage $i $IMAGE_MAX
#echo "Press ENTER to continue"
#read toto;
POUR=`getPourcentage $i $IMAGE_MAX`;
convert -sample `echo ${POUR}%x${POUR}%` "$i" "$ALBUM/photos/${c}.jpg";
# Making Thumbnail
POUR=`getPourcentage "$ALBUM/photos/${c}.jpg" $THUMB_MAX`;
convert -sample `echo ${POUR}%x${POUR}%` "$ALBUM/photos/${c}.jpg" "$ALBUM/thumb/${c}.jpg";
# Count image number
c=`expr $c + 1`;
else
WARNING=true;
printf "\r WARNING: File $i does not exist !";
echo "WARNING: File $i does not exist !" >> warning.log
fi
done
# Saving information about album
NB_IMG=`expr $c - 1`
echo "ALBUM=$ALBUM" > $ALBUM/$ALBUM.info
echo "NB_IMG=$NB_IMG" >> $ALBUM/$ALBUM.info
printf ".\n";
else
echo "Folder '$ALBUM' already exist !!";
exit;
fi
else
echo "Image folder '$FOLDER' does not exist !!";
exit;
fi
else
echo "Usage: $0 [Image Folder] [Album Name] [Offset]"
exit;
fi
}
# Methode de cr??ation des pages pour visualiser chaques images
# @param $1 Nom du template ? utiliser
# @param $2 Nombre d'image ? traiter
# @param $3 Nom du repertoire contenant les images (JPEG)
makePages() {
# Verify parameters
if [ -f $1 ] && [ "$2" != "" ] && [ -d $3 ]; then
TEMPLATE=$1
NB_IMG=$2
ALBUM=$3
NUM_IMG=1
if [ -f $TEMPLATE ]; then
while [ `expr $NUM_IMG \<= $NB_IMG` = 1 ]; do
PREV=`expr $NUM_IMG - 1`;
if [ `expr $NUM_IMG \<= 1` = 1 ]; then PREV=$NB_IMG; fi;
NEXT=`expr $NUM_IMG + 1`;
if [ `expr $NUM_IMG \>= $NB_IMG` = 1 ]; then NEXT=1; fi;
if [ `expr $NEXT \< 10` = 1 ]; then NEXT="0$NEXT"; fi
if [ `expr $PREV \< 10` = 1 ]; then PREV="0$PREV"; fi
if [ `expr $NUM_IMG \< 10` = 1 ]; then NUM_IMG="0$NUM_IMG"; fi
printf "\r Page n??°${NUM_IMG}/${NB_IMG}"
#printf " (prev=$PREV, next=$NEXT)"
cat $TEMPLATE | \
sed "s#ALBUM#<a href='index.html'>$ALBUM</a>#" | \
sed "s#CLASSEMENT#${NUM_IMG}/${NB_IMG}#" | \
sed "s#PREVIMAGE#photo-${PREV}.html#g" | \
sed "s#NEXTIMAGE#photo-${NEXT}.html#g" | \
sed "s#IMAGE#photos/${NUM_IMG}.jpg#g" > $ALBUM/photo-${NUM_IMG}.xsp;
NUM_IMG=`expr $NUM_IMG + 1`;
done
printf ".\n";
else
printf "Template page '$TEMPLATE' dos not exist !!\n";
fi
else
echo "Usage: $0 [Template] [nb images] [Album]"
fi
}
# Methode de cr??ation de l'index avec toutes les images en miniatures
# @param $1 Nom du template ? utiliser
# @param $2 Nombre d'image ? traiter
# @param $3 Nom du repertoire contenant les images (JPEG)
makeImagesIndex() {
# Template pour les miniatures
IMAGE="<td><div width='"`expr $THUMB_MAX + 5`"' height='"`expr $THUMB_MAX + 5`"'><a href='photo-NUM_IMG.html'><img src='thumb/NUM_IMG.jpg' border='0' class='chloe'/></a></div></td>";
NUM_IMG=1;
NUM_COL_IN_LINE=1;
# Verify parameters
if [ -f $1 ] && [ "$2" != "" ] && [ -d $3 ]; then
TEMPLATE=$1;
NB_IMG=$2;
ALBUM=$3;
IMAGES="<table border='0'>";
#echo "$TEMPLATE $NB_IMG $ALBUM";
if [ -f $TEMPLATE ]; then
while [ `expr $NUM_IMG \<= $NB_IMG` = 1 ]; do
if [ "$NUM_COL_IN_LINE" == "1" ]; then
IMAGES="$IMAGES <tr>";
fi
if [ `expr $NUM_IMG \< 10` = 1 ]; then NUM_IMG="0$NUM_IMG"; fi
IMAGES=`echo $IMAGES; echo $IMAGE | sed "s/NUM_IMG/$NUM_IMG/g"`;
#CONTENT=`echo $CONTENT | sed "s/\(^.*LINE_CONTENT.*$\)/$IMAGE\n\1\n/g"`;
printf "\r Add image n??°${NUM_IMG}/${NB_IMG}"
# Increment counters
NUM_IMG=`expr $NUM_IMG + 1`;
NUM_COL_IN_LINE=`expr $NUM_COL_IN_LINE + 1`;
# Close line if needed
if [ "$NUM_COL_IN_LINE" == "$NB_THUMB_PER_LINE" ]; then
NUM_COL_IN_LINE=1;
IMAGES="$IMAGES </tr>";
fi
done
# Close line if not already done
if [ "$NUM_COL_IN_LINE" != "$NB_THUMB_PER_LINE" ]; then IMAGES="$IMAGES </tr>"; fi
# Close table
IMAGES="$IMAGES </table>";
# Make index
cat $TEMPLATE | sed "s#ALBUM_NAME#$ALBUM#g" | sed "s#\(^.*LINE_CONTENT.*$\)#`echo $IMAGES`#g" > $ALBUM/index.xsp
printf ".\n";
else
printf "Template page '$TEMPLATE' dos not exist !!\n";
fi
else
echo "Usage: $0 [Template] [nb images] [Album]"
fi
}
# Methode de cr??ation de l'index de tous les albums
# @param $1 Nom du template ? utiliser
# @param $2 Nombre d'image ? traiter
# @param $3 Nom du repertoire contenant les images (JPEG)
makeAlbumsIndex() {
# Verify parameters
if [ -f $1 ] && [ "$2" != "" ] && [ -d $3 ]; then
TEMPLATE=$1;
NB_IMG=$2;
ALBUM=$3;
#echo "$TEMPLATE $NB_IMG $ALBUM";
if [ -f index.xsp ]; then
cat index.xsp | sed "s#ALBUM_NAME#Liste des Albums#g" | sed "s#\(^.*LINE_CONTENT.*$\)#<li><a href='$ALBUM/index.html'>$ALBUM</a><br/></li>\n\1\n#g" > index.new
mv index.new index.xsp;
if [ "$WARNING" != "true" ]; then
printf "Album '$ALBUM' succesfully added.\n";
else
printf "Album '$ALBUM' added with warnings.\nSee warnings.log for more details.\n";
fi
elif [ -f $TEMPLATE ]; then
cat $TEMPLATE | sed "s#ALBUM_NAME#Liste des Albums#g" | sed "s#\(^.*LINE_CONTENT.*$\)#<h1>Liste des albums :</h1>\n<br/>\n<ul>\n<li><a href='$ALBUM/index.html'>$ALBUM</a><br/></li>\n\1\n</ul>#g" > index.xsp
if [ "$WARNING" != "true" ]; then
printf "Album '$ALBUM' succesfully added.\n";
else
printf "Album '$ALBUM' added with warnings.\nSee warnings.log for more details.\n";
fi
else
printf "Template page '$TEMPLATE' dos not exist !!\n";
fi
else
echo "Usage: $0 [Template] [nb images] [Album]"
fi
}
# Lancement de toutes le methode dans le bon ordre ...
addImagesAlbum $1 $2 $3;
makePages $TEMPLATE_PHOTO $NB_IMG $ALBUM;
makeImagesIndex $TEMPLATE_INDEX $NB_IMG $ALBUM;
makeAlbumsIndex $TEMPLATE_ALBUMS $NB_IMG $ALBUM;