aboutsummaryrefslogtreecommitdiff
path: root/imgconv
diff options
context:
space:
mode:
Diffstat (limited to 'imgconv')
-rwxr-xr-ximgconv262
1 files changed, 262 insertions, 0 deletions
diff --git a/imgconv b/imgconv
new file mode 100755
index 0000000..396a786
--- /dev/null
+++ b/imgconv
@@ -0,0 +1,262 @@
+#!/bin/bash
+
+# little script to generate image galleries for use with original.
+# uses imagemagick's convert
+# (c) 2005 boris de laage <bdelaage@free.fr>
+# based on imgconv by Jakub Steiner
+#
+# The 'help' section sucks, as my english does.
+
+
+#default options
+dir=./web-gallery
+zip=0
+rotate=0
+mq=0
+hq=0
+interactive=0
+verbose=echo
+
+#info.txt stuff
+gal_auth=""
+gal_name=""
+gal_desc=""
+gal_date=""
+gal_user=""
+gal_pass=""
+
+# convert options
+convertor=`which convert`
+jhead=`which jhead`
+extra_ops="-strip"
+
+# This script
+name=`basename $0`
+
+# getopt stuff
+shortopts="a:hHin:d:D:Mqo:Zr"
+longopts="author:quiet,help,interactive,name:,date:,description:,\
+mq,hq,output:,archive,rotate"
+
+
+
+function echo_help {
+cat <<EOF
+Usage : $1 [OPTIONS]... [FILE]...
+Convert FILEs
+
+ -o, --output DIR make gallery in DIR
+ -M, --mq include 1024x768 images (MQ)
+ -H, --hq include original images (HQ)
+ -Z, --archive make archives
+ -i, --interactive edit gallery informations interactively
+ -a, --author NAME set author's name
+ -n, --name NAME set gallery's name
+ -d, --date DATE set date to DATE
+ -D, --description DESC description
+ -r, --rotate automatically rotate image based on EXIF
+ -q, --quiet don't say anything
+ -h, --help display this help and exit
+
+FILEs must be JPG, JPEG or PNG. if DIR is not given, the
+gallery will be created in $dir.
+
+EOF
+
+}
+
+good_file() {
+ local ftype
+
+ ftype=`file -b "$1" | cut -d " " -f 1`
+
+ if [ "$ftype" == "JPG" ] || [ "$ftype" == "JPEG" ] || [ "$ftype" == "PNG" ]
+ then
+ return 0
+ else
+ return 1
+ fi
+
+}
+
+
+# If we don't have ImageMagick, cry & exit
+if [ -z $convertor ]; then
+ echo "convert not found... Please install ImageMagick."
+ exit 1
+fi
+
+
+# Parse options
+TEMP=`getopt -o $shortopts --long $longopts -n $name -- "$@"`
+[ $? != 0 ] && exit 1
+
+eval set -- "$TEMP"
+while true; do
+ case "$1" in
+ -h|--help)
+ echo_help $name ; exit 0 ;;
+
+ -i|--interactive)
+ interactive=1 ; shift ;;
+
+ -n|--name)
+ gal_name=$2 ; shift 2 ;;
+
+ -d|--date)
+ gal_date=$2 ; shift 2 ;;
+
+ -D|--description)
+ gal_desc=$2 ; shift 2 ;;
+
+ -a|--author)
+ gal_auth=$2 ; shift 2 ;;
+
+ -o|--output)
+ dir=$2 ; shift 2 ;;
+
+ -Z|--zip)
+ zip=1 ; shift ;;
+
+ -r|--rotate)
+ rotate=1 ; shift ;;
+
+ -q|--quiet)
+ verbose=false ; shift ;;
+
+ -M|--mq)
+ mq=1 ; shift ;;
+
+ -H|--hq)
+ hq=1 ; shift ;;
+
+ --)
+ shift ; break ;;
+
+ *)
+ echo "OOops.. getopt error !" ; echo $@ ; exit 1 ;;
+ esac
+done
+
+
+
+# If we don't have JHead and we want to auto-rotate images, cry & exit
+if [ $rotate -gt 0 ] && [ -z $jhead ]; then
+ echo "jhead not found... Please install JHead."
+ exit 1
+fi
+
+
+
+# If no input files are given, display usage & exit
+if [ $# == 0 ]; then
+ cat <<EOF
+Usage: $name [-hMHZ] [-o directory] file...
+ $name -o Gallery *.jpg
+Try \`$name --help' for more information.
+EOF
+ exit 1
+fi
+
+# make dirs
+mkdir -p $dir/thumbs
+mkdir -p $dir/lq
+mkdir -p $dir/comments
+chmod o+w $dir/comments
+[ $mq -gt 0 ] && mkdir -p $dir/mq
+[ $hq -gt 0 ] && mkdir -p $dir/hq
+[ $zip -gt 0 ] && mkdir -p $dir/zip
+
+# Protect info.txt, even if we don't make it.
+echo "<Files info.txt>" > $dir/.htaccess
+echo " deny from all" >> $dir/.htaccess
+echo "</Files>" >> $dir/.htaccess
+
+
+$verbose "Generating O.R.I.G.I.N.A.L gallery in $dir"
+
+files=$(echo $@ | sed 's/ /\n/g' | sort)
+
+#files=$@
+
+i=1
+for imagefile in $files; do
+
+ good_file "$imagefile"
+ if [ $? != 0 ]; then
+ $verbose "$imagefile is not a JPG, JPEG or PNG file, skipped"
+ continue
+ fi
+
+ $verbose -n "converting $imagefile "
+
+ $verbose -n "."
+ $convertor -geometry 120x120 -modulate 100,140,100 -unsharp 1x20 \
+ -quality 60 $extra_opts "$imagefile" $dir/thumbs/img-$i.jpg
+
+ $verbose -n "."
+ $convertor -geometry 640x480 -modulate 100,130,100 -unsharp 1x5 \
+ -quality 90 "$imagefile" $dir/lq/img-$i.jpg
+
+ if [ $mq -gt 0 ]; then
+ $verbose -n "."
+ $convertor -geometry 1024x768 -modulate 100,130,100 -unsharp 1x5 \
+ -quality 80 "$imagefile" $dir/mq/img-$i.jpg
+ fi
+
+ if [ $hq -gt 0 ] ; then
+ $verbose -n "."
+ cp "$imagefile" $dir/hq/img-$i.jpg
+ fi
+
+ # template for comment
+ echo "<span>Photo $i</span> " > $dir/comments/$i.txt
+
+
+ i=`expr $i + 1`
+ $verbose " done"
+done
+
+# auto-rotate stuff
+if [ $rotate -gt 0 ]; then
+ $verbose "rotating"
+ jhead -autorot $dir/thumbs/*.jpg
+ jhead -autorot $dir/lq/*.jpg
+ [ $mq ] && jhead -autorot $dir/mq/*.jpg
+ [ $hq ] && jhead -autorot $dir/hq/*.jpg
+fi
+
+# zip stuff
+if [ $zip -gt 0 ]; then
+ $verbose "archiving"
+ [ $mq ] && zip -R $dir/zip/mq.zip $dir/mq/*.jpg
+ [ $hq ] && zip -R $dir/zip/hq.zip $dir/hq/*.jpg
+fi
+
+#info.txt
+protect=n
+if [ $interactive == 1 ]; then
+ echo -n "Gallery name [$gal_name]: "
+ read gal_name
+ echo -n "Description: "
+ read gal_desc
+ echo -n "Author [$gal_auth]: "
+ read gal_auth
+ echo -n "Date [$gal_date]: "
+ read gal_date
+ echo -n "Resctrict access ? [y/N]: "
+ read protect
+ if [ "$protect" == "y" ] || [ "$protect" == "Y" ]; then
+ echo -n "restricted user [$gal_user]: "
+ read gal_user
+ echo -n "restricted password [$gal_pass]: "
+ read gal_pass
+ fi
+fi
+
+[ "$gal_name" != "" ] && echo "name|$gal_name" >> $dir/info.txt
+[ "$gal_auth" != "" ] && echo "author|$gal_auth" >> $dir/info.txt
+[ "$gal_date" != "" ] && echo "date|$gal_date" >> $dir/info.txt
+[ "$gal_desc" != "" ] && echo "description|$gal_desc" >> $dir/info.txt
+[ "$gal_user" != "" ] && echo "restricted_user|$gal_user" >> $dir/info.txt
+[ "$gal_pass" != "" ] && echo "restricted_password|$gal_pass" >> $dir/info.txt