Accueil > Shell > Create albums web site

Create albums web site

28/01/2009

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

Shell

Les commentaires sont fermés.