The following script creates a thumbnail for image/ps/pdf files.
it can be used with "Execute edit" and "Execute new" configuration commands
in order to get resized thumbs of attachments.
It uses file(1), convert(1) for images, gs(1) is also required for ps and pdf.
You have to start elogd with the "-x" option to enable execution and put
something similar to the following in you configuration elog file:
Execute new = /path/to/make_thumbs -s 650 -q 95 $attachments
Execute edit = /path/to/make_thumbs -s 100 $attachments
make_thumbs have to be executable by the user running elogd, of course.
ChangeLog:
* version 0.2.0 Fixes a BUG in PDF creation |
#!/bin/bash
#
# Makes thumbnails (a jpeg image) from a given set of input files.
# Supported input file types are those supported by 'convert',
# plus PDF.
# Requires convert(1), gs(1) and file(1)
#
# Usage: make_thumbs [options] [ file1 file2 ... ]
# Author: Emiliano Gabrielli
# License: GPL
# Latest Version at http://SuperAlberT.it/download/command_line_scripts/elog/
#
# $Id: make_thumbs,v 1.7 2005/04/14 10:01:37 albert Exp $
function parse_cmdline()
{
export OPTERR=1
while getopts "s:q:Vh" "option" ; do
case "$option" in
s)
MAXSIZE=$OPTARG
;;
q)
QUALITY=$OPTARG
;;
V)
echo "$0 version $VERSION by $AUTHOR"
exit 1
;;
h|*)
echo -e "\nUsage: make_thumb [options] [ file1 file2 ... ]"
echo -e "Options:\n"\
" -s MAXSIZE the size of the thumbnail to be created\n"\
" -q QUALITY the quality of the JPEG image created\n"\
" -V print version and exit\n"\
" -h print this help and exit\n"
exit 1
;;
esac
done
}
function make_thumb()
{
[ ! -z "$1" ] || exit 1
FILE="$1"
# Test if file is readable
if ! [ -r "$FILE" ] ; then
echo "ERROR in $0: $FILE is not readable."
exit 1
fi
THUMBFILE="$FILE.thumb"
EXTENSION="`echo \"$FILE\" | sed 's/.*\.\([^.]*\)$/\1/'`"
# we need this extension in order to instruct 'convert'
# will be renamed at the end of the job
JPEGFILE="$THUMBFILE.jpg"
ROTATE=""
# PDF needs special handling
if [[ `file $FILE | grep "PDF document"` ]] ||
[[ `file $FILE | grep "PostScript document"` ]]
then
# look if we should rotate
DEG=`head -200 $FILE | strings | grep "/Rotate " | head -1 | sed -e 's#.*/Rotate \([0-9]\+\).*#\1#'`
[ ! -z "$DEG" ] && ROTATE="-rotate $DEG"
# Extract first page and convert: PDF -> PS -> JPEG (needs 'gs' and 'convert')
gs -q -dNOPAUSE -dBATCH -r75 -dLastPage=1 -sDEVICE=jpeg -sOutputFile=\|cat "$FILE" | \
convert - $ROTATE -size ${MAXSIZE}x${MAXSIZE} -resize ${MAXSIZE}x${MAXSIZE} -quality $QUALITY +profile "*" "$JPEGFILE" &&
mv "$JPEGFILE" "$THUMBFILE" &
# Else it must be one of the following: postscript, JPEG, GIF, TIFF, RS
elif [[ `file $FILE | grep "\(JPEG\|GIF\|PNG\|TIFF\) image data"` ]] ||
[[ "$EXTENSION" == "rs" ]] || [[ "$EXTENSION" == "RS" ]]
then
convert -size ${MAXSIZE}x${MAXSIZE} "$FILE" -resize ${MAXSIZE}x${MAXSIZE} -quality $QUALITY +profile "*" "$JPEGFILE" &&
mv "$JPEGFILE" "$THUMBFILE" &
fi
}
AUTHOR="Emiliano 'AlberT' Gabrielli"
VERSION="0.2.0"
MAXSIZE=600 # default value
QUALITY=70 # default value
parse_cmdline $@
shift `expr $OPTIND - 1`
for file in "$@" ; do
make_thumb $file
done
# vim:ai:ts=4:sw=4:
|