meillo@0: #!/bin/sh meillo@0: # meillo@6: # generates a web gallery schnalke@42: # requires: ImageMagick (mogrify) schnalke@42: # or: resize-gd meillo@0: # meillo@0: # meillo@marmaro.de meillo@25: # http://prog.marmaro.de/genwebgallery meillo@0: # meillo@0: meillo@0: meillo@15: PROGRAM=genwebgallery meillo@46: VERSION=0.8 meillo@2: meillo@6: verbose="no" meillo@6: targetDir="webgallery" meillo@6: overwrite="no" meillo@6: index="index.html" meillo@6: sizePic=800 meillo@6: sizeThumb=150 meillo@16: galleryTitle="" meillo@23: footer="" meillo@0: schnalke@42: resizer="" schnalke@42: meillo@6: meillo@0: meillo@0: meillo@14: checkCreateDir() { meillo@6: remove="no" meillo@6: if [ -e "$targetDir" ] ; then meillo@6: if [ "$overwrite" = "no" ] ; then meillo@6: echo "output directory '$targetDir' already exists." meillo@15: printf "remove it? [y/n] " meillo@6: read remove meillo@6: fi meillo@0: meillo@6: if [ "$remove" = "y" -o "$overwrite" = "yes" ] ; then meillo@6: echo "removing '$targetDir' ..." meillo@0: rm -r "$targetDir" meillo@6: if [ $? -ne 0 ] ; then meillo@6: echo "ABORT" meillo@6: exit 4 meillo@6: fi meillo@0: else meillo@6: echo "keep output directory" meillo@6: echo "ABORT" meillo@6: exit 3 meillo@0: fi meillo@0: fi meillo@6: meillo@0: mkdir -p "$targetDir" meillo@0: } meillo@0: meillo@0: meillo@0: meillo@6: meillo@14: insertHeader() { meillo@6: echo " meillo@6: meillo@6: meillo@6: meillo@0: meillo@0: $titleName meillo@6: meillo@23: meillo@0: meillo@0: meillo@0: meillo@6: " meillo@0: } meillo@0: meillo@0: meillo@6: meillo@14: insertFooter() { meillo@6: echo " meillo@0: meillo@0: meillo@0: meillo@6: " meillo@0: } meillo@0: meillo@0: meillo@6: meillo@14: log() { meillo@6: if [ $verbose = "yes" ] ; then meillo@0: echo "$1"; meillo@0: fi meillo@0: } meillo@0: meillo@0: meillo@6: schnalke@42: checkResizer() { schnalke@42: if [ `command -v mogrify` ] ; then meillo@43: log "using 'mogrify' to resize images" schnalke@42: log "`mogrify -version`" schnalke@42: resizer="mogrify" schnalke@42: elif [ `command -v resize-gd` ] ; then meillo@43: log "using 'resize-gd' to resize images" schnalke@42: log "`resize-gd --version`" schnalke@42: resizer="resize-gd" schnalke@42: else meillo@43: echo "No supported image resize program found." meillo@43: echo "Supported are:" meillo@43: echo "- 'mogrify' (from package 'imagemagick')" meillo@43: echo "- 'resize-gd'" meillo@6: echo "ABORT" meillo@0: exit 2 meillo@0: fi meillo@0: } meillo@0: meillo@0: schnalke@42: # call with: resize schnalke@42: resize() { schnalke@42: if [ "$resizer" = "mogrify" ] ; then schnalke@42: mogrify -resize "${1}x${1}" "$2" schnalke@42: elif [ "$resizer" = "resize-gd" ] ; then schnalke@42: resize-gd "$1" "$2" schnalke@42: else schnalke@42: echo "No resize program available." meillo@43: echo meillo@43: echo "It's most likely a program bug if you see this message." schnalke@42: echo "Please contact the author or maintainer (see man page)." schnalke@42: echo "ABORT" schnalke@42: exit 2 schnalke@42: fi schnalke@42: return "$?" schnalke@42: } schnalke@42: meillo@0: meillo@14: usage() { meillo@16: echo "usage: $PROGRAM [OPTIONS] PICTURES" meillo@6: exit 1 meillo@6: } meillo@0: meillo@0: meillo@6: meillo@14: help() { meillo@15: echo "$PROGRAM meillo@6: meillo@6: generates a web gallery consisting of html pages meillo@6: meillo@15: usage: $PROGRAM [OPTIONS] PICTURES meillo@6: meillo@6: options: meillo@6: --version print program version meillo@6: --help display this output meillo@6: -v be verbose ($verbose) meillo@6: -o DIR folder where generated files go to ($targetDir) meillo@6: -i FILE the name of the index file ($index) meillo@6: -t TEXT title of the gallery ($galleryTitle) meillo@23: -f TEXT footer text ($footer) meillo@15: -ps PIXELS size of the pictures ($sizePic) meillo@6: -ts PIXELS size of the thumbnails ($sizeThumb) meillo@6: --overwrite overwrite output directory ($overwrite) meillo@6: meillo@15: for more information see man page: $PROGRAM(1) meillo@6: meillo@6: author: meillo@marmaro.de meillo@23: homepage: http://prog.marmaro.de/genwebgallery meillo@6: " meillo@0: exit 0 meillo@6: } meillo@0: meillo@0: meillo@6: meillo@6: meillo@6: # option processing meillo@6: meillo@44: while [ "$#" -ge 1 ] && [ "`echo "$1" | awk '{print substr($0,1,1)}'`" = '-' ] ; do meillo@0: case $1 in meillo@0: '--version') meillo@15: echo "$PROGRAM version $VERSION" meillo@0: exit 0 meillo@0: ;; meillo@0: '--help') meillo@6: help meillo@0: ;; meillo@0: '-v' | '--verbose') meillo@6: verbose="yes" meillo@0: shift meillo@0: ;; meillo@0: '-o' | '--output') meillo@6: targetDir="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@0: '-i' | '--index') meillo@46: index="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@0: '-t' | '--title') meillo@6: galleryTitle="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@23: '-f' | '--footer') meillo@46: footer="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@0: '-ps' | '--pic-size') meillo@46: sizePic="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@0: '-ts' | '--thumb-size') meillo@46: sizeThumb="$2" meillo@0: shift meillo@0: shift meillo@0: ;; meillo@6: '--overwrite') meillo@6: overwrite="yes" meillo@6: shift meillo@6: ;; meillo@0: *) meillo@0: echo "invalid option: $1" meillo@15: echo "see: $PROGRAM --help" meillo@0: exit 1 meillo@0: esac meillo@0: meillo@0: done meillo@0: meillo@0: if [ $# -eq 0 ] ; then meillo@6: usage meillo@0: fi meillo@0: meillo@0: meillo@6: meillo@0: # verbose output meillo@6: log "verbose: $verbose" meillo@6: log meillo@6: log "output dir: $targetDir" meillo@6: log "index file: $index" meillo@6: log "gallery title: $galleryTitle" meillo@23: log "footer text: $footer" meillo@6: log "picture size: ${sizePic}px" meillo@6: log "thumbnail size: ${sizeThumb}px" meillo@6: log "overwrite output dir: $overwrite" meillo@6: log schnalke@42: checkResizer meillo@6: log meillo@0: meillo@0: meillo@6: meillo@6: # generate web gallery meillo@6: meillo@0: checkCreateDir meillo@0: meillo@6: echo `insertHeader` > "$targetDir/$index" meillo@6: if [ "$galleryTitle" != "" ] ; then meillo@6: echo "

