--- /dev/null
+#!/bin/sh -e
+
+function die() {
+ echo -e "$*" >&2
+ exit 1
+}
+
+function r() {
+ echo $(($RANDOM % $1))
+}
+
+max=$#
+cur=1
+
+[ $max -gt 0 ] || die "Usage:\n[IMG_PREFIX=your_prefix] $0 img1.jpg img2.jpg ..."
+[ -x "$(which convert)" ] || die "ImageMagick is not installed"
+[ -x "$(which jhead)" ] || die "jhead is not installed"
+
+while [ $# -gt 0 ]; do
+ dst="$IMG_PREFIX$(seq -w $cur $max|head -n1).jpg"
+ echo -e "[$((100*cur/max))%]\t$1\t-> $dst"
+
+ [ -f "$1" ] || die "$1 does not exist"
+ (! [ -e "$dst" ]) || die "$dst already exists"
+
+ read W H <<EOF
+ $(identify $1 |cut -f3 -d\ |tr x \ )
+EOF
+
+ [ $W -ge 100 ] && [ $H -ge 100 ] || die "image is too small"
+
+ if [ $W -ge 1000 ]; then DW=$((W / 100)); else DW=10; fi
+ if [ $H -ge 1000 ]; then DH=$((H / 100)); else DH=10; fi
+
+ W=$(($W-1))
+ H=$(($H-1))
+
+ convert $1 \
+ -colorspace RGB \
+ -distort Perspective "$(
+ ( echo $(r $DW) $(r $DH) 0 0
+ echo $(($W - $(r $DW))) $(r $DH) $W 0
+ echo $(r $DW) $(($H - $(r $DH))) 0 $H
+ echo $(($W - $(r $DW))) $(($H - $(r $DH))) $W $H
+ ) | tr " \n" ", ")" \
+ -filter gaussian -define filter:support=5 -define filter:sigma=0.5 \
+ -attenuate 2 +noise Uniform \
+ -resize 50% \
+ -colorspace sRGB \
+ "$dst"
+
+ jhead -purejpg -q "$dst" || die "removing meta-data failed"
+
+ cur=$(($cur + 1))
+ shift
+done