#!/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 . 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] " 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