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" |