rendered paste body#!/bin/sh
#
# add a drop shadow to an image
#
#
#############################
function usage {
echo "Usage : $(basename $0) [ .. options .. ] image [out_image]"
echo
echo " Adds a shadow to the image."
echo " options :"
echo " -x : x offset "
echo " -y : y offset"
echo " -r : radius"
echo " -b : blur"
exit -1
}
#############################
[ -z "$1" ] && usage
## default values
X_OFFSET=8
Y_OFFSET=8
RADIUS=15
BLUR=80
## parse options
while getopts x:y:r:b: option
do
case $option in
x) X_OFFSET=$OPTARG ;;
y) Y_OFFSET=$OPTARG ;;
r) RADIUS=$OPTARG ;;
b) BLUR=$OPTARG ;;
\?) usage ;;
esac
done
shift $(($OPTIND - 1))
## arguments after options
[ -n "$1" ] && FILE=$1
[ -n "$2" ] && FILE_OUT=$2
## verify input file existence
if [ -z "$FILE" ] || [ ! -e "$FILE" ]
then usage
fi
## backup file if no output_file
if [ -z "$FILE_OUT" ]
then
cp $FILE $FILE.bak
FILE_OUT=$FILE
fi
##
## main traitment
##
## script scheme (last line uses shell variables)
cat > $FILE.tmp <<EOF
(define (my-drop-shadow input-file output-file x_offset y_offset radius blur)
(let* ((image (car (gimp-file-load RUN-NONINTERACTIVE input-file input-file)))
(drawable (car (gimp-image-get-active-layer image))))
(script-fu-drop-shadow image drawable x_offset y_offset radius '(0 0 0) blur TRUE)
(gimp-image-merge-visible-layers image TRUE)
(gimp-image-flatten image)
(set! drawable (car (gimp-image-get-active-layer image)))
(gimp-file-save RUN-NONINTERACTIVE image drawable output-file output-file)
)
(gimp-quit TRUE)
)
(my-drop-shadow "$FILE" "$FILE_OUT" $X_OFFSET $Y_OFFSET $RADIUS $BLUR)
EOF
#SCRIPT_SCM=$(cat $FILE.tmp)
#rm -f $FILE.tmp
#echo "$SCRIPT_SCM"
cat $FILE.tmp | gimp -i -b - 1>/dev/null 2>/dev/null
rm -f $FILE.tmp