$galleryTitle

" >> "$targetDir/$index" meillo@6: fi meillo@0: meillo@0: for i in "$@" ; do meillo@6: file="`basename $i`" meillo@0: targetFile="$targetDir/$file.htm" meillo@0: log "processing file: $file" meillo@0: meillo@24: # copy and resize pics schnalke@42: cp "$i" "$targetDir/$file" schnalke@42: resize "$sizePic" "$targetDir/$file" meillo@24: if [ $? -ne 0 ] ; then meillo@24: log " skipping" schnalke@42: rm "$targetDir/$file" meillo@24: continue meillo@24: fi schnalke@42: cp "$i" "$targetDir/_$file" schnalke@42: resize "$sizeThumb" "$targetDir/_$file" meillo@24: meillo@0: # generate pic page meillo@6: echo `insertHeader` > "$targetFile" meillo@6: if [ "$galleryTitle" != "" ] ; then meillo@6: echo "

$galleryTitle

" >> "$targetFile" meillo@6: fi meillo@6: echo "

\"$file\"

" >> "$targetFile" meillo@23: if [ "$footer" != "" ] ; then meillo@23: echo "

$footer

" >> "$targetFile" meillo@6: fi meillo@6: echo `insertFooter` >> "$targetFile" meillo@0: meillo@0: # generate content for index file meillo@0: echo " \"$file\"" >> "$targetDir/$index" meillo@0: done meillo@0: meillo@23: if [ "$footer" != "" ] ; then meillo@23: echo "

$footer

" >> "$targetDir/$index" meillo@6: fi meillo@6: echo `insertFooter` >> "$targetDir/$index"