#!/bin/csh -f # # pcdindex - generate a single PPM file from a PCD overview file # # This script assumes that the PBMPLUS and hpcdtoppm software # packages are installed, and that /tmp has enough space # (worst case 150Kbyte per image). # Based on pnmindex (PBMPLUS), which was written by Jef Poskanzer, # this script makes also use of hpcdtoppm, written by Hadmut Danisch. # # 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. # You may want to change the default values in the next 6 lines: set maxwidth=1152 # maximum width of the index image set size=192 # make the images about this big set across=6 # show this many images per row set colors="noquant" # maximum amount of colors or noquant (no quantization) set back="-black" # default background color set font=" " # default font or none (pbmtext's internal font) # Parse the options while ( 1 ) switch ( "$1" ) case -m*: if ( $#argv < 2 ) goto usage set maxwidth="$2" shift shift breaksw case -s*: if ( $#argv < 2 ) goto usage set size="$2" shift shift breaksw case -a*: if ( $#argv < 2 ) goto usage set across="$2" shift shift breaksw case -c*: set colors="$2" shift shift breaksw case -f*: set font="-font $2" shift shift breaksw case -b*: set back="-black" shift breaksw case -w*: set back="-white" shift breaksw case -*: echo "$0 : Unknown option $1" echo " " goto usage breaksw default: break breaksw endsw end if ( $#argv == 0 ) then goto usage endif set tmpfile=/tmp/pi.tmp.$$ rm -f $tmpfile touch /tmp/img0001 # Avoid complaints about non matching rm -f /tmp/img* set rowfiles=() set imagefiles=() @ row = 1 @ col = 1 @ width = $size # Convert the PCD overview file to many PPM images if (-f $1) then hpcdtoppm -Overview $1 /tmp/img else echo "$0 : Could not access $1" echo " " goto usage endif foreach i ( /tmp/img* ) if (-f $i) then set description=`pnmfile $i` if ( $description[4] <= $size && $description[6] <= $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 endif endif set imagefile=/tmp/pi.${row}.${col}.$$ rm -f $imagefile set 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 endif rm -f $tmpfile set description=`pnmfile $imagefile` @ width += $description[4] set imagefiles=( $imagefiles $imagefile ) if (( $col >= $across ) || ( $width > $maxwidth)) then set rowfile=/tmp/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 endif rm -f $imagefiles set imagefiles=() set rowfiles=( $rowfiles $rowfile ) @ col = 1 @ row += 1 @ width = $size else @ col += 1 endif endif end if ( $#imagefiles > 0 ) then set rowfile=/tmp/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 endif rm -f $imagefiles set rowfiles=( $rowfiles $rowfile ) endif if ( $#rowfiles == 1 ) then cat $rowfiles else if ( $colors =~ n* ) then pnmcat $back -tb $rowfiles else pnmcat $back -tb $rowfiles | ppmquant -quiet $colors endif endif rm -f $rowfiles rm -f /tmp/img* exit 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)" endif 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