genwebgallery

annotate genwebgallery @ 42:8f69055cf7ed

switched from convert to mogrify; added support for resize-gd
author schnalke@localhost.localdomain
date Mon, 23 Jun 2008 15:50:50 +0200
parents 8bc7566a9086
children b526a65d5066
rev   line source
meillo@0 1 #!/bin/sh
meillo@0 2 #
meillo@6 3 # generates a web gallery
schnalke@42 4 # requires: ImageMagick (mogrify)
schnalke@42 5 # or: resize-gd
meillo@0 6 #
meillo@0 7 # meillo@marmaro.de
meillo@25 8 # http://prog.marmaro.de/genwebgallery
meillo@0 9 #
meillo@0 10
meillo@0 11
meillo@15 12 PROGRAM=genwebgallery
meillo@36 13 VERSION=0.7
meillo@2 14
meillo@6 15 verbose="no"
meillo@6 16 targetDir="webgallery"
meillo@6 17 overwrite="no"
meillo@6 18 index="index.html"
meillo@6 19 sizePic=800
meillo@6 20 sizeThumb=150
meillo@16 21 galleryTitle=""
meillo@23 22 footer=""
meillo@0 23
schnalke@42 24 resizer=""
schnalke@42 25
meillo@6 26
meillo@0 27
meillo@0 28
meillo@14 29 checkCreateDir() {
meillo@6 30 remove="no"
meillo@6 31 if [ -e "$targetDir" ] ; then
meillo@6 32 if [ "$overwrite" = "no" ] ; then
meillo@6 33 echo "output directory '$targetDir' already exists."
meillo@15 34 printf "remove it? [y/n] "
meillo@6 35 read remove
meillo@6 36 fi
meillo@0 37
meillo@6 38 if [ "$remove" = "y" -o "$overwrite" = "yes" ] ; then
meillo@6 39 echo "removing '$targetDir' ..."
meillo@0 40 rm -r "$targetDir"
meillo@6 41 if [ $? -ne 0 ] ; then
meillo@6 42 echo "ABORT"
meillo@6 43 exit 4
meillo@6 44 fi
meillo@0 45 else
meillo@6 46 echo "keep output directory"
meillo@6 47 echo "ABORT"
meillo@6 48 exit 3
meillo@0 49 fi
meillo@0 50 fi
meillo@6 51
meillo@0 52 mkdir -p "$targetDir"
meillo@0 53 }
meillo@0 54
meillo@0 55
meillo@0 56
meillo@6 57
meillo@14 58 insertHeader() {
meillo@6 59 echo "
meillo@6 60 <?xml version=\"1.0\" encoding=\"utf-8\"?>
meillo@6 61 <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"
meillo@6 62 \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">
meillo@6 63 <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">
meillo@0 64 <head>
meillo@0 65 <title>$titleName</title>
meillo@6 66 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
meillo@23 67 <meta name=\"Generator\" content=\"genwebgallery - http://prog.marmaro.de/genwebgallery\" />
meillo@0 68 </head>
meillo@0 69 <body>
meillo@0 70
meillo@6 71 "
meillo@0 72 }
meillo@0 73
meillo@0 74
meillo@6 75
meillo@14 76 insertFooter() {
meillo@6 77 echo "
meillo@0 78
meillo@0 79 </body>
meillo@0 80 </html>
meillo@6 81 "
meillo@0 82 }
meillo@0 83
meillo@0 84
meillo@6 85
meillo@14 86 log() {
meillo@6 87 if [ $verbose = "yes" ] ; then
meillo@0 88 echo "$1";
meillo@0 89 fi
meillo@0 90 }
meillo@0 91
meillo@0 92
meillo@6 93
schnalke@42 94 checkResizer() {
schnalke@42 95 log "checking resize program installation"
schnalke@42 96 if [ `command -v mogrify` ] ; then
schnalke@42 97 log "Found 'mogrify':"
schnalke@42 98 log "`mogrify -version`"
schnalke@42 99 resizer="mogrify"
schnalke@42 100 elif [ `command -v resize-gd` ] ; then
schnalke@42 101 log "Found 'resize-gd':"
schnalke@42 102 log "`resize-gd --version`"
schnalke@42 103 resizer="resize-gd"
schnalke@42 104 else
schnalke@42 105 echo "Found neither 'mogrify' (package imagemagick) nor 'resize-gd'."
meillo@6 106 echo "ABORT"
meillo@0 107 exit 2
meillo@0 108 fi
meillo@0 109 }
meillo@0 110
meillo@0 111
schnalke@42 112 # call with: resize <size> <file>
schnalke@42 113 resize() {
schnalke@42 114 if [ "$resizer" = "mogrify" ] ; then
schnalke@42 115 mogrify -resize "${1}x${1}" "$2"
schnalke@42 116 elif [ "$resizer" = "resize-gd" ] ; then
schnalke@42 117 resize-gd "$1" "$2"
schnalke@42 118 else
schnalke@42 119 echo "No resize program available."
schnalke@42 120 echo "It's probably a program bug if you see this message."
schnalke@42 121 echo "Please contact the author or maintainer (see man page)."
schnalke@42 122 echo "ABORT"
schnalke@42 123 exit 2
schnalke@42 124 fi
schnalke@42 125 return "$?"
schnalke@42 126 }
schnalke@42 127
meillo@0 128
meillo@14 129 usage() {
meillo@16 130 echo "usage: $PROGRAM [OPTIONS] PICTURES"
meillo@6 131 exit 1
meillo@6 132 }
meillo@0 133
meillo@0 134
meillo@6 135
meillo@14 136 help() {
meillo@15 137 echo "$PROGRAM
meillo@6 138
meillo@6 139 generates a web gallery consisting of html pages
meillo@6 140
meillo@15 141 usage: $PROGRAM [OPTIONS] PICTURES
meillo@6 142
meillo@6 143 options:
meillo@6 144 --version print program version
meillo@6 145 --help display this output
meillo@6 146 -v be verbose ($verbose)
meillo@6 147 -o DIR folder where generated files go to ($targetDir)
meillo@6 148 -i FILE the name of the index file ($index)
meillo@6 149 -t TEXT title of the gallery ($galleryTitle)
meillo@23 150 -f TEXT footer text ($footer)
meillo@15 151 -ps PIXELS size of the pictures ($sizePic)
meillo@6 152 -ts PIXELS size of the thumbnails ($sizeThumb)
meillo@6 153 --overwrite overwrite output directory ($overwrite)
meillo@6 154
meillo@15 155 for more information see man page: $PROGRAM(1)
meillo@6 156
meillo@6 157 author: meillo@marmaro.de
meillo@23 158 homepage: http://prog.marmaro.de/genwebgallery
meillo@6 159 "
meillo@0 160 exit 0
meillo@6 161 }
meillo@0 162
meillo@0 163
meillo@6 164
meillo@6 165
meillo@6 166 # option processing
meillo@6 167
meillo@41 168 while [ "$#" -ge 1 ] && [ "`echo "$1" | awk '{print substr($0,1,1)}'`" = '-' ] ; do
meillo@0 169 case $1 in
meillo@0 170 '--version')
meillo@15 171 echo "$PROGRAM version $VERSION"
meillo@0 172 exit 0
meillo@0 173 ;;
meillo@0 174 '--help')
meillo@6 175 help
meillo@0 176 ;;
meillo@0 177 '-v' | '--verbose')
meillo@6 178 verbose="yes"
meillo@0 179 shift
meillo@0 180 ;;
meillo@0 181 '-o' | '--output')
meillo@6 182 targetDir="$2"
meillo@0 183 shift
meillo@0 184 shift
meillo@0 185 ;;
meillo@0 186 '-i' | '--index')
meillo@0 187 index=$2
meillo@0 188 shift
meillo@0 189 shift
meillo@0 190 ;;
meillo@0 191 '-t' | '--title')
meillo@6 192 galleryTitle="$2"
meillo@0 193 shift
meillo@0 194 shift
meillo@0 195 ;;
meillo@23 196 '-f' | '--footer')
meillo@23 197 footer=$2
meillo@0 198 shift
meillo@0 199 shift
meillo@0 200 ;;
meillo@0 201 '-ps' | '--pic-size')
meillo@0 202 sizePic=$2
meillo@0 203 shift
meillo@0 204 shift
meillo@0 205 ;;
meillo@0 206 '-ts' | '--thumb-size')
meillo@0 207 sizeThumb=$2
meillo@0 208 shift
meillo@0 209 shift
meillo@0 210 ;;
meillo@6 211 '--overwrite')
meillo@6 212 overwrite="yes"
meillo@6 213 shift
meillo@6 214 ;;
meillo@0 215 *)
meillo@0 216 echo "invalid option: $1"
meillo@15 217 echo "see: $PROGRAM --help"
meillo@0 218 exit 1
meillo@0 219 esac
meillo@0 220
meillo@0 221 done
meillo@0 222
meillo@0 223 if [ $# -eq 0 ] ; then
meillo@6 224 usage
meillo@0 225 fi
meillo@0 226
meillo@0 227
meillo@6 228
meillo@0 229 # verbose output
meillo@6 230 log "verbose: $verbose"
meillo@6 231 log
meillo@6 232 log "output dir: $targetDir"
meillo@6 233 log "index file: $index"
meillo@6 234 log "gallery title: $galleryTitle"
meillo@23 235 log "footer text: $footer"
meillo@6 236 log "picture size: ${sizePic}px"
meillo@6 237 log "thumbnail size: ${sizeThumb}px"
meillo@6 238 log "overwrite output dir: $overwrite"
meillo@6 239 log
schnalke@42 240 checkResizer
meillo@6 241 log
meillo@0 242
meillo@0 243
meillo@6 244
meillo@6 245 # generate web gallery
meillo@6 246
meillo@0 247 checkCreateDir
meillo@0 248
meillo@6 249 echo `insertHeader` > "$targetDir/$index"
meillo@6 250 if [ "$galleryTitle" != "" ] ; then
meillo@6 251 echo "<h1>$galleryTitle</h1>" >> "$targetDir/$index"
meillo@6 252 fi
meillo@0 253
meillo@0 254 for i in "$@" ; do
meillo@6 255 file="`basename $i`"
meillo@0 256 targetFile="$targetDir/$file.htm"
meillo@0 257 log "processing file: $file"
meillo@0 258
meillo@24 259 # copy and resize pics
schnalke@42 260 cp "$i" "$targetDir/$file"
schnalke@42 261 resize "$sizePic" "$targetDir/$file"
meillo@24 262 if [ $? -ne 0 ] ; then
meillo@24 263 log " skipping"
schnalke@42 264 rm "$targetDir/$file"
meillo@24 265 continue
meillo@24 266 fi
schnalke@42 267 cp "$i" "$targetDir/_$file"
schnalke@42 268 resize "$sizeThumb" "$targetDir/_$file"
meillo@24 269
meillo@0 270 # generate pic page
meillo@6 271 echo `insertHeader` > "$targetFile"
meillo@6 272 if [ "$galleryTitle" != "" ] ; then
meillo@6 273 echo "<h1>$galleryTitle</h1>" >> "$targetFile"
meillo@6 274 fi
meillo@6 275 echo "<p><a href=\"$index\"><img src=\"$file\" alt=\"$file\" /></a></p>" >> "$targetFile"
meillo@23 276 if [ "$footer" != "" ] ; then
meillo@23 277 echo "<p>$footer</p>" >> "$targetFile"
meillo@6 278 fi
meillo@6 279 echo `insertFooter` >> "$targetFile"
meillo@0 280
meillo@0 281 # generate content for index file
meillo@0 282 echo " <a href=\"$file.htm\"><img src=\"_$file\" alt=\"$file\" /></a>" >> "$targetDir/$index"
meillo@0 283 done
meillo@0 284
meillo@23 285 if [ "$footer" != "" ] ; then
meillo@23 286 echo "<p>$footer</p>" >> "$targetDir/$index"
meillo@6 287 fi
meillo@6 288 echo `insertFooter` >> "$targetDir/$index"