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@47: sizePic="`echo "$2" | awk '{printf("%d",$0)}'`"
meillo@0: shift
meillo@0: shift
meillo@0: ;;
meillo@0: '-ts' | '--thumb-size')
meillo@47: sizeThumb="`echo "$2" | awk '{printf("%d",$0)}'`"
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@47: # skip over invalid files
meillo@47: if [ ! -f "$i" ] ; then
meillo@47: log "does not exist, or no regular file: $i"
meillo@47: log " skipping"
meillo@47: continue
meillo@47: fi
meillo@47:
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 "
" >> "$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 " " >> "$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"