201 lines
4.6 KiB
Bash
Executable file
201 lines
4.6 KiB
Bash
Executable file
#!/bin/bash
|
|
###########
|
|
|
|
# Splits a panorama image into overlapping panels of the correct size.
|
|
#
|
|
# Note that this is _very_ preliminary, doing the fading/overlapping in a
|
|
# very naive linear manner.
|
|
#
|
|
# Also note that this script will probably go away as its functionality
|
|
# is moved into selphy_print &| gutenprint
|
|
#
|
|
infile="$1"
|
|
outfile="$2"
|
|
model="$3"
|
|
printsize="$4"
|
|
|
|
if [ -z "$5" ] ; then
|
|
dpi=300
|
|
else
|
|
dpi="$5"
|
|
fi
|
|
|
|
# D90
|
|
case "${model}" in
|
|
kodak-6900|kodak-6950)
|
|
overlap=636 # 100 + 36
|
|
if [ "${printsize}" eq "6x20" ] ; then
|
|
cols=1844
|
|
inrows=6036
|
|
drows=2436
|
|
elif [ "${printsize}" eq "6x18" ] ; then
|
|
cols=1844
|
|
inrows=5436
|
|
drows=2436
|
|
elif [ "${printsize}" eq "6x14" ] ; then
|
|
cols=1844
|
|
inrows=4236
|
|
drows=2436
|
|
elif [ "${printsize}" eq "6x12" ] ; then
|
|
cols=1844
|
|
inrows=3636
|
|
drows=2436
|
|
elif [ "${printsize}" eq "5x20" ] ; then
|
|
cols=1548
|
|
inrows=6036
|
|
overlap=136 # 100 + 36
|
|
drows=2136
|
|
elif [ "${printsize}" eq "5x15" ] ; then
|
|
cols=1548
|
|
inrows=4536
|
|
drows=2136
|
|
elif [ "${printsize}" eq "5x10" ] ; then
|
|
cols=1548
|
|
inrows=3036
|
|
drows=2136
|
|
else
|
|
echo "EK69xx supports 6x20, 6x18, 6x14, 6x12, 5x20, 5x15, and 5x10 only";
|
|
fi
|
|
;;
|
|
kodak-8810)
|
|
cols=2464
|
|
overlap=360 ### XXX probably wrong?
|
|
if [ "${printsize}" eq "8x14" ] ; then
|
|
inrows=4224
|
|
drows=3024 # or 3624
|
|
elif [ "${printsize}" eq "8x16" ] ; then
|
|
inrows=4824
|
|
drows=3024 # or 3624
|
|
elif [ "${printsize}" eq "8x20" ] ; then
|
|
inrows=6024
|
|
drows=3024 # or 3624?
|
|
elif [ "${printsize}" eq "8x24" ] ; then
|
|
inrows=7224
|
|
drows=3024 # or 3624, with overlap=180
|
|
elif [ "${printsize}" eq "8x32" ] ; then
|
|
inrows=9624
|
|
drows=3624
|
|
elif [ "${printsize}" eq "8x36" ] ; then
|
|
overlap=180 # XXX probably wrong?
|
|
inrows=10824
|
|
drows=3624
|
|
else
|
|
echo "EK8810 supports 8x14, 8x16, 8x20, 8x32, and 8x36 only";
|
|
fi
|
|
;;
|
|
mitsubishi-d90dw)
|
|
cols=1852
|
|
drows=2428
|
|
overlap=628 # 600 + 28
|
|
if [ "${printsize}" eq "6x20" ] ; then
|
|
inrows=6028
|
|
elif [ "${printsize}" eq "6x14" ] ; then
|
|
inrows=4228
|
|
else
|
|
echo "D90 supports 6x20 and 6x14 only"
|
|
exit 1
|
|
fi
|
|
;;
|
|
dnp-ds620)
|
|
cols=1844
|
|
drows=2436
|
|
overlap=600
|
|
if [ "${printsize}" eq "6x20" ] ; then
|
|
inrows=6108
|
|
elif [ "${printsize}" eq "6x14" ] ; then
|
|
inrows=4272
|
|
else
|
|
echo "DS620 supportx 6x20 and 6x14 only"
|
|
exit 1
|
|
fi
|
|
;;
|
|
dnp-ds820)
|
|
overlap=600
|
|
cols=2448
|
|
if [ "${printsize}" eq "8x18" ] ; then
|
|
drows=3036
|
|
inrows=5472
|
|
elif [ "${printsize}" eq "8x26" ] ; then
|
|
drows=3036
|
|
inrows=7908
|
|
elif [ "${printsize}" eq "8x22" ] ; then
|
|
drows=3636
|
|
inrows=6672
|
|
elif [ "${printsize}" eq "8x32" ] ; then
|
|
drows=3636
|
|
inrows=9708
|
|
else
|
|
echo "DS820 supportx 8x18, 8x26, 8x22, and 8x32 only"
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Unsupported model!"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# For 600dpi, double everything!
|
|
if [ ${dpi} == 600 ] ; then
|
|
overlap=`expr ${overlap} * 2`
|
|
cols=`expr ${cols} * 2`
|
|
drows=`expr ${drows} * 2`
|
|
inrows=`expr ${inrows} * 2`
|
|
fi
|
|
|
|
# Calculate page count XXX is this sane?
|
|
pages=`expr ${drows} - ${overlap}`
|
|
pages=`expr ${inrows} / ${pages}`
|
|
|
|
# Create gradients
|
|
fadeinname=fade_in_${cols}.pgm
|
|
fadeoutname=fade_out_${cols}.pgm
|
|
|
|
gm convert -size ${cols}x${overlap} gradient:white-black ${fadeinname}
|
|
gm convert -size ${cols}x${overlap} gradient:black-white ${fadeoutname}
|
|
|
|
# Generate panels
|
|
src_offset=0
|
|
panels=''
|
|
for panel in `seq 1 ${pages}` ; do
|
|
echo "generating $panel / $pages"
|
|
|
|
panelname=panel_${panel}.ppm
|
|
panels="${panels} ${panelname}"
|
|
|
|
# Generate panel
|
|
gm convert ${infile} -crop ${cols}x${drows}+0+${src_offset} ${panelname}
|
|
|
|
# Increment offset
|
|
src_offset=`expr ${src_offset} + ${drows}`;
|
|
src_offset=`expr ${src_offset} - ${overlap}`;
|
|
|
|
# First page fades out only
|
|
if [ ${panel} == 1 ] ; then
|
|
gm composite -compose screen -gravity south ${fadeoutname} ${panelname} ${panelname}
|
|
fi
|
|
|
|
# Middle pages fade in and out
|
|
if [ ${panel} -gt 1 ] ; then
|
|
if [ ${panel} -lt ${pages} ] ; then
|
|
gm composite -compose screen -gravity south ${fadeoutname} ${panelname} ${panelname}
|
|
fi
|
|
fi
|
|
if [ ${panel} -gt 1 ] ; then
|
|
if [ ${panel} -lt ${pages} ] ; then
|
|
gm composite -compose screen -gravity north ${fadeinname} ${panelname} ${panelname}
|
|
fi
|
|
fi
|
|
|
|
# Last page fades in only
|
|
if [ ${panel} == ${pages} ] ; then
|
|
gm composite -compose screen -gravity north ${fadeinname} ${panelname} ${panelname}
|
|
fi
|
|
|
|
done
|
|
|
|
# Clean up templates
|
|
rm ${fadeinname} ${fadeoutname}
|
|
|
|
## Create PDF
|
|
gm convert -density ${dpi}x${dpi} ${panels} ${outfile}
|