Current File : //usr/bin/pcdovtoppm |
#!/usr/bin/sh
#
# pcdovtoppm - generate a single PPM file from a PCD overview file
#
# Based on pnmindex (PBMPLUS), which was written by Jef Poskanzer,
# this script makes also use of hpcdtoppm, written by Hadmut Danisch.
#
# Formerly called Pcdindex.
#
# A similar result can be achieved by using "hpcdtoppm -Overview"
# followed by "pnmindex -black" on the generated PPM images.
# This shell just makes it more convenient and transparent to
# convert from one PCD to one PPM overview file.
#
# Additional options (compared to pnmindex) are -maxwidth and
# -font <font>. See "man pbmtext" on how to create your own font.
#
# Pieter S. van der Meulen, 1992.
# Rewritten in sh by Steve McIntyre <93sam@debian.org>, 2001
# You may want to change the default values in the next 6 lines:
maxwidth=1152 # maximum width of the index image
size=192 # make the images about this big
across=6 # show this many images per row
colors="noquant" # maximum amount of colors or noquant (no quantization)
back="-black" # default background color
font=" " # default font or none (pbmtext's internal font)
plainopt="" # output plain ppm
quietopt="" # quiet operation (currently no effect)
versionopt=0
usage ()
{
echo "Usage: $0 [-m W] [-s S] [-a A] [-c N|n] [-f F] [-b|-w] <overview.pcd>"
echo " with"
echo " W = maximum width of the result image (default: $maxwidth)"
echo " S = maximum size of each of the images (default: $size)"
echo " A = maximum number of images across (default: $across)"
echo " N = maximum number of colors or noquant (default: $colors)"
echo -n " F = font to be used for annotation (default: "
if [ "$font" = " " ] ; then
echo "internal font)"
else
echo "$font)"
fi
echo " -b/-w = black/white background color (default: $back)"
echo " "
echo " e.g.: $0 -m 768 -s 96 -f smallfont.pbm overview.pcd > overview.ppm"
echo " or : $0 /cdrom/photo_cd/overview.pcd | ppmtojpeg > overview.jpg"
exit 1
}
version ()
{
# report version using pnmscale
pnmscale -version $quietopt
exit 0
}
# Parse the options
while :; do
case "$1" in
-m|-ma|-max|-maxw|-maxwi|-maxwid|-maxwidt|-maxwidth )
if [ $# -lt 2 ] ; then usage; fi
maxwidth="$2"
shift
shift
;;
-s|-si|-siz|-size )
if [ $# -lt 2 ] ; then usage; fi
size="$2"
shift
shift
;;
-a|-ac|-acr|-acro|-acros|-across )
if [ $# -lt 2 ] ; then usage; fi
across="$2"
shift
shift
;;
-c|-co|-col|-colo|-color|-colors )
if [ $# -lt 2 ] ; then usage; fi
colors="$2"
shift
shift
;;
-f|-fo|-fon|-font )
if [ $# -lt 2 ] ; then usage; fi
font="-font $2"
shift
shift
;;
-b|-bl|-bla|-blac|-black )
back="-black"
shift
;;
-w|-wh|-whi|-whit|-white )
back="-white"
shift
;;
-p|-pl|-pla|-plai|-plain )
plainopt="-plain"
shift
;;
-q|-qu|-qui|-quie|-quiet )
quietopt="-quiet"
shift
;;
-v|-ve|-ver|-vers|-versi|-versio|-version )
versionopt="1"
shift
;;
-*)
echo "$0 : Unknown option $1" 1>&2
echo " " 1>&2
usage
;;
*)
break
;;
esac
done
if [ $versionopt -eq 1 ] ; then
version
elif [ $# -eq 0 ] ; then
usage
fi
tempdir=$(mktemp -d "${TMPDIR:-/tmp}/pcdovtoppm.XXXXXXXX") ||
{ echo "Could not create temporary file. Exiting." 1>&2; exit 1; }
trap 'rm -rf $tempdir' 0
tmpfile=`tempfile -p pi -m 600`
# Convert the PCD overview file to many PPM images
if [ -f $1 ] ; then
hpcdtoppm -Overview $1 $tmpfile ||
{ echo "$0: Hpcdtoppm failed. Exiting" 1>&2 ; exit 1; }
else
echo "$0 : Could not access $1" 1>&2
echo " " 1>&2
usage
fi
imagefiles=
rowfiles=
row=1
col=1
width=$size
for i in "$tmpfile"*
do
if [ -f $i ] ; then
thiswidth=$(pamfile -machine $i | cut -f 4 -d ' ')
thisheight=$(pamfile -machine $i | cut -f 5 -d ' ')
if [ "$thiswidth" -le $size -a "$thisheight" -le $size ] ; then
cat $i > $tmpfile
else
if [ "$colors" = "n" ] ; then
pnmscale -quiet -xysize $size $size $i > $tmpfile
else
pnmscale -quiet -xysize $size $size $i | \
ppmquant -quiet $colors > $tmpfile
fi
fi
fi
imagefile=${tempdir}/pi.${row}.${col}
rm -f $imagefile
ttext="$i:t"
if [ "$back" = "-white" ] ; then
pbmtext $font "$ttext" | pnmcrop -quiet | pnmmargin -white 2| \
pnmcat $back -tb $tmpfile - > $imagefile
else
pbmtext $font "$ttext" | pnmcrop -quiet | pnmmargin -white 2 | \
pnminvert | pnmcat $back -tb $tmpfile - > $imagefile
fi
rm -f $tmpfile
thisWidth=$(pamfile -machine $i | cut -f 4 -d ' ')
width=$(( $width + $thisWidth ))
imagefiles="$imagefiles $imagefile"
if [ $col -ge $across -o $width -gt $maxwidth ] ; then
rowfile=${tempdir}/pi.${row}
rm -f $rowfile
if [ "$colors" = "n" ] ; then
pnmcat $back -lr -jbottom $imagefiles > $rowfile
else
pnmcat $back -lr -jbottom $imagefiles | \
ppmquant -quiet $colors > $rowfile
fi
rm -f $imagefiles
imagefiles=
rowfiles="$rowfiles $rowfile"
col=1
row=$(( $row + 1 ))
width=$size
else
col=$(( $col + 1 ))
fi
done
if [ -n $imagefiles ] ; then
rowfile=${tempdir}/pi.${row}
rm -f $rowfile
if [ "$colors" = "n" ] ; then
pnmcat $back -lr -jbottom $imagefiles > $rowfile
else
pnmcat $back -lr -jbottom $imagefiles | \
ppmquant -quiet $colors > $rowfile
fi
rm -f $imagefiles
rowfiles="$rowfiles $rowfile"
fi
if [ $(echo $rowfiles|wc -w) -eq 1 ] ; then
ppmtoppm $plainopt < $rowfiles
else
if [ "$colors" = "n" ] ; then
pnmcat $back -tb $plainopt $rowfiles
else
pnmcat $back -tb $rowfiles | ppmquant $plainopt -quiet $colors
fi
fi
rm -f $rowfiles
exit 0