diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2006-12-25 03:06:05 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2006-12-25 03:06:05 +0000 |
commit | 1017cbebe5d5edd859e0fddad0a8600f509f4821 (patch) | |
tree | 78bdf336648566f7a7d55f42837357dea3dd674c | |
parent | 16f2ac126651015a376eba864a3a35f738b0b25a (diff) | |
download | netpbm-mirror-1017cbebe5d5edd859e0fddad0a8600f509f4821.tar.gz netpbm-mirror-1017cbebe5d5edd859e0fddad0a8600f509f4821.tar.xz netpbm-mirror-1017cbebe5d5edd859e0fddad0a8600f509f4821.zip |
Place user guide into Subversion repository
git-svn-id: http://svn.code.sf.net/p/netpbm/code/userguide@181 9d0c8265-081b-0410-96cb-a4ca84ce46f8
-rw-r--r-- | 411toppm.html | 73 | ||||
-rw-r--r-- | anytopnm.html | 76 | ||||
-rw-r--r-- | asciitopgm.html | 85 | ||||
-rw-r--r-- | atktopbm.html | 47 | ||||
-rw-r--r-- | bioradtopgm.html | 67 | ||||
-rw-r--r-- | blend1.gif | bin | 0 -> 18686 bytes | |||
-rw-r--r-- | blend3.gif | bin | 0 -> 21744 bytes | |||
-rw-r--r-- | blend4.gif | bin | 0 -> 25152 bytes | |||
-rw-r--r-- | blend6.gif | bin | 0 -> 22391 bytes | |||
-rw-r--r-- | blend7.gif | bin | 0 -> 26915 bytes | |||
-rw-r--r-- | bmptopnm.html | 67 | ||||
-rw-r--r-- | bmptoppm.html | 20 | ||||
-rw-r--r-- | brushtopbm.html | 49 | ||||
-rw-r--r-- | cameratopam.html | 192 | ||||
-rw-r--r-- | cmuwmtopbm.html | 49 | ||||
-rw-r--r-- | ddbugtopbm.html | 116 | ||||
-rw-r--r-- | directory.html | 1033 | ||||
-rw-r--r-- | error.html | 250 | ||||
-rw-r--r-- | escp2topbm.html | 92 | ||||
-rw-r--r-- | extendedopacity.html | 162 | ||||
-rw-r--r-- | eyuvtoppm.html | 57 | ||||
-rw-r--r-- | fiascotopnm.html | 227 | ||||
-rw-r--r-- | fitstopnm.html | 93 | ||||
-rw-r--r-- | fstopgm.html | 86 | ||||
-rw-r--r-- | g3topbm.html | 144 | ||||
-rw-r--r-- | gemtopbm.html | 20 | ||||
-rw-r--r-- | gemtopnm.html | 66 | ||||
-rw-r--r-- | giftopnm.html | 182 | ||||
-rw-r--r-- | globe.jpg | bin | 0 -> 14379 bytes | |||
-rw-r--r-- | gobot.gif | bin | 0 -> 1404 bytes | |||
-rw-r--r-- | gouldtoppm.html | 48 | ||||
-rw-r--r-- | hdifftopam.html | 66 | ||||
-rw-r--r-- | hipstopgm.html | 53 | ||||
-rw-r--r-- | hpcdtoppm.html | 448 | ||||
-rw-r--r-- | icontopbm.html | 49 | ||||
-rw-r--r-- | ilbmtoppm.html | 117 | ||||
-rw-r--r-- | imgtoppm.html | 53 | ||||
-rw-r--r-- | index.html | 852 | ||||
-rw-r--r-- | infotopam.html | 227 | ||||
-rw-r--r-- | jbigtopnm.html | 129 | ||||
-rw-r--r-- | jpeg2ktopam.html | 149 | ||||
-rw-r--r-- | jpegtopnm.html | 339 | ||||
-rw-r--r-- | leaftoppm.html | 50 | ||||
-rw-r--r-- | libnetpbm.html | 83 | ||||
-rw-r--r-- | libnetpbm_dir.html | 183 | ||||
-rw-r--r-- | libnetpbm_draw.html | 142 | ||||
-rw-r--r-- | libnetpbm_image.html | 712 | ||||
-rw-r--r-- | libnetpbm_ug.html | 303 | ||||
-rw-r--r-- | libpbm.html | 309 | ||||
-rw-r--r-- | libpgm.html | 279 | ||||
-rw-r--r-- | libpm.html | 523 | ||||
-rw-r--r-- | libpnm.html | 357 | ||||
-rw-r--r-- | libppm.html | 823 | ||||
-rw-r--r-- | libsystem.html | 307 | ||||
-rw-r--r-- | libtmpfile.html | 66 | ||||
-rw-r--r-- | lispmtopgm.html | 71 | ||||
-rw-r--r-- | macptopbm.html | 75 | ||||
-rw-r--r-- | manweb.html | 244 | ||||
-rw-r--r-- | mdatopbm.html | 81 | ||||
-rw-r--r-- | mgrtopbm.html | 50 | ||||
-rw-r--r-- | mrf.html | 134 | ||||
-rw-r--r-- | mrftopbm.html | 77 | ||||
-rw-r--r-- | mtvtoppm.html | 51 | ||||
-rw-r--r-- | neotoppm.html | 56 | ||||
-rw-r--r-- | palmtopnm.html | 157 | ||||
-rw-r--r-- | pam.html | 317 | ||||
-rw-r--r-- | pamaddnoise.html | 197 | ||||
-rw-r--r-- | pamarith.html | 253 | ||||
-rw-r--r-- | pambackground.html | 128 | ||||
-rw-r--r-- | pambayer.html | 103 | ||||
-rw-r--r-- | pamchannel.html | 87 | ||||
-rw-r--r-- | pamcomp.html | 310 | ||||
-rw-r--r-- | pamcut.html | 204 | ||||
-rw-r--r-- | pamdeinterlace.html | 97 | ||||
-rw-r--r-- | pamdepth.html | 71 | ||||
-rw-r--r-- | pamdice.html | 141 | ||||
-rw-r--r-- | pamditherbw.html | 155 | ||||
-rw-r--r-- | pamedge.html | 82 | ||||
-rw-r--r-- | pamendian.html | 71 | ||||
-rw-r--r-- | pamenlarge.html | 81 | ||||
-rw-r--r-- | pamfile.html | 107 | ||||
-rw-r--r-- | pamflip.html | 213 | ||||
-rw-r--r-- | pamfunc.html | 166 | ||||
-rw-r--r-- | pamgauss.html | 128 | ||||
-rw-r--r-- | pamgradient.html | 108 | ||||
-rw-r--r-- | pamlookup.html | 294 | ||||
-rw-r--r-- | pammasksharpen.html | 142 | ||||
-rw-r--r-- | pammixinterlace.html | 75 | ||||
-rw-r--r-- | pamoil.html | 94 | ||||
-rw-r--r-- | pamperspective.html | 497 | ||||
-rw-r--r-- | pampick.html | 78 | ||||
-rw-r--r-- | pampop9.html | 96 | ||||
-rw-r--r-- | pamrgbatopng.html | 78 | ||||
-rw-r--r-- | pamscale.html | 573 | ||||
-rw-r--r-- | pamseq.html | 110 | ||||
-rw-r--r-- | pamsharpmap.html | 79 | ||||
-rw-r--r-- | pamsharpness.html | 66 | ||||
-rw-r--r-- | pamslice.html | 130 | ||||
-rw-r--r-- | pamsplit.html | 86 | ||||
-rw-r--r-- | pamstack.html | 102 | ||||
-rw-r--r-- | pamstereogram.html | 286 | ||||
-rw-r--r-- | pamstretch-gen.html | 68 | ||||
-rw-r--r-- | pamstretch.html | 131 | ||||
-rw-r--r-- | pamsumm.html | 137 | ||||
-rw-r--r-- | pamsummcol.html | 135 | ||||
-rw-r--r-- | pamthreshold.html | 148 | ||||
-rw-r--r-- | pamtilt.html | 175 | ||||
-rw-r--r-- | pamtodjvurle.html | 76 | ||||
-rw-r--r-- | pamtofits.html | 91 | ||||
-rw-r--r-- | pamtogif.html | 327 | ||||
-rw-r--r-- | pamtohdiff.html | 97 | ||||
-rw-r--r-- | pamtohtmltbl.html | 99 | ||||
-rw-r--r-- | pamtojpeg2k.html | 227 | ||||
-rw-r--r-- | pamtopfm.html | 108 | ||||
-rw-r--r-- | pamtopnm.html | 92 | ||||
-rw-r--r-- | pamtosvg.html | 214 | ||||
-rw-r--r-- | pamtotga.html | 126 | ||||
-rw-r--r-- | pamtotiff.html | 510 | ||||
-rw-r--r-- | pamtouil.html | 89 | ||||
-rw-r--r-- | pamtoxvmini.html | 48 | ||||
-rw-r--r-- | pamx.html | 247 | ||||
-rw-r--r-- | pbm.html | 156 | ||||
-rw-r--r-- | pbmclean.html | 114 | ||||
-rw-r--r-- | pbmlife.html | 51 | ||||
-rw-r--r-- | pbmmake.html | 65 | ||||
-rw-r--r-- | pbmmask.html | 107 | ||||
-rw-r--r-- | pbmpage.html | 111 | ||||
-rw-r--r-- | pbmpscale.html | 74 | ||||
-rw-r--r-- | pbmreduce.html | 82 | ||||
-rw-r--r-- | pbmtext.html | 221 | ||||
-rw-r--r-- | pbmtextps.html | 121 | ||||
-rw-r--r-- | pbmto10x.html | 61 | ||||
-rw-r--r-- | pbmto4425.html | 72 | ||||
-rw-r--r-- | pbmtoascii.html | 74 | ||||
-rw-r--r-- | pbmtoatk.html | 49 | ||||
-rw-r--r-- | pbmtobbnbg.html | 64 | ||||
-rw-r--r-- | pbmtocmuwm.html | 49 | ||||
-rw-r--r-- | pbmtodjvurle.html | 57 | ||||
-rw-r--r-- | pbmtoepsi.html | 112 | ||||
-rw-r--r-- | pbmtoepson.html | 116 | ||||
-rw-r--r-- | pbmtoescp2.html | 135 | ||||
-rw-r--r-- | pbmtog3.html | 84 | ||||
-rw-r--r-- | pbmtogem.html | 56 | ||||
-rw-r--r-- | pbmtogo.html | 54 | ||||
-rw-r--r-- | pbmtoibm23xx.html | 91 | ||||
-rw-r--r-- | pbmtoicon.html | 50 | ||||
-rw-r--r-- | pbmtolj.html | 125 | ||||
-rw-r--r-- | pbmtoln03.html | 76 | ||||
-rw-r--r-- | pbmtolps.html | 62 | ||||
-rw-r--r-- | pbmtomacp.html | 76 | ||||
-rw-r--r-- | pbmtomatrixorbital.html | 59 | ||||
-rw-r--r-- | pbmtomda.html | 84 | ||||
-rw-r--r-- | pbmtomgr.html | 49 | ||||
-rw-r--r-- | pbmtomrf.html | 66 | ||||
-rw-r--r-- | pbmtonokia.html | 133 | ||||
-rw-r--r-- | pbmtopgm.html | 84 | ||||
-rw-r--r-- | pbmtopi3.html | 51 | ||||
-rw-r--r-- | pbmtopk.html | 161 | ||||
-rw-r--r-- | pbmtoplot.html | 52 | ||||
-rw-r--r-- | pbmtoppa.html | 317 | ||||
-rw-r--r-- | pbmtopsg3.html | 77 | ||||
-rw-r--r-- | pbmtoptx.html | 50 | ||||
-rw-r--r-- | pbmtowbmp.html | 59 | ||||
-rw-r--r-- | pbmtox10bm.html | 17 | ||||
-rw-r--r-- | pbmtoxbm.html | 75 | ||||
-rw-r--r-- | pbmtoybm.html | 52 | ||||
-rw-r--r-- | pbmtozinc.html | 51 | ||||
-rw-r--r-- | pbmupc.html | 86 | ||||
-rw-r--r-- | pc1toppm.html | 55 | ||||
-rw-r--r-- | pcdindex.html | 9 | ||||
-rw-r--r-- | pcdovtoppm.html | 114 | ||||
-rw-r--r-- | pcxtoppm.html | 97 | ||||
-rw-r--r-- | pfm.html | 82 | ||||
-rw-r--r-- | pfmtopam.html | 87 | ||||
-rw-r--r-- | pgm.html | 197 | ||||
-rw-r--r-- | pgmabel.html | 129 | ||||
-rw-r--r-- | pgmbentley.html | 56 | ||||
-rw-r--r-- | pgmcrater.html | 203 | ||||
-rw-r--r-- | pgmdeshadow.html | 77 | ||||
-rw-r--r-- | pgmedge.html | 20 | ||||
-rw-r--r-- | pgmenhance.html | 67 | ||||
-rw-r--r-- | pgmhist.html | 52 | ||||
-rw-r--r-- | pgmkernel.html | 94 | ||||
-rw-r--r-- | pgmmake.html | 77 | ||||
-rw-r--r-- | pgmmedian.html | 135 | ||||
-rw-r--r-- | pgmminkowski.html | 98 | ||||
-rw-r--r-- | pgmmorphconv.html | 110 | ||||
-rw-r--r-- | pgmnoise.html | 52 | ||||
-rw-r--r-- | pgmnorm.html | 20 | ||||
-rw-r--r-- | pgmoil.html | 20 | ||||
-rw-r--r-- | pgmramp.html | 108 | ||||
-rw-r--r-- | pgmslice.html | 23 | ||||
-rw-r--r-- | pgmtexture.html | 89 | ||||
-rw-r--r-- | pgmtofs.html | 54 | ||||
-rw-r--r-- | pgmtolispm.html | 73 | ||||
-rw-r--r-- | pgmtopbm.html | 50 | ||||
-rw-r--r-- | pgmtopgm.html | 65 | ||||
-rw-r--r-- | pgmtoppm.html | 121 | ||||
-rw-r--r-- | pi1toppm.html | 55 | ||||
-rw-r--r-- | pi3topbm.html | 53 | ||||
-rw-r--r-- | picttoppm.html | 175 | ||||
-rw-r--r-- | pjtoppm.html | 59 | ||||
-rw-r--r-- | pktopbm.html | 79 | ||||
-rw-r--r-- | pngtopnm.html | 172 | ||||
-rw-r--r-- | pnm.html | 62 | ||||
-rw-r--r-- | pnmalias.html | 102 | ||||
-rw-r--r-- | pnmarith.html | 29 | ||||
-rw-r--r-- | pnmcat.html | 91 | ||||
-rw-r--r-- | pnmcolormap.html | 229 | ||||
-rw-r--r-- | pnmcomp.html | 69 | ||||
-rw-r--r-- | pnmconvol.html | 163 | ||||
-rw-r--r-- | pnmcrop.html | 188 | ||||
-rw-r--r-- | pnmcut.html | 66 | ||||
-rw-r--r-- | pnmdepth.html | 31 | ||||
-rw-r--r-- | pnmenlarge.html | 20 | ||||
-rw-r--r-- | pnmfile.html | 20 | ||||
-rw-r--r-- | pnmflip.html | 25 | ||||
-rw-r--r-- | pnmgamma.html | 314 | ||||
-rw-r--r-- | pnmhisteq.html | 198 | ||||
-rw-r--r-- | pnmhistmap.html | 188 | ||||
-rw-r--r-- | pnmindex.html | 138 | ||||
-rw-r--r-- | pnminterp.html | 20 | ||||
-rw-r--r-- | pnminvert.html | 57 | ||||
-rw-r--r-- | pnmmargin.html | 76 | ||||
-rw-r--r-- | pnmmontage.html | 123 | ||||
-rw-r--r-- | pnmnlfilt.html | 178 | ||||
-rw-r--r-- | pnmnoraw.html | 24 | ||||
-rw-r--r-- | pnmnorm.html | 241 | ||||
-rw-r--r-- | pnmpad.html | 167 | ||||
-rw-r--r-- | pnmpaste.html | 100 | ||||
-rw-r--r-- | pnmpsnr.html | 71 | ||||
-rw-r--r-- | pnmquant.html | 76 | ||||
-rw-r--r-- | pnmremap.html | 267 | ||||
-rw-r--r-- | pnmrotate.html | 138 | ||||
-rw-r--r-- | pnmscale.html | 65 | ||||
-rw-r--r-- | pnmscalefixed.html | 71 | ||||
-rw-r--r-- | pnmshear.html | 128 | ||||
-rw-r--r-- | pnmsmooth.html | 113 | ||||
-rw-r--r-- | pnmsplit.html | 27 | ||||
-rw-r--r-- | pnmstitch.html | 135 | ||||
-rw-r--r-- | pnmtile.html | 62 | ||||
-rw-r--r-- | pnmtoddif.html | 87 | ||||
-rw-r--r-- | pnmtofiasco.html | 372 | ||||
-rw-r--r-- | pnmtofits.html | 19 | ||||
-rw-r--r-- | pnmtojbig.html | 285 | ||||
-rw-r--r-- | pnmtojpeg.html | 534 | ||||
-rw-r--r-- | pnmtopalm.html | 313 | ||||
-rw-r--r-- | pnmtopclxl.html | 191 | ||||
-rw-r--r-- | pnmtoplainpnm.html | 24 | ||||
-rw-r--r-- | pnmtopng.html | 464 | ||||
-rw-r--r-- | pnmtopnm.html | 78 | ||||
-rw-r--r-- | pnmtops.html | 385 | ||||
-rw-r--r-- | pnmtorast.html | 64 | ||||
-rw-r--r-- | pnmtorle.html | 122 | ||||
-rw-r--r-- | pnmtosgi.html | 87 | ||||
-rw-r--r-- | pnmtosir.html | 55 | ||||
-rw-r--r-- | pnmtotiff.html | 19 | ||||
-rw-r--r-- | pnmtotiffcmyk.html | 224 | ||||
-rw-r--r-- | pnmtoxwd.html | 68 | ||||
-rw-r--r-- | ppm.html | 187 | ||||
-rw-r--r-- | ppm3d.html | 64 | ||||
-rw-r--r-- | ppmbrighten.html | 166 | ||||
-rw-r--r-- | ppmchange.html | 172 | ||||
-rw-r--r-- | ppmcie.html | 395 | ||||
-rw-r--r-- | ppmcolormask.html | 139 | ||||
-rw-r--r-- | ppmcolors.html | 13 | ||||
-rw-r--r-- | ppmdcfont.html | 59 | ||||
-rw-r--r-- | ppmddumpfont.html | 50 | ||||
-rw-r--r-- | ppmdim.html | 57 | ||||
-rw-r--r-- | ppmdist.html | 88 | ||||
-rw-r--r-- | ppmdither.html | 88 | ||||
-rw-r--r-- | ppmdmkfont.html | 53 | ||||
-rw-r--r-- | ppmdraw.html | 255 | ||||
-rw-r--r-- | ppmfade.html | 173 | ||||
-rw-r--r-- | ppmflash.html | 72 | ||||
-rw-r--r-- | ppmforge.html | 395 | ||||
-rw-r--r-- | ppmglobe.html | 148 | ||||
-rw-r--r-- | ppmhist.html | 168 | ||||
-rw-r--r-- | ppmlabel.html | 195 | ||||
-rw-r--r-- | ppmmake.html | 89 | ||||
-rw-r--r-- | ppmmix.html | 64 | ||||
-rw-r--r-- | ppmnorm.html | 20 | ||||
-rw-r--r-- | ppmntsc.html | 119 | ||||
-rw-r--r-- | ppmpat.html | 123 | ||||
-rw-r--r-- | ppmquant.html | 92 | ||||
-rw-r--r-- | ppmquantall.html | 77 | ||||
-rw-r--r-- | ppmrainbow.html | 132 | ||||
-rw-r--r-- | ppmrelief.html | 57 | ||||
-rw-r--r-- | ppmrough.html | 180 | ||||
-rw-r--r-- | ppmshadow.html | 295 | ||||
-rw-r--r-- | ppmshift.html | 90 | ||||
-rw-r--r-- | ppmspread.html | 58 | ||||
-rw-r--r-- | ppmsvgalib.html | 131 | ||||
-rw-r--r-- | ppmtoacad.html | 174 | ||||
-rw-r--r-- | ppmtoarbtxt.html | 215 | ||||
-rw-r--r-- | ppmtobmp.html | 109 | ||||
-rw-r--r-- | ppmtoeyuv.html | 56 | ||||
-rw-r--r-- | ppmtogif.html | 75 | ||||
-rw-r--r-- | ppmtoicr.html | 147 | ||||
-rw-r--r-- | ppmtoilbm.html | 217 | ||||
-rw-r--r-- | ppmtojpeg.html | 21 | ||||
-rw-r--r-- | ppmtoleaf.html | 55 | ||||
-rw-r--r-- | ppmtolj.html | 99 | ||||
-rw-r--r-- | ppmtomap.html | 45 | ||||
-rw-r--r-- | ppmtomitsu.html | 135 | ||||
-rw-r--r-- | ppmtompeg-par.gif | bin | 0 -> 37399 bytes | |||
-rw-r--r-- | ppmtompeg-snr.gif | bin | 0 -> 2352 bytes | |||
-rw-r--r-- | ppmtompeg.html | 1291 | ||||
-rw-r--r-- | ppmtoneo.html | 55 | ||||
-rw-r--r-- | ppmtopcx.html | 205 | ||||
-rw-r--r-- | ppmtopgm.html | 78 | ||||
-rw-r--r-- | ppmtopi1.html | 54 | ||||
-rw-r--r-- | ppmtopict.html | 71 | ||||
-rw-r--r-- | ppmtopj.html | 145 | ||||
-rw-r--r-- | ppmtopjxl.html | 102 | ||||
-rw-r--r-- | ppmtoppm.html | 69 | ||||
-rw-r--r-- | ppmtopuzz.html | 53 | ||||
-rw-r--r-- | ppmtorgb3.html | 63 | ||||
-rw-r--r-- | ppmtosixel.html | 100 | ||||
-rw-r--r-- | ppmtoterm.html | 100 | ||||
-rw-r--r-- | ppmtotga.html | 20 | ||||
-rw-r--r-- | ppmtouil.html | 15 | ||||
-rw-r--r-- | ppmtowinicon.html | 132 | ||||
-rw-r--r-- | ppmtoxpm.html | 185 | ||||
-rw-r--r-- | ppmtoyuv.html | 82 | ||||
-rw-r--r-- | ppmtoyuvsplit.html | 72 | ||||
-rw-r--r-- | ppmtv.html | 62 | ||||
-rw-r--r-- | ppmwheel.html | 72 | ||||
-rw-r--r-- | psidtopgm.html | 69 | ||||
-rw-r--r-- | pstopnm.html | 389 | ||||
-rw-r--r-- | qrttoppm.html | 49 | ||||
-rw-r--r-- | rasttopnm.html | 54 | ||||
-rw-r--r-- | rawtopgm.html | 170 | ||||
-rw-r--r-- | rawtoppm.html | 109 | ||||
-rw-r--r-- | rgb3toppm.html | 58 | ||||
-rw-r--r-- | rlatopam.html | 59 | ||||
-rw-r--r-- | rletopnm.html | 147 | ||||
-rw-r--r-- | sbigtopgm.html | 54 | ||||
-rw-r--r-- | sgitopnm.html | 86 | ||||
-rw-r--r-- | sirtopnm.html | 54 | ||||
-rw-r--r-- | sldtoppm.html | 187 | ||||
-rw-r--r-- | spctoppm.html | 51 | ||||
-rw-r--r-- | spottopgm.html | 102 | ||||
-rw-r--r-- | sputoppm.html | 51 | ||||
-rw-r--r-- | testimg.png | bin | 0 -> 49268 bytes | |||
-rw-r--r-- | testimg_histbar.png | bin | 0 -> 1102 bytes | |||
-rw-r--r-- | testimg_histdot.png | bin | 0 -> 1014 bytes | |||
-rw-r--r-- | tgatoppm.html | 87 | ||||
-rw-r--r-- | thinkjettopbm.html | 70 | ||||
-rw-r--r-- | tifftopnm.html | 300 | ||||
-rw-r--r-- | vidtoppm.html | 23 | ||||
-rw-r--r-- | wbmptopbm.html | 61 | ||||
-rw-r--r-- | winicontoppm.html | 101 | ||||
-rw-r--r-- | xbmtopbm.html | 52 | ||||
-rw-r--r-- | ximtoppm.html | 82 | ||||
-rw-r--r-- | xpmtoppm.html | 101 | ||||
-rw-r--r-- | xvminitoppm.html | 53 | ||||
-rw-r--r-- | xwdtopnm.html | 90 | ||||
-rw-r--r-- | ybmtopbm.html | 52 | ||||
-rw-r--r-- | yuvsplittoppm.html | 72 | ||||
-rw-r--r-- | yuvtoppm.html | 66 | ||||
-rw-r--r-- | zeisstopnm.html | 71 |
362 files changed, 46252 insertions, 0 deletions
diff --git a/411toppm.html b/411toppm.html new file mode 100644 index 00000000..e4156b53 --- /dev/null +++ b/411toppm.html @@ -0,0 +1,73 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>411toppm User Manual</TITLE></HEAD> +<BODY> +<H1>411toppm</H1> +Updated: 03 March 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="ixAAB"></A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +411toppm - convert Sony Mavica .411 image to PPM +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>411toppm</B> +[<B>-width </B><I>width</I>] +[<B>-height </B><I>height</I>] +[<I>411file</I>] + +<P> +All options may be abbreviated to the shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p> <b>411toppm</b> reads a .411 file, such as from a Sony Mavic +camera, and converts it to a PPM image as output. + +<P> +Output is to Standard Output. +<P> +The originator of this program and decipherer of the .411 format, +Steve Allen +<<A HREF="mailto:sla@alumni.caltech.edu">sla@alumni.caltech.edu</A>>, +has this to say about the +utility of this program: "There's so little image in a 64x48 thumbnail +(especially when you have the full size JPG file) that the only point +in doing this was to answer the implicit challenge posed by the manual +stating that only the camera can use these files." + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-width</B> + +<DD> +The width (number of columns) of the input image. Default is 64. +<DT><B>-height</B> + +<DD> +The height (number of rows) of the input image. Default is 48. +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B> + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/anytopnm.html b/anytopnm.html new file mode 100644 index 00000000..f40ac8b0 --- /dev/null +++ b/anytopnm.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Anytopnm User Manual</TITLE></HEAD> +<BODY> +<H1>anytopnm</H1> +Updated: 05 September 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +anytopnm - convert an arbitrary type of image file to PBM, PGM, or PPM + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>anytopnm</B> +[<I>file</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>anytopnm</B> converts the input image, which may be in any of +about 100 graphics formats, to PBM, PGM, or PPM format, depending on +that nature of the input image, and outputs it to Standard Output. + +<P>To determine the format of the input, <B>anytopnm</B> uses the +<B>file</B> program (possibly assisted by the magic numbers file +fragment included with Netpbm). If that fails (very few image formats +have magic numbers), <B>anytopnm</B> looks at the filename extension. +If that fails, <B>anytopnm</B> punts. + +<P>The type of the output file depends on the input image. + +<p><b>anytopnm</b> uses the converters for particular graphics formats +that are in the Netpbm package, so it can't convert any format that +you couldn't convert with some other Netpbm program. What +<b>anytopnm</b> adds is the ability to recognize the format and choose +the appropriate Netpbm program to convert it. For example, if you +invoke <b>anytopnm</b> on a PNG file, <b>anytopnm</b> will recognize +that it is a PNG file and therefore <b>pngtopnm</b> knows how to +convert it to PNM, so <b>anytopnm</b> invokes <b>pngtopnm</b>. + +<p><b>anytopnm</b> cannot recognize every possible input format, so you +may still be able to convert an image with a specific Netpbm program when +<b>anytopnm</b> fails to convert it. + +<P>If <B>file</B> indicates that the input file is compressed (either +via Unix compress, gzip, or bzip compression), <B>anytopnm</B> +uncompresses it and proceeds as above with the uncompressed result. + +<P>If <B>file</B> indicates that the input file is encoded by uuencode +or btoa, <B>anytopnm</B> decodes it and proceeds as above with the +decoded result. + +<P>If <I>file</I> is <B>-</B> or not given, <B>anytopnm</B> takes its +input from Standard Input. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamfile.html">pamfile</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B>file</B> man page + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/asciitopgm.html b/asciitopgm.html new file mode 100644 index 00000000..406cc5a6 --- /dev/null +++ b/asciitopgm.html @@ -0,0 +1,85 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Asciitopgm User Manual</TITLE></HEAD> +<BODY> +<H1>asciitopgm</H1> +Updated: 05 September 2003 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="ixAAB"></A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +asciitopgm - convert ASCII graphics into a PGM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>asciitopgm</B> +[<b>-d</b> <i>divisor</I>] +<I>height</i> +<i>width</I> +[<I>asciifile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>asciitopgm</b> reads ASCII data as input and produces a PGM image +with pixel values which are an approximation of the +"brightness" of the ASCII characters, assuming +black-on-white printing. In other words, a capital M is very dark, a +period is very light, and a space is white. + +<p>Obviously, <b>asciitopgm</b> assumes a certain font in assigning +a brightness value to a character. + +<p><b>asciitopgm</b> considers ASCII control characters to be all +white. It assigns special brightnesses to lower case letters which +have nothing to do with what they look like printed. +<b>asciitopgm</b> takes the ASCII character code from the lower 7 bits +of each input byte. But it warns you if the most signficant bit of +any input byte is not zero. + +<p>Input lines which are fewer than <I>width</I> characters are +automatically padded with spaces. + +<P>The <i>divisor</I> value is an integer (decimal) by which the +blackness of an input character is divided; the default value is 1. +You can use this to adjust the brightness of the output: for example, +if the image is too bright, increase the divisor. + +<P>In keeping with (I believe) Fortran line-printer conventions, +input lines beginning with a <b>+</b> (plus) character are assumed to +"overstrike" the previous line, allowing a larger range of +gray values. + +<P>If you're looking for something that creates an image of text, +with that text specified in ASCII, that is something quite different. +Use <b>pbmtext</b> for that. + +<A NAME="lbAE"> </A> + +<H2>SEE ALSO</H2> + +<A HREF="pbmtoascii.html">pbmtoascii</A>, +<A HREF="pbmtext.html">pbmtext</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>) + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/atktopbm.html b/atktopbm.html new file mode 100644 index 00000000..cb129ef6 --- /dev/null +++ b/atktopbm.html @@ -0,0 +1,47 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Atktopbm User Manual</TITLE></HEAD> +<BODY> +<H1>atktopbm</H1> +Updated: 26 September 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="ixAAB"></A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +atktopbm - convert Andrew Toolkit raster object to PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>atktopbm</B> +[<I>atkfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>atktopbm</b> reads an Andrew Toolkit raster object as input. +and produces a PBM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtoatk.html">pbmtoatk</A>, <A HREF="pbm.html">pbm</A> +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Bill Janssen. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/bioradtopgm.html b/bioradtopgm.html new file mode 100644 index 00000000..49534f2e --- /dev/null +++ b/bioradtopgm.html @@ -0,0 +1,67 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Bioradtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>bioradtopgm</H1> +Updated: 28 June 1993 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +bioradtopgm - convert a Biorad confocal file into a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>bioradtopgm</B> +[<B>-image#</B>] +[<I>imagedata</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>bioradtopgm</b> reads a Biorad confocal file as input and +produces a PGM image as output. If the resulting image is upside +down, run it through <B>pamflip -tb</B>. + +<A NAME="ixAAC"></A> +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-image#</B> + +<DD> +A Biorad image file may contain more than one image. With this option, +you can specify which image to extract (only one at a time). The first +image in the file has number zero. If no +image number is supplied, only information about the image size and +the number of images in the input is printed out. No output is produced. +</DL> +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamflip.html">pamflip</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1993 by Oliver Trepte +<BR> + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/blend1.gif b/blend1.gif new file mode 100644 index 00000000..3425350c --- /dev/null +++ b/blend1.gif Binary files differdiff --git a/blend3.gif b/blend3.gif new file mode 100644 index 00000000..ec444b6b --- /dev/null +++ b/blend3.gif Binary files differdiff --git a/blend4.gif b/blend4.gif new file mode 100644 index 00000000..bca864e7 --- /dev/null +++ b/blend4.gif Binary files differdiff --git a/blend6.gif b/blend6.gif new file mode 100644 index 00000000..d259e7e6 --- /dev/null +++ b/blend6.gif Binary files differdiff --git a/blend7.gif b/blend7.gif new file mode 100644 index 00000000..7d79b915 --- /dev/null +++ b/blend7.gif Binary files differdiff --git a/bmptopnm.html b/bmptopnm.html new file mode 100644 index 00000000..0685022a --- /dev/null +++ b/bmptopnm.html @@ -0,0 +1,67 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Bmptopnm User Manual</TITLE></HEAD> +<BODY> +<H1>bmptopnm</H1> +Updated: 24 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +bmptopnm - convert a BMP file into a PBM, PGM, or PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>bmptopnm</B> +[<I>bmpfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>bmptopnm</b> reads a Microsoft Windows or OS/2 BMP file as +input. and produces a PBM, PGM, or PNM image as output. If the input +is colormapped and contains only black and white, the output is PBM. +If the input is colormapped and contains only black white and gray, +the output is PGM. Otherwise, the output is PPM. + +<P><b>bmptopnm</b> understands BMP files compressed with run length +encoding (RLE4/RLE8), but not if that encoding includes a "delta" +(which is rare). <b>bmptopnm</b> recognizes the delta and issues an +error message. + +<p><b>bmptopnm</b> cannot convert BMP files compressed with JPEG or +PNG encoding. It recognizes the compression and issues an error +message. Before Netpbm 10.32 (February 2006), <b>bmptopnm</b> +couldn't convert RLE BMP files either. + +<P>Before Netpbm 10.18 (September 2003), this program could not convert +BMP images with the BI_BITFIELDS format ("compression type"). It would +recognize the format and issue an error message. + +<P><b>bmptopnm</b> cannot convert OS/2 BMP files with 16 bits per +pixel (only because the author did not have a complete specification +for them). It recognizes the format and issues an error message. +Before Netpbm 10.16 (June 2003), it also could not convert Windows BMP +files with 16 bits per pixel. + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmtobmp.html">ppmtobmp</A></B>, +<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1992 by David W. Sanderson. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/bmptoppm.html b/bmptoppm.html new file mode 100644 index 00000000..8fbd6387 --- /dev/null +++ b/bmptoppm.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Bmptoppm User Manual</TITLE> +</HEAD><BODY> +<H1>bmptoppm</H1> +Updated: March 2002 +<BR> +<H2>NAME</H2> +<B>bmptoppm</B> - replaced by bmptopnm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>bmptoppm</b> was replaced in Netpbm 9.25 (March 2002) by +<b><a href="bmptopnm.html">bmptopnm</a></b>. + +<P><B>bmptopnm</b> is backward compatible with <b>bmptoppm</b> except that +it generates PBM and PGM output when it is more appropriate than PPM. + +</BODY> +</HTML> diff --git a/brushtopbm.html b/brushtopbm.html new file mode 100644 index 00000000..36fb0cf9 --- /dev/null +++ b/brushtopbm.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Brushtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>brushtopbm</H1> +Updated: 28 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +brushtopbm - convert a doodle brush file into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>brushtopbm</B> +[<I>brushfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>brushtopbm</b> reads a Xerox doodle brush file as input. and +produces a portable bitmap as output. + +<P>Note that there is currently no pbmtobrush tool. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/cameratopam.html b/cameratopam.html new file mode 100644 index 00000000..57039afa --- /dev/null +++ b/cameratopam.html @@ -0,0 +1,192 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Cameratopam User Manual</TITLE></HEAD> +<BODY> +<H1>pamflip</H1> +Updated: 12 April 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +cameratopam - convert raw camera image to PAM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>cameratopam</b> + +[<i>input_file_name</i>] + +[<b>-identify_only</b>] +[<b>-quick_interpolate</b>] +[<b>-half_size</b>] +[<b>-four_color_rgb</b>] +[<b>-document_mode</b>] +[<b>-balance_auto</b>] +[<b>-balance_camera</b>] +[<b>-red_scale=</b><i>float</i>] +[<b>-blue_scale=</b><i>float</i>] +[<b>-brightness=</b><i>fraction</i>] +[<b>-no_clip_color</b>] +[<b>-rgb</b>] +[<b>-secondary</b>] +[<b>-linear</b>] +[<b>-verbose</b>] + + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and +its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>cameratopam</b> converts from any of dozens of raw camera image +formats to PAM. + +<p>Digital still cameras often can produce images in a special raw +format in addition to something more standard such as TIFF or JFIF +(JPEG). Software supplied with the camera allows you to manipulate +the image using information which is lost when the camera converts to +the common format. A particular camera model often has a unique raw +format. + + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<dl> +<dt><b>-identify_only</b> + +<dd>Report to Standard Error the format of the input image but don't +generate an output image. Program fails if it cannot recognize the +format. + +<dt><b>-verbose</b> + +<dd>Report to Standard Error details of the processing. + +<dt><b>-quick_interpolate</b> + +<dd>Use simple bilinear interpolation for quick results. The default +is to use a slow, high-quality adaptive algorithm. + +<dt><b>-half_size</b> + +<dd>Half-size the output image. Instead of interpolating, reduce +each 2x2 block of sensors to one pixel. Much faster than +<b>-quick_interpolate</b>. + +<dt><b>-four_color_rgb</b> + +<dd>Interpolate RGB as four colors. This causes a slight loss of +detail, so use this only if you see false 2x2 mesh patterns in blue +sky. + +<dt><b>-document_mode</b> + +<dd>Show the raw data as a grayscale image with no interpolation. +This is good for photographing black and white documents. + +<dt><b>-balance_auto</b> + +<dd>Automatic color balance. The default is to use a fixed +color balance based on a white card photographed in sunlight. + +<dt><b>-balance_camera</b> + +<dd>Use the color balance specified by the camera. If +<B>cameratopam</B> can't find this, it prints a warning and reverts to +the default. + +<dt><b>-red_scale=</b><i>float</i> +<dt><b>-blue_scale</b><i>float</i> + +<dd>Further adjust the color balance by multiplying the red and blue +channels by these values. Both default to 1.0. + +<dt><b>-brightness=</b><i>float</i> + +<dd>Change the output brightness. Default is 1.0. + +<dt><b>-no_clip_color</b> + +<dd>By default, <b>cameratoapm</b> clips all colors to prevent pink +hues in the highlights. Combine this option with +<b>-brightness=0.25</b> to leave the image data completely unclipped. + +<dt><b>-rgb</b> + +<dd>Write raw camera colors to the output file. By default, +<b>cameratoapm</b> converts to sRGB colorspace. + +<dt><b>-secondary</b> + +<dd>For cameras based on the Fuji Super CCD SR, this option causes +<b>cameratopam</b> to use the secondary sensors, in effect +underexposing the image by four stops to reveal detail in the +highlights. <b>cameratopam</b> silently ignores this option for all +other cameras. + +<dt><b>-linear</b> + +<dd>This option causes <b>cameratopam</b> to generate a variation on +PAM that has "linear" color samples. In true PAM, each +sample in the image raster is gamma-corrected; i.e. it is essentially +proportional to brightness. With the <b>linear</b> option, +<b>cameratopam</b> generates an image in which the samples are instead +proportional to light intensity. + +<p>Without <b>-linear</b>, the image maxval is 255, so the image +contains one byte per sample. With <b>-linear</b>, the maxval is +65535, so the image contains two bytes per sample. + +<p>Without <b>-linear</b>, <b>cameratopam</b> uses a 99th percentile +white point. With <b>-linear</b>, it doesn't. I don't know what that +means. + +</dl> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="411toppm.html">411toppm</A>, +<A HREF="pamflip.html">pamflip</A>, +<A HREF="pam.html">pam</A>, + +<A NAME="lbAG"> </A> + +<A NAME="history"></A> +<H2>HISTORY</H2> + +<P><b>cameratopam</b> was new in Netpbm 10.28 (June 2005). + +<p>It was derived from the program <a +href="http://www.cybercom.net/~dcoffin/dcraw/"><b>dcraw</b> by Dave +Coffin</a>, by Bryan Henderson in April 2005. Bryan replaced the part +that generates the Netpbm output image and removed the Adobe Photoshop +output function. Bryan changed the command syntax and and made other +small changes to make the program consistent with Netpbm. He also +split the source code into manageable pieces (<b>dcraw</b> has a +single 5000 line source file). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<li><A HREF="#lbAB">NAME</A> +<li><A HREF="#lbAC">SYNOPSIS</A> +<li><A HREF="#lbAD">DESCRIPTION</A> +<li><A HREF="#lbAE">OPTIONS</A> +<li><A HREF="#lbAF">SEE ALSO</A> +<li><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/cmuwmtopbm.html b/cmuwmtopbm.html new file mode 100644 index 00000000..97daf7ac --- /dev/null +++ b/cmuwmtopbm.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Cmuwmtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>cmuwmtopbm</H1> +Updated: 15 April 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="ixAAB"></A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +cmuwmtopbm - convert a CMU window manager bitmap into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>cmuwmtopbm</B> +[<I>cmuwmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>cmuwmtopbm</b> reads a CMU window manager bitmap as input. and +produces a PBM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtocmuwm.html">pbmtocmuwm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ddbugtopbm.html b/ddbugtopbm.html new file mode 100644 index 00000000..8bc6548c --- /dev/null +++ b/ddbugtopbm.html @@ -0,0 +1,116 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ddbugtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>ddbugtopbm</H1> +Updated: 21st August, 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ddbugtopbm - convert Diddle or DiddleBug sketches to PBM files + + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ddbugtopbm</B> + +<A NAME="examples"></A> +<H2>EXAMPLES</H2> + +<pre> +<B>ddbugtopbm </path/to/palm/backup/dir/DiddleBugDB.pdb</B> + +<B>ddbugtopbm </path/to/palm/backup/dir/DiddleDB.pdb</B> + +<B>ddbugtopbm </path/to/palm/backup/dir/DiddleIDB.pdb</B> +</pre> + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ddbugtopbm</b> converts all sketches present in a database used +by the PalmOS programs <b>Diddle</b> or <b>DiddleBug</b> into +appropriately-named PBM files. The backup copy of DiddleBug's +database you should use as this program's input is usually called +<B>DiddleBugDB.pdb</b>. Or if you use the original Diddle, it has two +separate DBs - <B>DiddleDB.pdb</B>, containing unnamed `scratch' +sketches, and <B>DiddleIDB.pdb</B>, containing the saved (and named) +sketches which are listed by its `index' option. You can feed this +program any of these three on standard input. + +<A NAME="lbAE"> </A> +<H2>USING THE PROGRAM</H2> + +<p>I recommend you <em>not</em> run <b>ddbugtopbm</b> from your Palm +backup directory, i.e. don't run it from the directory the DB will +normally be in. Instead, run it from some other directory (perhaps you +could make a directory purely to hold the PBM files, just to keep +things simple) and use an absolute or relative path to the DB. + +<p>The filenames used for the output PBMs are based on the names given +to each sketch; if you have an unnamed sketch, it's given a name along +the lines of <B>sketch-0123.pbm</b>. + +<p>While the named sketches will overwrite any existing PBM file with +the same name, the unnamed ones won't - they'll just try using another +filename. (I think this is probably the right approach, as you can't +really tell the unnamed sketches apart.) + + + +<A NAME="lbAF"> </A> +<H2>BUGS</H2> + +<p>The DiddleBug DB reader is only known to work with DBs from +DiddleBug version 2.50. But it should probably work on later versions, +and I think it'll work on DBs from version 2.15 as well. + +<P>It might fall over if fed an empty database, and doesn't do much +(if any) checking of the input. + + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Russell Marks (<A HREF="mailto:rus@svgalib.org">rus@svgalib.org</A>). + +<P>Mitch Blevins's decompression code is directly from DiddleBug +itself, which like ddbugtopbm is distributed under the terms of the +GNU GPL. + + + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<p> +<a href="palmtopnm.html">palmtopnm</a>, +<A HREF="pbm.html">pbm</A> + +<p>Jens-Chr. Heyer's `didcon' script does something similar. + +<A NAME="history"></A> +<H2>HISTORY</H2> + +<p><b>ddbugtopbm</b> was new in Netpbm 10.18 (August 2003). It was written +and independently distributed in August 2002. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAC">EXAMPLES</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">USING THE PROGRAM</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/directory.html b/directory.html new file mode 100644 index 00000000..1558cb49 --- /dev/null +++ b/directory.html @@ -0,0 +1,1033 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> + +<html><head><title>Directory of Netpbm programs</title></head> + +<body> + +<h1>Netpbm Program Directory</h1> +<BR> +<?makeman .SH NAME ?> +<?makeman netpbm_directory \- netpbm library directory ?> + +<p>We have the programs divided into these categories: + +<ul> +<li><a href="#converters">Converters</a> +<li><a href="#editors">Editors</a> +<li><a href="#generators">Generators</a> +<li><a href="#analyzers">Analyzers</a> +</ul> + + +<H2 id="converters">Converters</H2> + +<DL COMPACT> + +<DT><B><a href=pnmtopnm.html>pnmtopnm</a></B> +<DD>convert PNM image to PNM raw or plain + +<DT><B><a href=pgmtopgm.html>pgmtopgm</a></B> +<DD>convert PGM or PBM image to PGM + +<DT><B><a href=ppmtoppm.html>ppmtoppm</a></B> +<DD>convert PPM, PGM, or PBM image to PPM + +<DT><B><a href=pbmtopgm.html>pbmtopgm</a> </B> +<DD>convert PBM image to PGM by averaging areas + +<DT><B><a href=pgmtopbm.html>pgmtopbm</a> </B> +<DD>(Obsolete) convert PGM image to PBM by dithering + +<DT><B><a href=pgmtoppm.html>pgmtoppm</a> </B> +<DD>colorize a PGM into a PPM + +<DT><B><a href=ppmtopgm.html>ppmtopgm</a> </B> +<DD>convert PPM image to PGM + +<DT><B><a href=ppmtompeg.html>ppmtompeg</a> </B> +<DD> +convert series of PPM frames to an MPEG movie + +<DT><B><a href=jpegtopnm.html>jpegtopnm</a> </B> +<DD> +convert JFIF/JPEG/EXIF file to Netpbm format + +<DT><B><a href=pnmtojpeg.html>pnmtojpeg</a> </B> +<DD> +convert PNM to JPEG/JFIF/EXIF format + +<DT><B><a href=pamtojpeg2k.html>pamtojpeg2k</a> </B> +<DD> +convert PNM/PAM to JPEG-2000 code stream + +<DT><B><a href=jpeg2ktopam.html>jpeg2ktopam</a> </B> +<DD> +convert JPEG-2000 code stream to PAM/PNM + +<DT><B><a href=anytopnm.html>anytopnm</a> </B> +<DD> +convert any graphics format to Netpbm format + +<DT><B><a href=bmptopnm.html>bmptopnm</a> </B> +<DD> +convert Windows or OS/2 Bitmap file to PPM or PGM + +<DT><B><a href=ppmtobmp.html>ppmtobmp</a> </B> +<DD> +convert PPM to Windows or OS/2 Bitmap file + +<DT><B><a href=winicontoppm.html>winicontoppm</a></B> +<DD> +convert Windows icon file to PPM + +<DT><B><a href=ppmtowinicon.html>ppmtowinicon</a></B> +<DD> +convert PPM to Windows icon file + +<DT><B><a href=giftopnm.html>giftopnm</a> </B> +<DD> +convert GIF to PNM + +<DT><B><a href=pamtogif.html>pamtogif</a> </B> +<DD> +convert PAM or PNM to GIF + +<DT><B><a href=ppmtogif.html>ppmtogif</a> </B> +<DD> +obsolete compatibility interface to <b>pamtogif</b> + +<DT><B><a href=pnmtopng.html>pnmtopng</a> </B> +<DD> +convert Netpbm format to Portable Network Graphics + +<DT><B><a href=pngtopnm.html>pngtopnm</a> </B> +<DD> +convert PNG (Portable Network Graphics) to Netpbm formats + +<DT><B><a href=pamrgbatopng.html>pamrgbatopng</a> </B> +<DD> +convert PAM color/transparency image to PNG + +<DT><B><a href=palmtopnm.html>palmtopnm</a> </B> +<DD> +convert Palm pixmap to Netpbm formats + +<DT><B><a href=pnmtopalm.html>pnmtopalm</a> </B> +<DD> +convert Netpbm formats to Palm pixmap + +<DT><B><a href=ddbugtopbm.html>ddbugtopbm</a> </B> +<DD> +convert Palm DiddleBug image to PBM + +<DT><B><a href=jbigtopnm.html>jbigtopnm</a> </B> +<DD> +convert JBIG BIE (compressed bitmap) to PNM + +<DT><B><a href=pamtopnm.html>pamtopnm</a></B> +<DD>convert a PAM image to PBM, PGM, or PPM + +<DT><B><a href=pnmtojbig.html>pnmtojbig</a> </B> +<DD>convert PNM to JBIG BIE (compressed bitmap) + +<DT><B><a href=pnmtofiasco.html>pnmtofiasco</a> </B> +<DD>convert Netpbm image to Fiasco (wfa) highly compressed format + +<DT><B><a href=fiascotopnm.html>fiascotopnm</a> </B> +<DD>convert Fiasco (wfa) highly compressed format to Netpbm image + +<DT><b><a href="pamtosvg.html">pamtosvg</a></b> +<dd>convert Netpbm image to Scalable Vector Graphics (SVG); trace image + +<DT><B><a href=pamtopfm.html>pamtopfm</a> </B> +<DD>convert PAM/PNM to HDRshop PFM (Portable Float Map) + +<DT><B><a href=pfmtopam.html>pfmtopam</a> </B> +<DD>convert HDRshop PFM (Portable Float Map) to PAM + +<DT><B><a href=pbmtomrf.html>pbmtomrf</a> </B> +<DD>convert PBM image to MRF (compressed bitmap) + +<DT><B><a href=mrftopbm.html>mrftopbm</a> </B> +<DD>convert MRF (compressed bitmap) to PBM + +<DT><B><a href=hpcdtoppm.html>hpcdtoppm</a> </B> +<DD>convert photo CD to PPM + +<DT><B><a href=pcdovtoppm.html>pcdovtoppm</a> </B> +<DD>Convert a photo CD PCD overview file to PPM + +<DT><B><a href=pbmtonokia.html>pbmtonokia</a></B> +<DD>convert PBM to Nokia Smart Messaging Format (SMF) + +<DT><B><a href=pbmtowbmp.html>pbmtowbmp</a> </B> +<DD>convert PBM to WAP (Wireless App Protocol) Wireless Bitmap + +<DT><B><a href=wbmptopbm.html>wbmptopbm</a> </B> +<DD>convert WAP (Wireless App Protocol) Wireless Bitmap to PBM + +<DT><B><a href=pamtohtmltbl.html>pamtohtmltbl</a> </B> +<DD>convert PNM/PAM to an HTML table with a colored cell for each pixel + +<DT><B><a href=pbmtomda.html>pbmtomda</a> </B> +<DD>convert from PBM to Microdesign (for Amstrad PCWs) + +<DT><B><a href=mdatopbm.html>mdatopbm</a> </B> +<DD>convert from Microdesign (for Amstrad PCWs) to PBM + +<DT><B><a href=atktopbm.html>atktopbm</a> </B> +<DD>convert Andrew Toolkit raster object to PBM + +<DT><B><a href=pbmtoatk.html>pbmtoatk</a> </B> +<DD>convert PBM to Andrew Toolkit raster object + +<DT><B><a href=brushtopbm.html>brushtopbm</a> </B> +<DD>convert Xerox doodle brushes to PBM + +<DT><B><a href=cmuwmtopbm.html>cmuwmtopbm</a> </B> +<DD>convert CMU window manager format to PBM + +<DT><B><a href=g3topbm.html>g3topbm</a> </B> +<DD>convert Group 3 FAX to PBM + +<DT><B><a href=pbmtog3.html>pbmtog3</a> </B> +<DD>convert PBM to Group 3 FAX + +<DT><B><a href=icontopbm.html>icontopbm</a> </B> +<DD>convert Sun icon to PBM + +<DT><B><a href=pbmtoicon.html>pbmtoicon</a> </B> +<DD>convert PBM to Sun icon + +<DT><B><a href=gemtopnm.html>gemtopnm</a> </B> +<DD>convert GEM .img format to PBM or pixmap + +<DT><B><a href=macptopbm.html>macptopbm</a> </B> +<DD>convert MacPaint to PBM + +<DT><B><a href=pbmtomacp.html>pbmtomacp</a> </B> +<DD>convert PBM to MacPaint + +<DT><B><a href=mgrtopbm.html>mgrtopbm</a> </B> +<DD>convert MGR format to PBM + +<DT><B><a href=pbmtomgr.html>pbmtomgr</a> </B> +<DD>convert PBM to MGR format + +<DT><B><a href=infotopam.html>infotopam</a> </B> +<DD>convert Amiga .info icons to PAM + +<DT><B><a href=neotoppm.html>neotoppm</a></B> +<DD>convert Atari Neochrome (.neo) image to PPM + +<DT><B><a href=ppmtoneo.html>ppmtoneo</a></B> +<DD>convert PPM image to Atari Neochrome (.neo) + +<DT><B><a href=pi1toppm.html>pi1toppm</a> </B> +<DD>convert Atari Degas .pi1 to PPM + +<DT><B><a href=ppmtopi1.html>ppmtopi1</a> </B> +<DD>convert PPM to Atari Degas .pi1 + +<DT><B><a href=pc1toppm.html>pc1toppm</a> </B> +<DD>convert Atari Degas .pc1 (compressed pi1) to PPM + +<DT><B><a href=pi3topbm.html>pi3topbm</a> </B> +<DD>convert Atari Degas .pi3 to PBM + +<DT><B><a href=pbmtopi3.html>pbmtopi3</a> </B> +<DD>convert PBM to Atari Degas .pi3 + +<DT><B><a href=xbmtopbm.html>xbmtopbm</a> </B> +<DD>convert X10 or X11 bitmap to PBM + +<DT><B><a href=pbmtoxbm.html>pbmtoxbm</a> </B> +<DD>convert PBM to X10 or X11 bitmap + +<DT><B><a href=ybmtopbm.html>ybmtopbm</a> </B> +<DD>convert Bennet Yee "face" file into PBM + +<DT><B><a href=pbmtoybm.html>pbmtoybm</a> </B> +<DD>convert PBM into Bennet Yee "face" file + +<DT><B><a href=pbmtoepson.html>pbmtoepson</a> </B> +<DD>convert PBM to Epson 9-pin printer graphics + +<DT><B><a href=pbmtoescp2.html>pbmtoescp2</a> </B> +<DD>convert PBM to Epson ESC/P2 printer graphics + +<DT><B><a href=escp2topbm.html>escp2topbm</a> </B> +<DD>convert Epson ESC/P2 printer graphics to PBM + +<DT><B><a href=pbmto10x.html>pbmto10x</a> </B> +<DD>convert PBM to Gemini 10x printer graphics + +<DT><B><a href=pnmtopclxl.html>pnmtopclxl</a> </B> +<DD>convert PNM to HP PCL-XL (PCL 6) printer language + +<DT><B><a href=ppmtopjxl.html>ppmtopjxl</a></B> +<DD>convert from PPM to HP Paintjet XL PCL printer stream + +<DT><B><a href=pbmtolj.html>pbmtolj</a> </B> +<DD>convert PBM to HP LaserJet black and white graphics + +<DT><B><a href=ppmtolj.html>ppmtolj</a> </B> +<DD>convert PPM to HP LaserJet color graphics (PCL 5) + +<DT><B><a href=pjtoppm.html>pjtoppm</a> </B> +<DD>convert HP PaintJet file to PPM + +<DT><B><a href=ppmtopj.html>ppmtopj</a> </B> +<DD>convert PPM to HP PaintJet file + +<DT><B><a href=thinkjettopbm.html>thinkjettopbm</a></B> +<DD>convert HP Thinkjet printer stream to PBM + +<DT><B><a href=pbmtoppa.html>pbmtoppa</a></B> +<DD>convert PBM to HP PPA (Printer Performance Architecture) printer stream + +<DT><B><a href=ppmtomitsu.html>ppmtomitsu</a></B> +<DD>convert from PPM to Mitsubishi S340-10 printer stream + +<DT><B><a href=pbmtoibm23xx.html>pbmtoibm23xx</a></B> +<DD>convert from PBM to IBM 23XX printer stream + +<DT><B><a href=ppmtoterm.html>ppmtoterm</a> </B> +<DD>Display PPM image on ANSI standard text terminal + +<DT><B><a href=pbmto4425.html>pbmto4425</a> </B> +<DD>Display PBM image on AT&T 4425 ASCII terminal with gfx chars + +<DT><B><a href=pbmtoascii.html>pbmtoascii</a> </B> +<DD>convert PBM to ASCII graphic form + +<DT><B><a href=asciitopgm.html>asciitopgm</a> </B> +<DD>convert ASCII character graphics to PGM + +<DT><B><a href=pbmtobbnbg.html>pbmtobbnbg</a> </B> +<DD>convert PBM to BBN BitGraph graphics + +<DT><B><a href=pbmtocmuwm.html>pbmtocmuwm</a> </B> +<DD>convert PBM to CMU window manager format + +<DT><B><a href=pbmtogem.html>pbmtogem</a> </B> +<DD>convert PBM into GEM .img file + +<DT><B><a href=pbmtogo.html>pbmtogo</a> </B> +<DD>convert PBM to GraphOn graphics + +<DT><B><a href=pbmtoplot.html>pbmtoplot</a> </B> +<DD>convert PBM into Unix <b>plot</b> file + +<DT><B><a href=pbmtoptx.html>pbmtoptx</a> </B> +<DD>convert PBM to Printronix graphics + +<DT><B><a href=pbmtozinc.html>pbmtozinc</a> </B> +<DD>convert PBM to Zinc Interface Library icon + +<DT><B><a href=fitstopnm.html>fitstopnm</a> </B> +<DD>convert FITS format to PNM + +<DT><B><a href=pamtofits.html>pamtofits</a> </B> +<DD>convert Netpbm formats to FITS format + +<DT><B><a href=fstopgm.html>fstopgm</a> </B> +<DD>convert Usenix FaceSaver(tm) format to PGM + +<DT><B><a href=pgmtofs.html>pgmtofs</a> </B> +<DD>convert PGM to Usenix FaceSaver(tm) format + +<DT><B><a href=hipstopgm.html>hipstopgm</a> </B> +<DD>convert HIPS format to PGM + +<DT><B><a href=lispmtopgm.html>lispmtopgm</a> </B> +<DD>convert a Lisp Machine bitmap file into PGM format + +<DT><B><a href=pgmtolispm.html>pgmtolispm</a> </B> +<DD>convert PGM into Lisp Machine format + +<DT><B><a href=pnmtops.html>pnmtops</a> </B> +<DD>convert Netpbm formats to Postscript + +<DT><B><a href=pstopnm.html>pstopnm</a> </B> +<DD>convert Postscript to Netpbm formats + +<DT><B><a href=psidtopgm.html>psidtopgm</a> </B> +<DD>convert PostScript "image" data to PGM + +<DT><B><a href=pbmtolps.html>pbmtolps</a> </B> +<DD>convert PBM image to Postscript using lines + +<DT><B><a href=pbmtoepsi.html>pbmtoepsi</a> </B> +<DD>convert a PBM image to encapsulated Postscript preview bitmap + +<DT><B><a href=pbmtopsg3.html>pbmtopsg3</a></B> +<DD>convert PBM images to Postscript using G3 fax compression. + +<DT><B><a href=rawtopgm.html>rawtopgm</a> </B> +<DD>convert raw grayscale bytes to PGM + +<DT><B><a href=gouldtoppm.html>gouldtoppm</a> </B> +<DD>convert Gould scanner file to PPM + +<DT><B><a href=ilbmtoppm.html>ilbmtoppm</a> </B> +<DD>convert IFF ILBM to PPM + +<DT><B><a href=ppmtoilbm.html>ppmtoilbm</a> </B> +<DD>convert PPM to IFF ILBM + +<DT><B><a href=imgtoppm.html>imgtoppm</a> </B> +<DD>convert Img-whatnot to PPM + +<DT><B><a href=mtvtoppm.html>mtvtoppm</a> </B> +<DD>convert MTV ray-tracer output to PPM + +<DT><B><a href=pcxtoppm.html>pcxtoppm</a> </B> +<DD>convert PC Paintbrush format to PPM + +<DT><B><a href=picttoppm.html>picttoppm</a> </B> +<DD>convert Macintosh PICT to PPM + +<DT><B><a href=ppmtopict.html>ppmtopict</a> </B> +<DD>convert PPM to Macintosh PICT + +<DT><B><a href=qrttoppm.html>qrttoppm</a> </B> +<DD>convert QRT ray-tracer output to PPM + +<DT><B><a href=rawtoppm.html>rawtoppm</a> </B> +<DD>convert raw RGB bytes to PPM + +<DT><B><a href=sldtoppm.html>sldtoppm</a> </B> +<DD>convert an AutoCAD slide file into a PPM + +<DT><B><a href=spctoppm.html>spctoppm</a> </B> +<DD>convert Atari compressed Spectrum to PPM + +<DT><B><a href=sputoppm.html>sputoppm</a> </B> +<DD>convert Atari uncompressed Spectrum to PPM + +<DT><B><a href=tgatoppm.html>tgatoppm</a> </B> +<DD>convert TrueVision Targa file to PPM + +<DT><B><a href=pamtotga.html>pamtotga</a> </B> +<DD>convert PAM to TrueVision Targa file + +<DT><B><a href=ximtoppm.html>ximtoppm</a> </B> +<DD>convert Xim to PPM + +<DT><B><a href=xpmtoppm.html>xpmtoppm</a> </B> +<DD>convert XPM format to PPM + +<DT><B><a href=ppmtoxpm.html>ppmtoxpm</a> </B> +<DD>convert PPM to XPM format + +<DT><B><a href=yuvtoppm.html>yuvtoppm</a> </B> +<DD>convert Abekas YUV format to PPM + +<DT><B><a href=eyuvtoppm.html>eyuvtoppm</a> </B> +<DD>convert Encoder/Berkeley YUV format to PPM + +<DT><B><a href=ppmtoeyuv.html>ppmtoeyuv</a> </B> +<DD>convert PPM to Encoder/Berkeley YUV format + +<DT><B><a href=ppmtoyuv.html>ppmtoyuv</a> </B> +<DD>convert PPM to Abekas YUV format + +<DT><B><a href=ppmtoyuvsplit.html>ppmtoyuvsplit</a></B> +<DD>convert PPM to 3 subsampled raw Stanford MPEG YUV files + +<DT><B><a href=yuvsplittoppm.html>yuvsplittoppm</a> </B> +<DD>merge 3 subsampled raw YUV files to one PPM + +<DT><B><a href=ppmtoacad.html>ppmtoacad</a> </B> +<DD>convert PPM to AutoCAD database or slide + +<DT><B><a href=ppmtoicr.html>ppmtoicr</a> </B> +<DD>convert PPM to NCSA ICR graphics + +<DT><B><a href=ppmtopcx.html>ppmtopcx</a> </B> +<DD>convert PPM to PC Paintbrush format + +<DT><B><a href=ppmtopuzz.html>ppmtopuzz</a> </B> +<DD>convert PPM to X11 "puzzle" file + +<DT><B><a href=rasttopnm.html>rasttopnm</a> </B> +<DD>convert Sun raster file to Netpbm formats + +<DT><B><a href=pnmtorast.html>pnmtorast</a> </B> +<DD>convert Netpbm formats to Sun raster file + +<DT><B><a href=tifftopnm.html>tifftopnm</a> </B> +<DD>convert TIFF file to PNM + +<DT><B><a href=pamtotiff.html>pamtotiff</a> </B> +<DD>convert Netpbm formats to TIFF RGB file + +<DT><B><a href=pnmtotiffcmyk.html>pnmtotiffcmyk</a></B> +<DD>convert Netpbm formats to TIFF CMYK file + +<DT><B><a href=xwdtopnm.html>xwdtopnm</a> </B> +<DD>convert X10 or X11 window dump to Netpbm formats + +<DT><B><a href=pnmtoxwd.html>pnmtoxwd</a> </B> +<DD>convert Netpbm formats to X11 window dump + +<DT><B><a href=cameratopam.html>cameratopam</a></B> +<DD>convert raw camera image to PAM + +<DT><B><a href=411toppm.html>411toppm</a> </B> +<DD>convert 411 (Sony Mavica) to PPM + +<DT><B><a href=ppmtosixel.html>ppmtosixel</a> </B> +<DD>convert PPM to DEC sixel format + +<DT><B><a href=ppmtouil.html>ppmtouil</a> </B> +<DD>convert PPM to Motif UIL icon file + +<DT><B><a href=sbigtopgm.html>sbigtopgm</a> </B> +<DD>convert Santa Barbara Instrument Group CCD file to PGM + +<DT><B><a href=vidtoppm.html>vidtoppm</a> </B> +<DD>convert Parallax XVideo JPEG to sequence of PPM files + +<DT><B><a href=pnmtorle.html>pnmtorle</a> </B> +<DD>convert PNM to Utah Raster Toolkit (urt/rle) file + +<DT><B><a href=rletopnm.html>rletopnm</a> </B> +<DD>convert Utah Raster Toolkit (urt/rle) file to PNM + +<DT><B><a href=pamtodjvurle.html>pamtodjvurle</a> </B> +<DD>convert PNM/PAM to DjVu Color RLE format + +<DT><B><a href=pbmtodjvurle.html>pbmtodjvurle</a> </B> +<DD>convert PBM to DjVu Bitonal RLE format + +<DT><B><a href=rlatopam.html>rlatopam</a></B> +<DD>convert Alias/Wavefront RLA and RPF to PAM + +<DT><B><a href=ppmtoleaf.html>ppmtoleaf</a> </B> +<DD>convert PPM to Interleaf + +<DT><B><a href=leaftoppm.html>leaftoppm</a> </B> +<DD>convert Interleaf to PPM + +<DT><B><a href=bioradtopgm.html>bioradtopgm</a> </B> +<DD>convert Biorad confocal image to PGM + +<DT><B><a href=pbmtoln03.html>pbmtoln03</a> </B> +<DD>convert PGM image to Dec LN03+ Sixel image + +<DT><B><a href=pbmtopk.html>pbmtopk</a> </B> +<DD>convert PBM image to packed format (PK) font + +<DT><B><a href=pktopbm.html>pktopbm</a> </B> +<DD>convert packed format (PK) font to PBM image + +<DT><B><a href=pamtohdiff.html>pamtohdiff</a></B> +<DD>convert PAM image to horizontal difference version of same + +<DT><B><a href=hdifftopam.html>hdifftopam</a></B> +<DD>convert horizontal difference PAM back to original image + +<DT><B><a href=pnmtoddif.html>pnmtoddif</a></B> +<DD>convert from Netpbm formats to DDIF + +<DT><B><a href=pnmtosgi.html>pnmtosgi</a></B> +<DD>convert from Netpbm formats to SGI format + +<DT><B><a href=sgitopnm.html>sgitopnm</a></B> +<DD>convert from SGI format to Netpbm formats + +<DT><B><a href=pnmtosir.html>pnmtosir</a></B> +<DD>convert from Netpbm formats to Solitaire Image Recorder file +(MGI Type 11 or 17) + +<DT><B><a href=sirtopnm.html>sirtopnm</a></B> +<DD>convert from Solitaire Image Recorder file to Netpbm formats. + +<DT><B><a href=spottopgm.html>spottopgm</a></B> +<DD>convert SPOT satellite image to PGM + +<DT><B><a href=pamtoxvmini.html>pamtovmini</a></B> +<DD>convert from Netpbm formats to Xv "thumbnail" picture + +<DT><B><a href=xvminitoppm.html>xvminitoppm</a></B> +<DD>convert Xv "thumbnail" picture to PPM + +<DT><B><a href=zeisstopnm.html>zeisstopnm</a></B> +<DD>convert a Zeiss confocal file to Netpbm format + +<DT><B><a href=ppmtoarbtxt.html>ppmtoarbtxt.html</a></B> +<DD>convert PPM to just about any text-based format, using a grammar file + +</DL> + + + +<H2 id="generators">Image Generators</H2> + +<P> +All of these generate Netpbm format output. + +<DL COMPACT> + +<DT><a href=pbmmake.html><b>pbmmake</b></a> +<DD>create a blank PBM image of a specified size + +<DT><a href=pgmmake.html><b>pgmmake</b></a> +<DD>create a PGM image of a specified size and shade of gray + +<DT><a href=ppmmake.html><b>ppmmake</b></a> +<DD>create a PPM image of a specified size and color + +<DT><a href=pgmramp.html><b>pgmramp</b></a> +<DD>generate a grayscale ramp (gradient) + +<DT><a href=pamgradient.html><b>pamgradient</b></a> +<DD>create a four-corner gradient image + +<DT><a href=ppmpat.html><b>ppmpat</b></a> +<DD>create a pretty PPM image + +<DT><a href=ppmrainbow.html><b>ppmrainbow</b></a> +<DD>create a spectrum-like image with colors fading together. + +<DT><a href=ppmrough.html><b>ppmrough</b></a> +<DD>create PPM image of two colors with a ragged border between them + +<DT><a href=pgmnoise.html><b>pgmnoise</b></a> +<DD>create a PGM image of white noise + +<DT><a href=pbmtext.html><b>pbmtext</b></a> +<DD>render text into a PBM image + +<DT><B><a href=pbmtextps.html>pbmtextps</a> </B> +<DD> + render text into a PBM image using a Postscript interpreter + +<DT><B><a href=pbmupc.html>pbmupc</a> </B> +<DD> + create a Universal Product Code PBM image + +<DT><B><a href=pamstereogram.html>pamstereogram</a> </B> +<DD> + create a single image stereogram from a height map + +<DT><B><a href=ppmwheel.html>ppmwheel</a> </B> +<DD> + generate a hue-value color wheel + +<DT><B><a href=ppmcie.html>ppmcie</a> </B> +<DD> + generate a CIE color map PPM image + +<DT><B><a href=pbmpage.html>pbmpage</a> </B> +<DD> + create a printer test pattern page in PBM format + +<DT><B><a href=pamseq.html>pamseq</a></B> +<DD> + create a PAM image of all possible tuple values. E.g. + a color map containing all possible colors of given maxval + +<DT><B><a href=pamgauss.html>pamgauss</a></B> +<DD> + create a PAM image of a Gaussian (bell curve; normal curve) function. + +<DT><B><a href=ppm3d.html>ppm3d</a></B> +<DD>generate a blue/green 3D glasses image from two images + +</DL> + + +<H2 id="editors">Image Editors</H2> + +<P>All of these work on the Netpbm formats + +<DL COMPACT> +<DT><B><a href=ppmlabel.html>ppmlabel</a> </B> +<DD>Add text to an image + +<DT><B><a href=ppmdraw.html>ppmdraw</a> </B> +<DD>Draw text, lines, shapes, etc. on an image + +<DT><B><a href=ppmshadow.html>ppmshadow</a></B> +<DD>add a shadow to an image so it looks like it's floating + +<DT><B><a href=pgmdeshadow.html>pgmdeshadow</a></B> +<DD>deshadow a PGM image + +<DT><B><a href=ppmbrighten.html>ppmbrighten</a> </B> +<DD>brighten or dim an image -- change saturation and value + +<DT><B><a href=ppmflash.html>ppmflash</a></B> +<DD>brighten an image + +<DT><B><a href=ppmdim.html>ppmdim</a> </B> +<DD>dim an image - different way from ppmbrighten + +<DT><B><a href=ppmfade.html>ppmfade</a></B> +<DD>Produce series of images fading from one to another + +<DT><B><a href=pbmreduce.html>pbmreduce</a> </B> +<DD>reduce a PBM N times, using Floyd-Steinberg + +<DT><B><a href=pnmnorm.html>pnmnorm</a> </B> +<DD>normalize contrast + +<DT><B><a href=pbmpscale.html>pbmpscale</a> </B> +<DD>enlarge a PBM image with edge smoothing + +<DT><B><a href=pamscale.html>pamscale</a> </B> +<DD>scale/resample an image with high precision + +<DT><B><a href=pnmscale.html>pnmscale</a> </B> +<DD>scale an image with high precision - obsolete + +<DT><B><a href=pnmscalefixed.html>pnmscalefixed</a> </B> +<DD>scale an image quickly with low precision + +<DT><B><a href=pamenlarge.html>pamenlarge</a> </B> +<DD>enlarge an image N times + +<DT><B><a href=pamperspective.html>pamperspective</a> </B> +<DD>Change perspective distortion in an image + +<DT><B><a href=ppmdither.html>ppmdither</a> </B> +<DD>ordered dither for color images + +<DT><B><a href=pamditherbw.html>pamditherbw</a> </B> +<DD>dither a grayscale image to black and white (convert PGM to PBM) + +<DT><B><a href=pamthreshold.html>pamthreshold</a> </B> +<DD>threshold a grayscale image to black and white (convert PGM to PBM) + +<DT><B><a href=pnmcolormap.html>pnmcolormap</a></B> +<DD>Choose the N best colors to represent an image; create a colormap + +<DT><B><a href=pnmremap.html>pnmremap</a></B> +<DD>Replace colors in an image with those from a color map + +<DT><B><a href=ppmquant.html>ppmquant</a> </B> +<DD>quantize colors in a color image down to fewer colors - obsolete + +<DT><B><a href=pnmquant.html>pnmquant</a> </B> +<DD>quantize colors/shades in a color or grayscale image down to fewer + +<DT><B><a href=ppmquantall.html>ppmquantall</a> </B> +<DD>quantize colors on many files + +<DT><B><a href=ppmrelief.html>ppmrelief</a> </B> +<DD>run a Laplacian Relief filter on a PPM + +<DT><B><a href=pamfunc.html>pamfunc</a></B> +<DD>apply simple arithmetic function to samples in an image + +<DT><B><a href=pamarith.html>pamarith</a> </B> +<DD>apply simple arithmetic binary function to samples in two images + +<DT><B><a href=pamsummcol.html>pamsummcol</a> </B> +<DD>summarize (sum, average, etc) an image by column + +<DT><B><a href=pnmcat.html>pnmcat</a> </B> +<DD>concatenate images + +<DT><B><a href=pnmpad.html>pnmpad</a> </B> +<DD>add borders to an image + +<DT><B><a href=pamcomp.html>pamcomp</a> </B> +<DD>create composite (overlay) of images + +<DT><B><a href=pnmcomp.html>pnmcomp</a> </B> +<DD>obsolete version of <b><a href="pamcomp.html">pamcomp</a></b> +(kept because it may have fewer bugs) + +<DT><B><a href=ppmmix.html>ppmmix</a> </B> +<DD>mix (overlay) two images. + +<DT><B><a href=pnmcrop.html>pnmcrop</a> </B> +<DD>crop all like-colored borders off an image + +<DT><B><a href=pamcut.html>pamcut</a></B> +<DD>select a rectangular region from an image + +<DT><B><a href=pnmcut.html>pnmcut</a> </B> +<DD>obsolete version of <B><a href=pamcut.html>pamcut</a></B> +(kept because it may have fewer bugs) + +<DT><B><a href=pamdice.html>pamdice</a></B> +<DD>slice an image into many horizontally and/or vertically + +<DT><B><a href=pamdeinterlace.html>pamdeinterlace</a></B> + +<DD>remove every other row from an image + +<DT><B><a href=pammixinterlace.html>pammixinterlace</a></B> + +<DD>mix adjacent lines to merge interlaced images + +<DT><B><a href=pnmstitch.html>pnmstitch</a></b> + +<DD>stitch together panoramic (side-by-side) photographs + +<DT><B><a href=ppmglobe.html>ppmglobe</a></b> + +<DD>Turn a cylindrical projection into strips that can be glued onto a sphere + +<DT><B><a href=pamlookup.html>pamlookup</a></b> +<DD>map an image to a new image by using it as indices into a table + +<DT><B><a href=pamdepth.html>pamdepth</a> </B> +<DD>change the maxval in an image + +<DT><B><a href=pamendian.html>pamendian</a></B> +<DD>Swap bytes in multi-byte samples of a PAM image + +<DT><B><a href=pamflip.html>pamflip</a> </B> +<DD>perform one or more flip operations on an image + +<DT><B><a href=pamstretch.html>pamstretch</a></B> +<DD>scale up an image by inserting interpolated pixels + +<DT><B><a href=pamstretch.html>pamstretch-gen</a></B> +<DD>scale by non-integer values using pamstretch and pamscale + +<DT><B><a href=pnminvert.html>pnminvert</a> </B> +<DD>invert an image + +<DT><B><a href=pnmgamma.html>pnmgamma</a> </B> +<DD>perform gamma correction on an image + +<DT><B><a href=pnmhisteq.html>pnmhisteq</a></B> +<DD>histogram equalize image to increase contrast + +<DT><B><a href=pnmmargin.html>pnmmargin</a> </B> +<DD>add a margin to an image + +<DT><B><a href=pnmpaste.html>pnmpaste</a> </B> +<DD>paste a rectangle into an image + +<DT><B><a href=pnmrotate.html>pnmrotate</a> </B> +<DD>rotate an image + +<DT><B><a href=pnmshear.html>pnmshear</a> </B> +<DD>shear an image + +<DT><B><a href=pgmabel.html>pgmabel</a></B> +<DD>create cross-section of an image using Abel integration for deconvolution + +<DT><B><a href=pnmsmooth.html>pnmsmooth</a> </B> +<DD>smooth an image + +<DT><B><a href=pgmmedian.html>pgmmedian</a> </B> +<DD>apply a median filter to an image + +<DT><B><a href=pamaddnoise.html>pamaddnoise</a> </B> +<DD>add noise to an image + +<DT><B><a href=pnmtile.html>pnmtile</a> </B> +<DD>replicate an image into a specified size + +<DT><B><a href=pbmclean.html>pbmclean</a> </B> +<DD>remove lone pixels (snow) from a PBM image + +<DT><B><a href=pnmalias.html>pnmalias</a> </B> +<DD>antialias an image + +<DT><B><a href=ppmchange.html>ppmchange</a> </B> +<DD>change all of one color to another in PPM image + +<DT><B><a href=pnmnlfilt.html>pnmnlfilt</a></B> +<DD>filter an image by replacing each pixel with a function of nearby pixels + +<DT><B><a href=ppmshift.html>ppmshift</a> </B> +<DD>shift lines of PPM image left or right a random amount + +<DT><B><a href=ppmspread.html>ppmspread</a> </B> +<DD>move pixels of PPM image a random amount + +<DT><B><a href=pnmconvol.html>pnmconvol</a> </B> +<DD>general MxN convolution on an image. Can blur an image. + +<DT><B><a href=pgmmorphconv.html>pgmmorphconv</a></b> +<DD>perform morphological convolutions on a PGM image: dilation and erosion. + +<DT><B><a href=pgmminkowski.html>pgmminkowski</a></b> +<DD>Compute Minkowski integral over a PGM image</DD> + +<DT><B><a href=pamedge.html>pamedge</a> </B> +<DD>edge-detect (outline) an image + +<DT><B><a href=pammasksharpen.html>pammasksharpen</a> </B> +<DD>sharpen an image via an unsharp mask + +<DT><B><a href=rgb3toppm.html>rgb3toppm</a> </B> +<DD>combine three PGMs into one PPM + +<DT><B><a href=ppmtorgb3.html>ppmtorgb3</a> </B> +<DD>separate a PPM into three PGMs + +<DT><B><a href=pgmenhance.html>pgmenhance</a> </B> +<DD>edge-enhance a PGM image + +<DT><B><a href=pbmlife.html>pbmlife</a> </B> +<DD>apply Conway's rules of Life to a PBM image + +<DT><B><a href=ppmdist.html>ppmdist</a> </B> +<DD>map colors to high contrast grayscales arbitrarily + +<DT><B><a href=ppmntsc.html>ppmntsc</a> </B> +<DD>adjust colors so they are legal for NTSC or PAL television + +</DL> + + +<H2 id="analyzers">Image Analyzers</H2> + +<P> +These all work on the Netpbm formats as input. + +<DL COMPACT> + +<DT><B><a href=pamfile.html>pamfile</a> </B> +<DD>describe an image's vital characteristics + +<DT><B><a href=pnmpsnr.html>pnmpsnr</a> </B> +<DD>measure difference between two images + +<DT><B><a href=pamslice.html>pamslice</a> </B> +<DD>print a row or column of an image in ASCII decimal + +<DT><B><a href=pgmtexture.html>pgmtexture</a> </B> +<DD>calculate textural features on a PGM image + +<DT><B><a href=pgmhist.html>pgmhist</a> </B> +<DD>print a histogram of the values in a PGM image + +<DT><B><a href=ppmhist.html>ppmhist</a> </B> +<DD>print a histogram of a PPM + +<DT><B><a href=pnmhistmap.html>pnmhistmap</a></B> +<DD>draw a histogram of a PGM or PPM + +<DT><B><a href=pnmcolormap.html>pnmcolormap</a> </B> +<DD>create quantization color map for an image + +<DT><B><a href=pamsumm.html>pamsumm</a> </B> +<DD>Summarize (sum, average, etc.) all samples in an image + +<DT><B><a href=pamsharpness.html>pamsharpness</a> </B> +<DD>measure the sharpness of an image + +<DT><B><a href=pamsharpmap.html>pamsharpmap</a> </B> +<DD>create map of sharpness in an image + +<DT><B><a href=pamtilt.html>pamtilt</a></B> +<DD>Measure the tilt of an image, i.e. document skew + +</DL> + + +<H2 id="miscellaneous">Miscellaneous</H2> + +<DL COMPACT> + +<DT><B><a href=pamchannel.html>pamchannel</a></B> +<DD>extract individual planes (channel, e.g. R, G, or B) from an image + +<DT><B><a href=pamstack.html>pamstack</a></B> +<DD>stack the planes of multiple PAM images into a single output image + +<DT><B><a href=pampick.html>pampick</a> </B> +<DD>pick images out of a multi-image Netpbm image stream + +<DT><B><a href=pamsplit.html>pamsplit</a> </B> +<DD>split a multi-image Netpbm file into multiple 1-image files + +<DT><B><a href=pambayer.html>pambayer</a></B> +<DD>interpret Bayer patterns + +<DT><B><a href=pamx.html>pamx</a></B> +<DD>display a Netpbm image in an X Window System window + +<DT><B><a href=ppmsvgalib.html>ppmsvgalib</a></B> +<DD>display a PPM image on a Linux virtual console using Svgalib + +<DT><B><a href=pbmmask.html>pbmmask</a></B> +<DD>create a mask bitmap from a regular bitmap + +<DT><B><a href=ppmcolormask.html>ppmcolormask</a></B> +<DD>create mask of areas of a certain color in an image + +<DT><B><a href=pambackground.html>pambackground</a></B> +<DD>create mask of the background of an image + +<DT><B><a href=pnmindex.html>pnmindex</a> </B> +<DD>build a visual index of a bunch of Netpbm images + +<DT><B><a href=pnmmontage.html>pnmmontage</a> </B> +<DD>build multiple Netpbm images into a single montage image + +<DT><B><a href=pgmbentley.html>pgmbentley</a> </B> +<DD>Bentleyize a PGM image + +<DT><B><a href=pgmcrater.html>pgmcrater</a> </B> +<DD>create cratered terrain by fractal forgery + +<DT><B><a href=pamoil.html>pamoil</a> </B> +<DD>turn a PNM or PAM image into an oil painting + +<DT><B><a href=ppmforge.html>ppmforge</a> </B> +<DD>fractal forgeries of clouds, planets, and starry skies + +<DT><B><a href=pgmkernel.html>pgmkernel</a> </B> +<DD>generate a convolution kernel + +<DT><B><a href=ppmtv.html>ppmtv</a> </B> +<DD>make an image lined so it looks like an old TV + +<DT><B><a href=pampop9.html>pampop9</a> </B> +<DD>simulate a multi-lens camera such as the Pop9 + +<DT><B><a href=ppmdmkfont.html>ppmdmkfont</a> </B> +<DD>create Ppmdfont "standard" + +<DT><B><a href=ppmddumpfont.html>ppmddumpfont</a> </B> +<DD>dump a Ppmdfont file + +<DT><B><a href=ppmdcfont.html>ppmdcfont</a> </B> +<DD>Turn a Ppmdfont file into C source for a builtin font + +</DL> + + +<H3 id="obsolete">Obsolete Names</H3> +<p>There used to be programs by the following names. Each has been either +renamed to a more illustrative name, or superseded by a more general +function. In most cases, Netpbm is installed with symbolic links that allow +old programs and procedures to use these names but run the replacement +programs: + +<UL> +<LI><b><a href=ppmtotga.html>ppmtotga</a></b> +<LI><b><a href=pnmnoraw.html>pnmnoraw</a></b> +<LI><b><a href=gemtopbm.html>gemtopbm</a></b> +<LI><b><a href=pnminterp.html>pnminterp</a></b> +<LI><b><a href=pgmoil.html>pgmoil</a></b> +<LI><b><a href=ppmtojpeg.html>ppmtojpeg</a></b> +<LI><b><a href=bmptoppm.html>bmptoppm</a></b> +<LI><b><a href=pgmnorm.html>pgmnorm</a></b> +<LI><b><a href=ppmnorm.html>ppmnorm</a></b> +<LI><b><a href=pnmfile.html>pnmfile</a></b> +<LI><b><a href=pnmarith.html>pnmarith</a></b> +<LI><b><a href=pgmedge.html>pgmedge</a></b> +<LI><b><a href=ppmtouil.html>ppmtoouil</a></b> +<LI><b><a href=pnmtoplainpnm.html>pnmtoplainpnm</a></b> +<LI><b><a href=pnmtofits.html>pnmtofits</a></b> +<LI><b><a href=pnmtotiff.html>pnmtotiff</a></b> +<LI><b><a href=pnmsplit.html>pnmsplit</a></b> +<LI><b><a href=pnmdepth.html>pnmdepth</a></b> +</UL> + + +</body> </html> diff --git a/error.html b/error.html new file mode 100644 index 00000000..68383b4f --- /dev/null +++ b/error.html @@ -0,0 +1,250 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Netpbm User Manual</TITLE> +</HEAD> +<BODY> +<H1>Error Handling</H1> + +<h2>Netpbm Programming Library Errors</h2> + +<p>As part of Netpbm's mission to make writing graphics programs quick +and easy, Netpbm recognizes that no programmer likes to deal with +error conditions. Therefore, very few Netpbm programming library +functions return error information. There are no return codes to +check. If for some reason a function can't do what was asked of it, +it doesn't return at all. + +<p>Netpbm's response to encountering an error is called "throwing +an error." + +<p>The typical way a Netpbm function throws an error (for example, +when you attempt to open a non-existent file with <b>pm_openr()</b>) +is that the function writes an error message to the Standard Error +file and then causes the program to terminate with an exit() system +call. The function doesn't do any explicit cleanup, because everything +a library function sets up gets cleaned up by normal process +termination. + +<p>In many cases, that simply isn't acceptable. If you're calling +Netpbm functions from inside a server program, you'd want the program +to recognize that the immediate task failed, but keep running to do +other work. + +<p>So as an alternative, you can replace that program exit with a +longjmp instead. A longjmp is a classic Unix exception handling +concept. See the documentation of the standard C library +<b>setjmp()</b> and <b>longjmp()</b> functions. + +<p>In short, you identify a point in your programs for execution to +hyperjump to from whatever depths of whatever functions it may be in +at the time it detects an exception. That hyperjump is called a +longjmp. The longjmp unwinds the stack and puts the program in the +same state as if the subroutines had returned all the way up to the +function that contains the jump point. A longjmp does not in itself +undo things like memory allocations. But when you have a Netpbm +function do a longjmp, it also cleans up everything it started. + +<p>To select this form of throwing an error, use the +<b>pm_setjmpbuf()</b> function. This alternative is not available +before Netpbm 10.27 (March 2005). + +<p>Issuing of the error message is a separate thing. Regardless +of whether a library routine exits the program or executes a longjmp, +it issues an error message first. + +<p>You can customize the error message behavior too. By default, a +Netpbm function issues an error message by writing it to the Standard +Error file, formatted into a single line with the program name prefixed. +But you can register your own error message function to run instead with +<b>pm_setErrorMsgFn()</b>. + + +<h3 id="pm_setjmpbuf">pm_setjmpbuf()</h3> + +<p>pm_setjmpbuf() sets up the process so that when future calls to the +Netpbm programming library throw an error, they execute a longjmp +instead of causing the process to exit as they would by default. + +<p>This is <em>not</em> analogous to <b>setjmp()</b>. You do a +setjmp() first, then tell the Netpbm programming library with +<b>pm_setjmpbuf()</b> to use the result. + +<p>Example: + +<pre> +<code> + #include <setjmp.h> + #include <pam.h> + + jmp_buf jmpbuf; + int rc; + + rc = setjmp(jmpbuf); + if (rc == 0) { + struct pam pam; + pm_setjmpbuf(&jmpbuf); + + pnm_readpam(stdin, &pam, PAM_STRUCT_SIZE(tuple_type)); + + printf("pnm_readpam() succeeded!\n"); + + } else { + printf("pnm_readpam() failed. You should have seen " + "messages to Standard Error telling you why.\n"); + } +</code> +</pre> + +<P>This example should look really strange to you if you haven't read +the documentation of <b>setjmp()</b>. Remember that there is a +hyperjump such that the program is executing the <b>pnm_readpam()</b> +and then suddenly is returning a second time from the setjmp()! + +<p>Even <b>pm_error()</b> works this way -- if you set up a longjmp with +<b>pm_setjmpbuf()</b> and then call <b>pm_error()</b>, <b>pm_error()</b> +will, after issuing your error message, execute the longjmp. + + +<p><b>pm_setjmpbuf()</b> was new in Netpbm 10.27 (March 2005). Before +that, Netpbm programming library functions always throw an error by +exiting the program. + + +<h2>User Detected Errors</h2> + +<p>The Netpbm programming library provides a function for you to throw +an error explicitly: <b>pm_error()</b>. <b>pm_error()</b> does +nothing but throw an error, and does so the same way any Netpbm +library function you call would. <b>pm_error()</b> is more convenient +than most standard C facilities for handling errors. + +<p>If you don't want to throw an error, but just want to issue an +error message, use <b>pm_errormsg()</b>. It issues the message in the +same way as <b>pm_error()</b> but returns normally instead of longjmping +or exiting the program. + +<p>Note that <b>libnetpbm</b> distinguishes between an error message +and an informational message (use <b>pm_errormsg()</b> for the former; +<b>pm_message()</b> for the latter). The only practical difference is +which user message function it calls. So if you don't register any +user message function, you won't see any difference, but a program is +still more maintainable and easier to read when you use the +appropriate one of these. + + +<h3 id="pm_error">pm_error()</h3> + +<h4>Overview</h4> + +<p> +<B>void pm_error(</b> +<b>char *</B> <I>fmt</I><B>,</B> +<B>... );</B> + +<h4>Example</h4> + +<pre> +<code> +if (argc-1 < 3) + pm_error("You must specify at least 3 arguments. " + "You specified" only %d", argc-1); +</code> +</pre> + +<P><B>pm_error()</B> is a <B>printf()</B> style routine that +simply throws an error. It issues an error message exactly like +<b>pm_errormsg()</b> would in the process. + + +<h3 id="pm_errormsg">pm_errormsg()</h3> + +<h4>Overview</h4> + +<p> +<B>void pm_errormsg(</b> +<b>char *</B> <I>fmt</I><B>,</B> +<B>... );</B> + +<h4>Example</h4> + +<pre> +<code> +if (rc = -1) + pm_errormsg("Could not open file. errno=%d", errno); + return -1; +</code> +</pre> + +<P><B>pm_errormsg()</B> is a <B>printf()</B> style routine that +issues an error message. By default, it writes the message to Standard +Error, but you can register a user error message routine to be called +instead, and that might do something such as write the message into a +log file. See <a href="#pm_setusererrormsgfn"><b>pm_setusererrormsgfn</b></a>. + +<p>There is very little advantage to using this over traditional C +services, but it issues a message in the same way as <b>libnetpbm</b> +library functions do, so the common handling might be valuable. + +<p>Note that the arguments specify the message text, not any formatting +of it. Formatting is handled by <b>pm_errormsg()</b>. So don't put any +newlines or tabs in it. + + +<h3 id="pm_setusererrormsgfn">pm_setusererrormsgfn()</h3> + +<h4>Overview</h4> + +<p> +<B>void pm_setusererrormsgfn(pm_usererrormsgfn *</B> <I>function</I><B>);</b> + +<h4>Example</h4> + +<pre> +<code> + static pm_usererrormsgfn logfilewrite; + + static void + logfilewrite(const char * const msg) { + fprintf(myerrorlog, "Netpbm error: %s", msg); + } + + pm_setusererrormsgfn(&logfilewrite); + + pm_errormsg("Message for the error log"); +</code> +</pre> + +<P><B>pm_setusererrormsg()</B> registers a handler for error messages, +called a user error message routine. Any library function that wants +to issue an error message in the future will call that function with +the message as an argument. + +<p>The argument the user error message routine gets is English text +designed for human reading. It is just the text of the message; there +is no attempt at formatting in it (so you won't see any newline or tab +characters). + +<p>You can remove the user error message routine, so that the library +issues future error messages in its default way (write to Standard Error) +by specifying a null pointer for <i>function</i>. + +<p>The user error message routine does not handle informational messages. +It handles only error messages. See <a href="libpm.html#message"> +<b>pm_setusermessagefn()</b></a>. + + +<h2>Error Handling In Netpbm Programs</h2> + +<p>Most Netpbm programs respond to encountering an error by issuing a +message describing the error to the Standard Error file and then +exiting with exit status 1. + +<p>Netpbm programs generally do not follow the Unix convention of very +terse error messages. Conventional Unix programs produce error +messages as if they had to pay by the word. Netpbm programs tend to +give a complete description of the problem in human-parseable English. +These messages are often many terminal lines long. + +</body> +</html> diff --git a/escp2topbm.html b/escp2topbm.html new file mode 100644 index 00000000..52128b74 --- /dev/null +++ b/escp2topbm.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Escp2topbm User Manual</TITLE></HEAD> +<BODY> +<H1>escp2topbm</H1> +Created: 1 August 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +escp2topbm - convert an ESC/P2 printer file to a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>escp2topbm</B> +[<I>printfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>escp2topbm</b> reads an ESC/P2 printer control stream as input. +It produces a PBM image as output. + +<P><b>escp2topbm</b> filters the raster graphic content from an Epson +ESC/P2 printer control stream and writes the image it would print as a +standard (raw) PBM image. + +<p>The input is from the file named by the <i>printfile</i> argument, or +from Standard Input if you don't specify <i>printfile</i>. The output is +to Standard Output. + +<P><b>escp2topbm</b> understands compression modes 0 (uncompressed) +and 1 (RLE compressed) in the Epson input stream. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> +none + +<A NAME="lbAF"> </A> +<H2>HINTS</H2> + +<P>As <b>escp2topbm</b> is a simple program, created mainly to test +<b>pbmtoescp2</b>, there are some restrictions: + +<ul> +<li><b>escp2topbm</b> looks only at "ESC." sequences and ignores +all data outside these Escape sequences. + +<li><b>escp2topbm</b> assumes that only one raster graphic is in the +printer stream. If this isn't true, the result is garbage. + +<li><b>escp2topbm</b> assumes that all "ESC." sequences use the same +width value. If this isn't true, the result is garbage. +</ul> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtoescp2.html">pbmtoescp2</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<P> Copyright (C) 2003 by Ulrich Walcher +(<A HREF="mailto:u.walcher@gmx.de">u.walcher@gmx.de</A>). + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>escp2topbm</b> was added to Netpbm in Release 10.18 (August 2003); +it was created around the same time. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">HINTS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +<LI><A HREF="#history">HISTORY</A> +</UL> + +</BODY> +</HTML> diff --git a/extendedopacity.html b/extendedopacity.html new file mode 100644 index 00000000..92200671 --- /dev/null +++ b/extendedopacity.html @@ -0,0 +1,162 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title>Image Processing By Interp and Extrapolation</title> +<meta name="manual_section" content="5"> +</head> +<body bgcolor="#ffffff" text="#000000"> +<H1>extendedopacity</H1> +Created: 17 April 2003 +<BR> +<?makeman .SH NAME ?> +<?makeman extendedopacity \- theory of netpbm interpolation and extrapolation ?> +<?makeman .SH DESCRIPTION ?> + +<p>This page is a copy of http://www.sgi.com/misc/grafica/interp/ on +April 17, 2003, with some slight formatting changes, included in the +Netpbm documentation for convenience. Since at least June 11, 2005, +the source page has been missing. + +<h2>Image Processing By Interpolation and Extrapolation</h2> +<I>Paul Haeberli and Douglas Voorhies</I> + +<h3>Introduction</h3> +<p> +Interpolation and extrapolation between two images offers a general, +unifying approach to many common point and area image +processing operations. Brightness, contrast, saturation, tint, and +sharpness can all be controlled with one formula, separately or +simultaneously. In several cases, there are also performance benefits. +<p> +Linear interpolation is often used to blend two images. +Blend fractions (alpha) and (1 - alpha) are used in a weighted average +of each component of each pixel: + +<pre> + out = (1 - alpha)*in0 + alpha*in1 +</pre> + +<p> +Typically alpha is a number in the range 0.0 to 1.0. This is +commonly used to linearly interpolate two images. +What is less often considered is that alpha may range beyond the +interval 0.0 to 1.0. +Values above one subtract a portion of in0 while scaling in1. Values +below 0.0 have the opposite effect. +<p> +Extrapolation is particularly useful if a degenerate version of the +image is used as the image to get "away from." Extrapolating away from +a black-and-white image increases saturation. Extrapolating away from a +blurred image increases sharpness. The interpolation/extrapolation +formula offers one-parameter control, making display of a series of +images, each differing in brightness, contrast, sharpness, color, or +saturation, particularly easy to compute, and inviting hardware acceleration. +<p> +In the following examples, a single alpha value is used per image. +However other processing is possible, for example where alpha is a function +of X and Y, or where a brush footprint controls alpha near the cursor. + +<h3>Changing Brightness</h3> + +<p> +To control image brightness, we use pure black as the degenerate (zero +alpha) image. Interpolation darkens the image, and extrapolation +brightens it. In both cases, brighter pixels are affected more. + +<img src="blend1.gif" alt="brightness" width=469 height=154> + +<h3>Changing Contrast</h3> +<p> +Contrast can be controlled using a constant gray image with the average image +luminance. Interpolation reduces contrast and extrapolation boosts it. +Negative alpha generates inverted images with varying contrast. In +all cases, the average image luminance is constant. + +<img src="blend3.gif" alt="contrast" width=469 height=154> +<p> +If middle gray or the average pixel color is used instead, contrast is +again altered, but with middle gray or the average color left unaffected. +Shades and colors far away from the chosen value are most affected. + +<h3>Changing Saturation</h3> +<p> +To alter saturation, pixel components must move towards or away from the +pixel's luminance value. By using a black-and-white image as the +degenerate version, saturation can be decreased using interpolation, and +increased using extrapolation. This avoids computationally more +expensive conversions to and from HSV space. Repeated update in +an interactive application is especially fast, since the luminance +of each pixel need not be recomputed. Negative alpha preserves luminance +but inverts the hue of the input image. + +<img src="blend4.gif" alt="saturation" width=469 height=154> + +<h3>Sharpening an Image</h3> +<p> +Any convolution, such as sharpening or blurring, can be adjusted by +this approach. +If a blurred image is used as the degenerate image, +interpolation attenuates high frequencies to varying degrees, and +extrapolation boosts them, sharpening the image by unsharp masking. +Varying alpha acts as a kernel scale factor, so a series of +convolutions differing only in scale can be done easily, independent of +the size of the kernel. Since blurring, unlike sharpening, is often a +separable operation, sharpening by extrapolation may be far more +efficient for large kernels. + +<img src="blend6.gif" alt="sharpening" width=469 height=154> +<p> +Note that global contrast control, local contrast control, and +sharpening form a continuum. +Global contrast pushes pixel components +towards or away from the average image luminance. Local contrast is +similar, but uses local area luminance. Unsharp masking is the extreme +case, using only the color of nearby pixels. + +<h3>Combined Processing</h3> + +<p> +An unusual property of this interpolation/extrapolation approach is that +all of these image parameters may be altered simultaneously. Here +sharpness, tint, and saturation are all altered. + +<img src="blend7.gif" alt="combined" width=469 height=154> + +<h3>Conclusion</h3> +<p> +Image applications frequently need to produce multiple degrees of +manipulation interactively. +Image applications frequently need to interactively manipulate +an image by continuously changing a single parameter. +The best hardware mechanisms employ a +single "inner loop" to achieve a wide variety of effects. Interpolation +and extrapolation of images can be a unifying approach, providing a single +function that supports many common image processing operations. +<p> +Since a degenerate image is sometimes easier to calculate, extrapolation +may offer a more efficient method to achieve effects such as sharpening +or saturation. Blending is a linear operation, and so it must be +performed in linear, not gamma-warped space. Component range must also be +monitored, since clamping, especially of the degenerate image, causes +inaccuracy. +<p> +These image manipulation techniques can be used in paint programs to +easily implement brushes that saturate, sharpen, lighten, darken, +or modify contrast and color. The only major change needed is to support +alpha values outside the range 0.0 to 1.0. +<p> +It is surprising and unfortunate how many graphics software packages +needlessly limit interpolant values to the range 0.0 to 1.0. Application +developers should allow users to extrapolate parameters when practical. +<h3>References</h3> +<p> +For a slightly extended version of this article, see:<br> +P. Haeberli and D. Voorhies. <cite>Image Processing by Linear +Interpolation and Extrapolation</cite>. +IRIS Universe Magazine No. 28, Silicon Graphics, Aug, 1994. +<!--no_print--><p> +<!--no_print--><a href=../index.html#interp> +<!--no_print--><img src=gobot.gif alt="" width=564 height=25 border=0></a> +<!--no_print--><br> +</body> +</html> diff --git a/eyuvtoppm.html b/eyuvtoppm.html new file mode 100644 index 00000000..b55e9464 --- /dev/null +++ b/eyuvtoppm.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Eyuvtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>eyuvtoppm</H1> +Updated: 22 April 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +eyuvtoppm - convert a Berkeley YUV file to a portable pixmap (ppm) file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>eyuvtoppm</B> +[<B>--width</B> +<I>width</I>] +[<B>--height</B> +<I>height</I>] +[<I>eyuvfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>eyuvtoppm</b> reads a Berkeley Encoder YUV (not the same as +Abekas YUV) file as input and produces a PPM image on Standard Output. + +<P>With no filename argument takes input from Standard Input. +Otherwise, <I>eyuvfile </I> is the file specification of the input +file. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtoeyuv.html">ppmtoeyuv</A></B>, +<B><A HREF="yuvtoppm.html">yuvtoppm</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> + + + + + + diff --git a/fiascotopnm.html b/fiascotopnm.html new file mode 100644 index 00000000..ad850138 --- /dev/null +++ b/fiascotopnm.html @@ -0,0 +1,227 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Fiascotopnm User Manual</TITLE></HEAD> +<BODY> +<H1>fiascotopnm</H1> +Updated: 12 July 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +fiascotopnm - Convert compressed FIASCO image to PGM, or PPM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>fiascotopnm </B> +[<I>option</I>]... +[<I>filename</I>]... + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>fiascotopnm</B> decompresses the named FIASCO files, or the +Standard Input if no file is named, and writes the images as PGM, or +PPM files, depending on whether the FIASCO image is black and white or +color. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p>All option names may be abbreviated; for example, --output may be +written --outp or --ou. For all options an one letter short option +is provided. Mandatory or optional arguments to long options are +mandatory or optional for short options, too. Both short and long +options are case sensitive. + +<DL COMPACT> +<DT><B>-o</B>[<I>name</I>], <B>--output=</B>[<I>name</I>] + +<DD> Write decompressed image to the file <I>name</I>.ppm (if PPM) or +<I>name</I>.pgm (if PGM). If <I>name</I> is <b>-</b>, then produce +the image file on the standard output. The optional argument +<I>name</I> can be omitted, then the input filename is used as +basename with the suffix .ppm or .pgm. In case of video streams, the +frames are stored in the files <I>name</I>.<B>N</B>.ppm where <B>N</B> +is the frame number (of the form 00..0 - 99..9); output on the +standard output is not possible with video streams. + +<P> If <I>name</I> is a relative path and the environment variable +<B>FIASCO_IMAGES</B> is a (colon-separated) list of directories, then +the output file(s) are written to the first (writable) directory of +this list. Otherwise, the current directory is used to store the +output file(s). + +<DT><B>-z</B>, <B>--fast</B> +<DD> +Decompress images in the 4:2:0 format; i.e., each chroma channel is +decompressed to an image of halved width and height. Use this option +on slow machines when the desired frame rate is not achieved; the +output quality is only slightly decreased. + +<DT><B>-d</B>, <B>--double</B><DD> +Double the size of the X11 window both in width and height; no pixel +interpolation is used, each pixel is just replaced by four identical +pixels. + +<DT><B>-p</B>, <B>--panel</B> +<DD> +Show a panel with play, stop, pause, record and exit buttons to +control the display of videos. When pressing the record button, all +frames are decompressed and stored in memory. The other buttons work +in the usual way. + +<DT><B>-m</B> <I>N</I>, <B>--magnify=</B><I>N</I> +<DD> +Set magnification of the decompressed image. Positive values enlarge +and negative values reduce the image width and height by a factor of +2^|<I>N</I>|. + +<DT><B>-s</B> <I>N</I>, <B>--smooth=</B><I>N</I> +<DD> +Smooth decompressed image(s) along the partitioning borders by the +given amount <I>N</I>. <I>N</I> is 1 (minimum) to 100 (maximum); default +is 70. When <I>N</I>=0, then the smoothing amount specified in the +FIASCO file is used (defined by the FIASCO coder). + +<DT><B>-F</B> <I>N</I>, <B>--fps=</B><I>N</I> +<DD> +Set number of frames per second to <I>N</I>. When using this option, +the frame rate specified in the FIASCO file is overridden. + +<DT><B>-v</B>, <B>--version</B> +<DD> +Print <B>fiascotopnm</B> version number, then exit. + +<DT><B>-f</B> <I>name</I>, <B>--config=</B><I>name</I> + +<DD>Load parameter file <I>name</I> to initialize the options of +<B>fiascotopnm</B>. See file <B>system.fiascorc</B> for an example of +the syntax. Options of <B>fiascotopnm </B> are set by any of the +following methods (in the specified order): + +<OL> +<LI>Global ressource file <B>/etc/system.fiascorc</B> + +<LI>$HOME<B>/.fiascorc</B> + +<LI>command line + +<LI>--config=<I>name</I> +</OL> + +<DT><B>-h</B>, <B>--info</B> +<DD> +Print brief help, then exit. + +<DT><B>-H</B>, <B>--help</B> +<DD> +Print detailed help, then exit. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<PRE> +fiascotopnm foo.wfa >foo.ppm +</PRE> + +<P>Decompress the FIASCO file "foo.wfa" and store it as +"foo.ppm". + +<PRE> +fiascotopnm -o foo1.wfa foo2.wfa +</PRE> + +<P>Decompress the FIASCO files "foo1.wfa" and +"foo2.wfa" and write the frames to the image files +"foo1.wfa.ppm" and "foo2.wfa.ppm". + +<PRE> +fiascotopnm -oimage foo1.wfa +</PRE> + +<P>Decompress the FIASCO file "foo1.wfa" and write all 15 +frames to the image files "image.00.ppm", ... , +"image.14.ppm". + +<PRE> +fiascotopnm --fast --magnify=-1 --double video.wfa >stream.ppm +</PRE> + +<P>Decompress the FIASCO file "video.wfa". The +decompression speed is as fast as possible: the image is decompressed +(in 4:2:0 format) at a quarter of its original size; then the image is +enlarged again by pixel doubling. + +<A NAME="lbAG"> </A> +<H2>FILES</H2> + +<DL COMPACT> +<DT><B>/etc/system.fiascorc</B> + +<DD>The systemwide initialization file. + +<DT>$HOME<B>/.fiascorc</B> + +<DD>The personal initialization file. + +</DL> + +<A NAME="lbAH"> </A> +<H2>ENVIRONMENT</H2> + +<DL COMPACT> +<DT><B>FIASCO_IMAGES</B> + +<DD>Save path for image files. Default is "./". + +<DT><B>FIASCO_DATA</B> + +<DD>Search path for FIASCO files. Default is "./". + +</DL> + + +<A NAME="lbAI"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmtofiasco.html">pnmtofiasco</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<P> +Ullrich Hafner, Juergen Albert, Stefan Frank, and Michael Unger. +<B>Weighted Finite Automata for Video Compression</B>, IEEE Journal on +Selected Areas In Communications, January 1998 +<BR> + +Ullrich Hafner. <B>Low Bit-Rate Image and Video Coding with Weighted +Finite Automata</B>, Ph.D. thesis, Mensch & Buch Verlag, ISBN +3-89820-002-7, October 1999. + +<A NAME="lbAJ"> </A> +<H2>AUTHOR</H2> + +Ullrich Hafner <<A HREF="mailto:hafner@bigfoot.de">hafner@bigfoot.de</A>> + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">FILES</A> +<LI><A HREF="#lbAH">ENVIRONMENT</A> +<LI><A HREF="#lbAI">SEE ALSO</A> +<LI><A HREF="#lbAJ">AUTHOR</A> +</UL> +</BODY> +</HTML> + + diff --git a/fitstopnm.html b/fitstopnm.html new file mode 100644 index 00000000..c7d60f85 --- /dev/null +++ b/fitstopnm.html @@ -0,0 +1,93 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Fitstopnm User Manual</TITLE></HEAD> +<BODY> +<H1>fitstopnm</H1> +Updated: 20 September 89 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +fitstopnm - convert a FITS file into a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>fitstopnm</B> +[<B>-image</B> <I>N</I>] +[<B>-scanmax</B>] +[<B>-printmax</B>] +[<B>-min</B> <I>f</I>] +[<B>-max</B> <I>f</I>] +[<I>FITSfile</I>] + +<P>All options may be abbreviated to their shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>fitstopnm</b> reads a FITS file as input and produces a PPM +image if the FITS file consists of 3 image planes (NAXIS = 3 and +NAXIS3 = 3), or a PGM image if the FITS file consists of 2 image +planes (NAXIS = 2), or if you specify the <B>-image</B> option. The +results may need to be flipped top for bottom; if so, just pipe the +output through <B>pamflip -tb</B>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The <B>-image</B> option is for FITS files with three axes. The +assumption is that the third axis is for multiple images, and this +option lets you select which one you want. + +<P>You can use options <B>-min</B> and <B>-max</B> to override the min +and max values as read from the FITS header or the image data if no +DATAMIN and DATAMAX keywords are found. + +<p>You can use the <B>-scanmax</B> option to force the program to scan +the data even when DATAMIN and DATAMAX are found in the header. If you +specify <B>-printmax</B>, the program will just print the min and max +values and quit. + +<P>The program tells you what kind of PNM image it is writing. + + +<A NAME="lbAF"> </A> +<H2>REFERENCES</H2> + +<p>FITS stands for Flexible Image Transport System. A full description +can be found in Astronomy & Astrophysics Supplement Series 44 (1981), +page 363. + + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtofits.html">pnmtofits</A>, +<A HREF="pamflip.html">pamflip</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer, with modifications by Daniel +Briggs (<A HREF="mailto:dbriggs@nrao.edu">dbriggs@nrao.edu</A>) and +Alberto Accomazzi (<A +HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>). + + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">REFERENCES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/fstopgm.html b/fstopgm.html new file mode 100644 index 00000000..a6e68cc6 --- /dev/null +++ b/fstopgm.html @@ -0,0 +1,86 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Fstopgm User Manual</TITLE></HEAD> +<BODY> +<H1>fstopgm</H1> +Updated: 06 April 89 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +fstopgm - convert a Usenix FaceSaver(tm) file into a PGM image + + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>fstopgm</B> +[<I>fsfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>fstopgm</b> reads a Usenix FaceSaver(tm) file as input and +produces a PGM image as output. + +<P>FaceSaver(tm) files sometimes have rectangular pixels. While +<B>fstopgm</B> won't re-scale them into square pixels for you, it will +give you the precise <B>pamscale</B> command that will do the job. +Because of this, reading a FaceSaver(tm) image is a two-step process. +First you do: + +<PRE> + fstopgm > /dev/null +</PRE> + +This will tell you whether you need to use <B>pamscale.</B> + +Then use one of the following pipelines: +<PRE> + fstopgm | pgmnorm + fstopgm | pamscale -whatever | pgmnorm +</PRE> + +To go to PBM, you want something more like one of these: +<PRE> + fstopgm | pamenlarge 3 | pgmnorm | pamditherbw + fstopgm | pamenlarge 3 | pamscale <whatever> | pgmnorm | pamditherbw +</PRE> + +You want to enlarge when going to a bitmap because otherwise you lose +information; but enlarging by more than 3 does not look good. + +<P>FaceSaver is a registered trademark of Metron Computerware Ltd. of +Oakland, CA. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmtofs.html">pgmtofs</A>, +<A HREF="pgm.html">pgm</A>, +<A HREF="pgmnorm.html">pgmnorm</A>, +<A HREF="pamenlarge.html">pamenlarge</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="pamditherbw.html">pamditherbw</A> +<A NAME="lbAF"> </A> + + +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/g3topbm.html b/g3topbm.html new file mode 100644 index 00000000..e04ed5b8 --- /dev/null +++ b/g3topbm.html @@ -0,0 +1,144 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>G3topbm User Manual</TITLE></HEAD> +<BODY> +<H1>g3topbm</H1> +Updated: 28 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +g3topbm - convert a Group 3 fax file into a PBM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>g3topbm</B> +[<B>-kludge</B>] +[<B>-reversebits</B>] +[<B>-stretch</B>] +[{<B>-width=</B><i>pixels</i> | paper_size={A3,A4,A5,A6,B4}] +[<B>-stop_error</B>] +[<I>g3file</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>g3topbm</b> reads a Group 3 fax file as input and produces a PBM +image as output. + +<p><b>g3topbm</b> tolerates various deviations from the standard, +so as to recover some of the image if there was a transmission error. +One thing it tolerates is lines of varying length. The standard requires +all the lines to be the same length; <b>g3topbm</b> makes the output +image as wide as the longest line in the input and pads the others on +the right. It warns you when it does this. + +<p>You can use the <b>stop_error</b> option to make <b>g3topbm</b> +insist on valid input. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-kludge</B> + +<DD>Tells <b>g3topbm</b> to ignore the first few lines of the file; +sometimes fax files have some junk at the beginning. + +<DT><B>-reversebits</B> + +<DD>Tells <b>g3topbm</b> to interpret bits least-significant first, +instead of the default most-significant first. Apparently some fax +modems do it one way and others do it the other way. If you get a +whole bunch of "bad code word" messages, try using this +option. + +<DT><B>-stretch</B> + +<DD>This option tells <b>g3topbm</b> to stretch the image vertically by +duplicating each row. This is for the low-quality transmission mode. + +<dt><b>-width=</b><i>pixels</i> + +<dd>This option tells <b>g3topbm</b> that the image is supposed to be +<i>pixels</i> pixels wide. If any line in it is not that size, <b>g3topbm</b> +issues a warning or fails, depending on whether you specify +<b>-stop_error</b>. + +<p>You cannot specify both <b>-width</b> and <b>-paper_size</b>. + +<p>This option was new in Netpbm 10.33 (March 2006). + +<dt><b>-paper_size=</b>{<B>A3</B>,<B>A4</B>,<B>A5</B>,<b>A6</b>,<b>B4</b>} + +<dd>This option tells <b>g3topbm</b> for what size paper this image is +supposed to be formatted. <b>g3topbm</b> uses the width of the paper +the same way as with the <b>-width</b> option. <b>g3topbm</b> +does not use the height of the paper for anything. + +<p>You cannot specify both <b>-width</b> and <b>-paper_size</b>. + +<p>This option was new in Netpbm 10.33 (March 2006). + +<DT><B>-stop_error</B> + +<DD>This option tells <b>g3topbm</b> to fail when it finds a problem +in the input. "Fail" means it terminates with a nonzero +status code with the contents of the output file undefined. + +<p>If you don't specify this option, <b>g3topbm</b> does its best to +work around input errors and salvage as much of the image as possible +in the output image. It first tries to resynchronize to a later line +by searching for the next End Of Line marker, skipping any lines or +partial lines in between. It saves the beginning of the line in which +it encountered the problem. If the input file ends prematurely, +<b>g3topbm</b> produces output containing the lines up to where it +encountered the problem. + +<p><b>g3topbm</b> issues warning messages when it continues in spite of +input errors. + +<p>This option was new in Netpbm 10.24 (August 2004). Before that, +<b>g3topbm</b> always failed when it encountered premature EOF and +never failed when it encountered other problems. + +</DL> + +<H2 id="g3">ABOUT G3</H2> + +<P>G3 is the near universal format used by fax machines. There is also +a newer, more capable G4. + +<p>The standard for Group 3 fax is defined in CCITT Recommendation T.4. +In the U.S., that is implemented by EIA standards EIA-465 and EIA-466. +These standards cover the layers below the image format (which are +irrelevant to <b>g3topbm</b> as well. + +<p>G3 faxes are 204 dots per inch (dpi) horizontally and 98 dpi (196 +dpi optionally, in fine-detail mode) vertically. Since G3 neither +assumes error free transmission nor retransmits when errors occur, the +encoding scheme used is differential only over small segments never +exceeding 2 lines at standard resolution or 4 lines for fine-detail. +(The incremental G3 encoding scheme is called two-dimensional and the +number of lines so encoded is specified by a parameter called k.) + + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pbmtog3.html">pbmtog3</A>, +<A HREF="pbm.html">pbm</A> + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#g3">ABOUT G3</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/gemtopbm.html b/gemtopbm.html new file mode 100644 index 00000000..402e4895 --- /dev/null +++ b/gemtopbm.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Gemtopbm User Manual</TITLE> +</HEAD><BODY> +<H1>gemtopbm</H1> +Updated: May 2000 +<BR> +<H2>NAME</H2> +<B>gemtopbm</B> - replaced by gemtopnm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>gemtopbm</b> was replaced in Netpbm 9.1 (May 2000) by +<b><a href="gemtopnm.html">gemtopnm</a></b>. + +<P><B>gemtopnm</b> is backward compatible with <b>gemtopbm</b>, but +works on color images as well. + +</BODY> +</HTML> diff --git a/gemtopnm.html b/gemtopnm.html new file mode 100644 index 00000000..39c9d387 --- /dev/null +++ b/gemtopnm.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Gemtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>gemtopnm</H1> +Updated: 30 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +gemtopnm - convert a GEM .img file into a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>gemtopnm</B> +[<B>-d</B>] +[<I>gemfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>gemtopnm</b> reads a GEM .img file, either the one plane +(black/white) or four plane (16 color) varieety, as input and produces +a PBM or PPM file as output, depending on whether the input is one or +four plane. + +<p>The input file is <i>gemfile</i> if you specify that argument, or +Standard Input otherwise. Output is to Standard Output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-d</B> + +<DD>Produce output describing the contents of the .img file. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtogem.html">pbmtogem</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1988 Diomidis D. Spinellis (<A +HREF="mailto:dds@cc.ic.ac.uk">dds@cc.ic.ac.uk</A>). + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/giftopnm.html b/giftopnm.html new file mode 100644 index 00000000..3a3d2f2e --- /dev/null +++ b/giftopnm.html @@ -0,0 +1,182 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Giftopnm User Manual</TITLE></HEAD> +<BODY> +<H1>giftopnm</H1> +Updated: 6 August 2006 +<BR> + +<A HREF="#index">Table Of Contents</A> + +giftopnm - convert a GIF file into a PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>giftopnm</B> +[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] +[<B>-verbose</B>] +[<B>-comments</B>] +[<B>-image=</B>{<I>N</I>,<B>all</b>}] +[<B>-quitearly</B>] +[<I>GIFfile</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This is a graphics format converter from the GIF format to the PNM +(i.e. PBM, PGM, or PPM) format. + +<P>If the image contains only black and maximally bright white, the +output is PBM. If the image contains more than those two colors, but +only grays, the output is PGM. If the image contains other colors, +the output is PPM. + +<P> A GIF image contains rectangular pixels. They all have the same +aspect ratio, but may not be square (it's actually quite unusual for +them not to be square, but it could happen). The pixels of a Netpbm +image are always square. Because of the engineering complexity to do +otherwise, <B>giftopnm</B> converts a GIF image to a Netpbm image +pixel-for-pixel. This means if the GIF pixels are not square, the +Netpbm output image has the wrong aspect ratio. In this case, +<B>giftopnm</B> issues an informational message telling you to run +<B>pamscale</B> to correct the output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>--alphaout=</B><I>alpha-filename</I> + +<DD><B>giftopnm </B> creates a PGM (portable graymap) file containing +the alpha channel values in the input image. If the input image +doesn't contain an alpha channel, the <I>alpha-filename</I> file +contains all zero (transparent) alpha values. If you don't specify +<B>--alphaout</B>, <B>giftopnm</B> does not generate an alpha file, +and if the input image has an alpha channel, <B>giftopnm</B> simply +discards it. + +<P>If you specify <B>-</B> as the filename, <B>giftopnm</B> writes the +alpha output to Standard Output and discards the image. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +<DT><B>-verbose</B> + +<DD>Produce verbose output about the GIF file input. + +<DT><B>-comments</B> + +<DD> +Only output GIF89 comment fields. + +<DT><B>-image=</B>{<I>N</I>,<B>all</b>} + +<DD> +This option identifies which image from the GIF stream you want. +You can select either one image or all the images. Select al the +images with <b>all</b>. Select one image by specifying its sequence +number in the stream: <b>1</b>, <b>2</b>, <b>3</b>, etc. + +<p>The default is just Image 1. + +<p>A GIF stream normally contains only one image, so you don't need +this option. But some streams, including animated GIFs, have multiple +images. + +<p>When you select multiple GIF images, the output is a PNM stream with +multiple images. + +<p>If you specify a single image, <b>giftopnm</b> must read and +partially validate the images before that in the stream. It may or may +not do the same for the images after it; see <b>-quitearly</b>. + +<p>The <b>all</b> value was added in Netpbm 10.16 (June 2003). Earlier +<b>giftopnm</b> can extract only one image. + +<dt><b>-quitearly</b> + +<dd>This options makes <b>giftopnm</b> stop reading its input file as soon +as it has converted and output the images from the input that you requested. +By default, <b>giftopnm</b> reads until the end of the GIF stream, ignoring +any data after the images you requested. + +<p>Two reasons <em>not</em> to use this option: +<ul> +<li>The input file is a pipe and the process that is filling that pipe +expects the pipe to take the entire stream and will fail or get stuck +if it doesn't. + +<li>You want to validate the entire GIF stream. + +</ul> + +<p>Two reasons to use this option: + +<ul> +<li>It saves the time and other resources to read the end of the stream. +<li>There are errors in the end of the stream that make <b>giftopnm</b> fail. +</ul> + +<p>This option has no effect if you also specify <b>-image=all</b> + +<P>This option was new in Netpbm 10.35 (August 2006). Before that, +<b>giftopnm</b> always reads the entire stream. + +</DL> + +<H2 id="restrictions">RESTRICTIONS</H2> + +<p>This does not correctly handle the Plain Text Extension of the +GIF89 standard, since I did not have any example input files +containing them. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamtogif.html">pamtogif</A></B>, +<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<<A +HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A>>, +<B><A HREF="ppm.html">ppm</A></B>. + +<H2 id="author">AUTHOR</H2> + +<p>Copyright (c) 1993 by David Koblas (<A +HREF="mailto:koblas@netcom.com">koblas@netcom.com</A>) + +<H2 id="license">LICENSE</H2> + +<p>As a historical note, for a long time if you used <B>giftopnm</B>, +you were using a patent on the LZW compression method which was owned +by Unisys, and in all probability you did not have a license from +Unisys to do so. Unisys typically asked $5000 for a license for +trivial use of the patent. Unisys never enforced the patent against +trivial users, and made statements that it is much less concerned +about people using the patent for decompression (which is what +<B>giftopnm</B> does than for compression. The patent expired in +2003. + +<P>Rumor has it that IBM also owns a patent covering <B>giftopnm</B>. + +<P>A replacement for the GIF format that has never required any patent +license to use is the PNG format. + + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#restrictions">RESTRICTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +<LI><A HREF="#license">LICENSE</A> +</UL> +</BODY> +</HTML> diff --git a/globe.jpg b/globe.jpg new file mode 100644 index 00000000..51dfb634 --- /dev/null +++ b/globe.jpg Binary files differdiff --git a/gobot.gif b/gobot.gif new file mode 100644 index 00000000..d7f767d1 --- /dev/null +++ b/gobot.gif Binary files differdiff --git a/gouldtoppm.html b/gouldtoppm.html new file mode 100644 index 00000000..c2949427 --- /dev/null +++ b/gouldtoppm.html @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Gouldtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>gouldtoppm</H1> +Updated: 20 May 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +gouldtoppm - convert Gould scanner file into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>gouldtoppm</B> +[<I>gouldfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>gouldtoppm</b> reads a file produced by the Gould scanner as +input and produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Copyright(C) 1990 by Stephen Paul Lesniewski + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/hdifftopam.html b/hdifftopam.html new file mode 100644 index 00000000..ae1d9dcf --- /dev/null +++ b/hdifftopam.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Hdifftopam User Manual</TITLE></HEAD> +<BODY> +<H1>hdifftopam</H1> +Updated: 15 April 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +hdifftopam - convert horizontal difference image to original PAM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>hdifftopam</B>[<I>pamfile</I>] +[<B>-pnm</B>] +[<B>-verbose</B>] + +<P> +Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>hdifftopam</B> undoes what <B>pamtohdiff</B> does. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> +<DL COMPACT> +<DT><B>-pnm</B> + +<DD> + This option tells <B>hdifftopam</B> to create a PNM image (i.e. PGM or + PPM). Without it, <B>hdifftopam</B> creates a PAM image (with a + tuple type of "unhdiff"). If the PAM does not have the proper depth + to be a PGM or PPM (i.e. 1 or 3) and you specify <B>-pnm</B>, + <B>hdifftopam</B> fails. +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamtohdiff.html">pamtohdiff</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Bryan Henderson + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/hipstopgm.html b/hipstopgm.html new file mode 100644 index 00000000..fae9c743 --- /dev/null +++ b/hipstopgm.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Hipstopgm User Manual</TITLE></HEAD> +<BODY> +<H1>hipstopgm</H1> +Updated: 24 August 89 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +hipstopgm - convert a HIPS file into a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>hipstopgm</B> +[<I>hipsfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>hipstopgm</b> reads a HIPS file as input and produces a PGM +image as output. + +<P>If the HIPS file contains more than one frame in sequence, +<b>hipstopgm</b> will concatenate all the frames vertically. + +<P>HIPS is a format developed at the Human Information Processing +Laboratory, NYU. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/hpcdtoppm.html b/hpcdtoppm.html new file mode 100644 index 00000000..885ed253 --- /dev/null +++ b/hpcdtoppm.html @@ -0,0 +1,448 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Hpcdtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>hpcdtoppm</H1> +Updated: 7 August 2003 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +hpcdtoppm - convert a Photo-CD image into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>hpcdtoppm</B> +<I>infile</I> +[<B>-a</B>] +[{<B>-C</B>|<B>-0</B>|<B>-Overview</B>|<B>-O</B>} <I>file opt</I>] +[<B>-c0</B>] +[<B>-c-</B>] +[<B>-c+</B>] +[<B>-crop</B>] +[<B>-d</B>] +[<B>-dpi</B> <I>f</I>] +[<B>-eps</B>] +[<B>-epsd</B>] +[<B>-epsg</B>] +[<B>-fak</B> <I>scale</I>] +[<B>-hori</B>] +[<B>-i</B>] +[<B>-l</B>] +[<B>-m</B>] +[<B>-n</B>] +[<B>-pb</B> <I>pos</I>] +[<B>-pgm</B>] +[<B>-ph</B> <I>height</I>] +[<B>-pl</B> <I>pos</I>] +[<B>-pos</B>] +[<B>-ppm</B>] +[<B>-ps</B>] +[<B>-psd</B>] +[<B>-psg</B>] +[<B>-pw</B> <I>width</I>] +[<B>-r</B>] +[<B>-rep</B>] +[<B>-S</B> <I>long short</I>] +[<B>-s</B>] +[<B>-vert</B>] +[<B>-x</B>] +[<B>-ycc</B>] +[<B>-1</B>|<B>-Base/16</B>|<B>-128x192</B>] +[<B>-2</B>|<B>-Base/4</B>|<B>-256x384</B>] +[<B>-3</B>|<B>-Base</B>|<B>-512x768</B>] +[<B>-4</B>|<B>-4Base</B>|<B>-1024x1536</B>] +[<B>-5</B>|<B>-16Base</B>|<B>-2048x3072</B>] +[<B>-6</B>|<B>-64Base</B>|<B>-4096x6144</B>] +[<I>outfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This program accepts Photo-CD image or overview file data from the +specified input file, <I>infile</I> (or, if the resolution is lower +than 64Base and the file argument is specified as <B>-</B>, from +standard input), and writes either PBM Format or PostScript to the +specified output file (or to standard output if no file is specified). + +<P>On a standard Photo-CD, image files appear in the directory +<b>photo_cd/images</b>, in files with names of the form +img<I>nnnn</i>.pcd, where <I>nnnn</I> is a 4-digit-number. The +overview file appears in <B>photo_cd/overview.pcd</B>. + +<P>Photo-CD images are stored using as many as 6 different resolutions: + + +<PRE> + Format Resolution + ------ ---------- + 64Base 4096x6144 (ProPhotoCD only) + 16Base 2048x3072 + 4Base 1024x1536 + Base 512x768 + Base/4 256x384 + Base/16 128x192 +</PRE> + +<P>The overview file employs Base/16 format. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +Invoking <b>hpcdtoppm</b> without arguments produces a list of default +values. Note that you can supply only one size option. + +<DL COMPACT> +<DT><B>-a</B> + +<DD>Automatically determine image orientation (this option is +experimental, and does not work for overview files). + +<DT>{<B>-C</B> | <B>-0</B> | <B>-Overview</B> | <B>-O</B> } <I>file opt</I> + +<DD>Extract all images from an overview file. The mandatory +<I>file</I> argument is the name of a PPM file; output files are named +<i>filennnn</I>, where <I>nnnn</I> is a 4-digit number. Overview +images are extracted in their original Base/16 format. The value of +<I>opt</I> determines the orientation of the contact sheet image; +recognized values are: + +<DL COMPACT> +<DT><B>n</B> + +<DD>Do not rotate the image. + +<DT><B>l</B> + +<DD>Rotate the picture counter-clockwise (portrait mode). + +<DT><B>r</B> + +<DD>Rotate the picture clockwise (portrait mode). + +</DL> + +<DT><B>-c0</B> + +<DD>Do not correct (brighten or darken) the image. + +<DT><B>-c-</B> + +<DD>Darken the image. + +<DT><B>-c+</B> + +<DD>Brighten the image. + +<DT><B>-crop</B> + +<DD>Cut off the black frame which sometimes appears at the image +borders. + +<DT><B>-d</B> + +<DD>Show only the decompressed difference rather than the complete image +(applicable only to 4Base and 16Base images). + +<DT><B>-dpi</b> <i>res</i> + +<DD>Set the printer resolution to <I>res</I> for dithered Postscript +images. + +<DT><B>-eps</B> + +<DD>Write a RGB Encapsulated Postscript color image. + +<DT><B>-epsd</B> + +<DD>Write a Floyd-Steinberg dithered image in Encapsulated Postscript. + +<DT><B>-epsg</B> + +<DD>Write a grayscale image in Encapsulated Postscript. + +<DT><B>-fak</b> <i>scale</i> + +<DD>Set the scaling factor for dithered PostScript images to +<I>scale</I>. + +<DT><B>-hori</B> + +<DD>Flip the image horizontally. + +<DT><B>-i</B> + +<DD>Send information from an image file header to Standard Error. + +<DT><B>-l</B> + +<DD>Rotate the picture counter-clockwise (portrait mode). + +<DT><B>-m</B> + +<DD>Write messages about the phases of decoding to standard error. + +<DT><B>-n</B> + +<DD>Do not rotate the image. + +<DT><B>-pb</b> <i>pos</i> + +<DD>Set the bottom position of the Postscript image to <I>pos</I>. + +<DT><B>-pgm</B> + +<DD>Write a <I>pgm</I> (grayscale) image. + +<DT><B>-ph height</B> + +<DD>Set the height of the Postscript image to <I>height</I>. + +<DT><B>-pl</b> <i>pos</i> + +<DD>Set the leftmost position of the Postscript image to <I>pos</I>. + +<DT><B>-pos</B> + +<DD>Print the relative starting position of the data for the current +resolution. + +<DT><B>-ppm</B> + +<DD>Write a <I>ppm</I> RGB (color) image. + +<DT><B>-ps</B> + +<DD>Write a RGB Postscript color image. + +<DT><B>-psd</B> + +<DD>Write a Floyd-Steinberg dithered image in Postscript. + +<DT><B>-psg</B> + +<DD>Write a Postscript grayscale image. + +<DT><B>-pw width</B> + +<DD>Set the width of the Postscript image to <I>width</I>. + +<DT><B>-r</B> + +<DD>Rotate the picture clockwise (portrait mode). + +<DT><B>-rep</B> + +<DD>Try to jump over reading errors in the Huffman code. + +<DT><B>-S</b> <i>long</i> <i>short</i> + +<DD>Cut out a subrectangle with boundaries defined by the values: + +<DL COMPACT> +<DT><I>long</I> + +<DD>For the longer side of the image. + +<DT><I>short</I> + +<DD>For the shorter side of the image. + +</DL> + +where <I>long</I> and <I>short</I> take one of two forms: + +<DL COMPACT> +<DT><B>a-b</B> + +<DD>Cut from position <I>a</I> to position <I>b</I>. + +<DT><B>a+b</B> + +<DD>Starting at offset <I>a</I>, cut a length of <I>b</I>. + +</DL> + +and where <I>a</I> and <I>b</I> are either integers representing pixel +locations, or floating point values over the range [0.0 ... 1.0], +representing the fraction of the length of a side. + +<DT><B>-s</B> + +<DD>Apply a simple sharpness operator to the luminosity channel. + +<DT><B>-vert</B> + +<DD>Flip the image vertically. + +<DT><B>-x</B> + +<DD> Overskip Mode (applicable to Base/16, Base/4, Base and 4Base). +In Photo-CD images the luminosity channel is stored in full +resolution, the two chromaticity channels are stored in half +resolution only and have to be interpolated. In Overskip Mode, the +chromaticity channels of the next higher resolution are taken instead +of interpolating. To see the difference, generate one PPM with and +one PPM without this option. Use <B><A +HREF="pamarith.html">pamarith</A></B> to generate the difference image +of these two images. Call <B><A HREF="ppmhist.html">ppmhist</A></B> +for this difference or show it with <b>xv</b> (push the <B>HistEq</B> button +in the color editor). + +<DT><B>-ycc</B> + +<DD>Write the image in a variation on PPM format in which the samples +are YCC instead of RGB. + +<DT><B>-1</B>|<B>-Base/16</B>|<B>-128x192</B> + +<DD>Extract the Base/16 image. + +<DT><B>-2</b>|<b>-Base/4</b>|<b>-256x384</B> + +<DD>Extract the Base/4 image. + +<DT><B>-3</b>|<b>-Base</b>|<b>-512x768</B> + +<DD>Extract the Base image. + +<DT><B>-4</b>|<b>-4Base</b>|<b>-1024x1536</B> + +<DD>Extract the 4Base image. + +<DT><B>-5</b>|<b>-16Base</b>|<b>-2048x3072</B> + +<DD>Extract the 16Base image. + +<DT><B>-6</b>|<b>-64Base</b>|<b>-4096x6144</B> + +<DD>Extract the 64Base image. This resolution can be extracted from +ProPhotoCD images only. The path of the 64Base extension files is +derived from the path to the image file. This means that it doesn't +work on stdin an the directory structure must be the very same as on +the ProPhotoCD. + +</DL> + +<A NAME="lbAF"> </A> +<H2>Postcript Output</H2> + +<p>For Postscript output (options <B>-ps</B>, <B>-eps</B>, +<B>-psg</B>, <B>-epsg</B>, <B>-psd</B>, <B>-epsg</B>) you can define +both the resolution and placement of the image. Both size and +position are specified in points (1/72 inch). + +<P>The position of the image (where the origin is assumed to be at the +lower left corner of the page) is controlled by the <B>-pl</B> and +<B>-pb</B> options (applicable at all resolutions). + +<P>The size of color and grayscale images is changed with the +<B>-pw</B> and <B>-ph</B> options. Every image pixel is mapped onto +one Postscript pixel. + +<P>There are three modes of control for dithered Postscript: + +<DL COMPACT> +<DT>Image size + +<DD> (<B>-pw</B> and <B>-ph</B>) + +<DT>Printer resolution + +<DD>(<B>-dpi</B>) + +<DT>Scaling factor + +<DD>(<B>-fak</B>) + +</DL> + +<P>These three factors are interdependent, hence no more then two can +be specified simultaneously. Using <B>-dpi</B> and the +<B>-pw</B>/<B>-ph</B> options together often yields pleasing results. +Even using the default values for these options will produce results +differing from those obtained without use of the options. + +<A NAME="lbAG"> </A> +<H2>Limitations</H2> +<p>The program ignores read protection. + +<P>The <B>-i</B> option is not working correctly. + +<P>Available information obout the Photo-CD format is vague; this +program was developed by trial-and-error after staring at hex-dumps. +Please send bugs reports and patches to the author. + + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pcdovtoppm.html">pcdovtoppm</A>, +<A HREF="pamarith.html">pamarith</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="ppmhist.html">ppmhist</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="ppmtopgm.html">ppmtopgm</A>, +<A HREF="ppmtorgb3.html">ppmtorgb3</A>, +<b>xv</b> + + +<A NAME="lbAI"> </A> +<H2>VERSION</H2> + +<p>The name <b>hpcdtoppm</b> stands for "Hadmut's pcdtoppm," to +make it distinguishable in the event that someone else is building a +similar application and naming it <b>pcdtoppm</b>. + +<p>This is version 0.6. + + +<A NAME="lbAJ"> </A> +<H2>AUTHOR</H2> + +Copyright (c) 1992, 1993, 1994 by Hadmut Danisch (<A +HREF="mailto:danisch@ira.uka.de">danisch@ira.uka.de</A>). + +<p>Hadmut Danish has given permission to Bryan Henderson (August 2003) +to distribute this documentation as part of Netpbm on Sourceforge and +therefore to license this copy of this documentation to the public +with the following Sourceforge-compatible license. Note that this +license does not contain a restriction on one's right to sell the +material, as does the <b>hpcdtoppm</b> program itself and other copies +of this documentation. + +<p>This software is not public domain. Permission to use and +distribute this software and its documentation for noncommercial use +and without fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation. + +<P>The <b>hpcdtoppm</b> software itself (as opposed to this supporting +documentation) is licensed by Danisch under a similar license, but +with an additional restriction that a recipient may not sell the +software or use it in profit-making activity. See the source code of +the program for details on its license. + +<P> Manual page extensively modified by R. P. C. Rodgers (<A +HREF="mailto:rodgers@nlm.nih.gov">rodgers@nlm.nih.gov</A>). + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">POSTSCRIPT OUTPUT</A> +<LI><A HREF="#lbAG">LIMITATIONS</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">VERSION</A> +<LI><A HREF="#lbAJ">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/icontopbm.html b/icontopbm.html new file mode 100644 index 00000000..5947a51a --- /dev/null +++ b/icontopbm.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Icontopbm User Manual</TITLE></HEAD> +<BODY> +<H1>icontopbm</H1> +Updated: 31 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +icontopbm - convert a Sun icon into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>icontopbm</B> +[<I>iconfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>icontopbm</b> reads a Sun icon as input and +produces a PBM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtoicon.html">pbmtoicon</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/ilbmtoppm.html b/ilbmtoppm.html new file mode 100644 index 00000000..5df75159 --- /dev/null +++ b/ilbmtoppm.html @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ilbmtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>ilbmtoppm</H1> +Updated: 04 October 1993 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ilbmtoppm - convert an ILBM file into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ilbmtoppm</B> +[<B>-verbose</B>] +[<B>-ignore</B><chunkID><B>]</B> +[<B>-isham</B>|<B>-isehb</B>] +[<B>-adjustcolors</B>] +[<I>ILBMfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ilbmtoppm</b> reads an IFF ILBM file as input and produces a PPM +image as output. <b>ilbmtoppm</b> can handle the following ILBM types: + +<UL> +<LI>Normal ILBMs with 1-16 planes. +<LI>Amiga Extra_Halfbrite (EHB) +<LI>Amiga HAM with 3-16 planes. +<LI>24 bit. +<LI>Multiplatte (normal or HAM) pictures. +<LI>Color map (BMHD + CMAP chunk only, nPlanes = 0). +<LI>Unofficial direct color. +1-16 planes for each color component. +</UL> + +<P><B>ilbmtoppm</b> uses these ILBM chunks: BMHD, CMAP, CAMG (only HAM +& EHB flags used), PCHG, BODY unofficial DCOL chunk to identify +direct color ILBM. It ignores these chunks: GRAB, DEST, SPRT, CRNG, +CCRT, CLUT, DPPV, DRNG, EPSF. It ignores, but displays in verbose +mode, these: NAME, AUTH, (c), ANNO, DPI. It skips chunks whose type +it doesn't recognize. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-verbose</B> + +<DD>Give some information about the ILBM file. + +<DT><B>-ignore</b> <i>chunkID</i> + +<DD>Skip a chunk. <i>chunkID</i> is the 4-letter IFF chunk identifier +of the chunk to be skipped. + +<DT><B>-isham</b> | <b>-isehb</B> + +<DD>Treat the input file as a HAM or Extra_Halfbrite picture, even if +these flags are not set in the CAMG chunk (or if there is no CAMG +chunk). + +<DT><B>-adjustcolors</B> + +<DD>If all colors in the CMAP have a value of less then 16, ilbmtoppm +assumes a 4-bit colormap and gives a warning. With this option the +colormap is scaled to 8 bits. + +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p>The multipalette PCHG BigLineChanges and Huffman decompression code +is untested. + +<A NAME="lbAG"> </A> +<H2>REFERENCES</H2> + +Amiga ROM Kernel Reference Manual - Devices (3rd Ed.) +Addison Wesley, ISBN 0-201-56775-X + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtoilbm.html">ppmtoilbm</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAI"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<p>Modified October 1993 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">REFERENCES</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/imgtoppm.html b/imgtoppm.html new file mode 100644 index 00000000..9fac15f4 --- /dev/null +++ b/imgtoppm.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Imgtoppm User Manual</TITLE></HEAD> +<BODY> + +<H1>imgtoppm</H1> +Updated: 05 September 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +imgtoppm - convert an Img-whatnot file into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>imgtoppm</B> +[<I>imgfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>imgtoppm</b>reads an Img-whatnot file as input and produces a +PPM image as output. The Img-whatnot toolkit is available for FTP on +venera.isi.edu, along with numerous images in this format. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Based on a simple conversion program posted to comp.graphics by Ed Falk. +<P> +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Index</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..505f8b94 --- /dev/null +++ b/index.html @@ -0,0 +1,852 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>User manual for Netpbm</TITLE></HEAD> +<BODY> +<H1>Netpbm</H1> +Updated: 24 August 2006 +<BR> +<?makeman .SH NAME ?> +<?makeman netpbm \- netpbm library overview ?> + +<H2 id="overview">Overview Of Netpbm</H2> + +<P><B>Netpbm</B> is a package of graphics programs and a programming +library. <P> There are over 220 separate programs in the package, +most of which have "pbm", "pgm", "ppm", +"pam", or "pnm" in their names. For example, +<B><a href="pamscale.html">pamscale</a></B> and <B><a +href="giftopnm.html">giftopnm</a></B>. + +<P>For example, you might use <B>pamscale</B> to shrink an image by +10%. Or use <B>pamcomp</B> to overlay one image on top of another. +Or use <B>pbmtext</B> to create an image of text. Or reduce the number +of colors in an image with <B>pnmquant</B>. + +<p><b>Netpbm</b> is an open source software package, distributed via +the <a href="http://sourceforge.net/projects/netpbm">Sourceforge +<b>netpbm</b> project</a>. + +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#overview">Overview Of Netpbm</A> +<LI><A HREF="#formats">The Netpbm Formats</A> +<UL> + <LI><A HREF="#impconv">Implied Format Conversion</A> + <LI><A HREF="#transparency">Netpbm and Transparency</A> + </UL> +<LI><A HREF="#programs">The Netpbm Programs</A> +<UL> + <LI><A HREF="#commonoptions">Common Options</A> + <LI><A HREF="#directory">Directory</A> + <LI><A HREF="#prognotes">How To Use The Programs</A> + </UL> +<LI><A HREF="#libnetpbm">The Netpbm Library</A> +<LI><A HREF="#config">netpbm-config</A> +<li><a href="#memoryusage">Memory Usage</a> +<li><a href="#cpuusage">CPU Usage</a> +<LI><A HREF="#companion">Companion Software</A> +<ul> + <LI><A HREF="#phpnetpbm">PHP-NetPBM</A> + </ul> +<LI><A HREF="#othersoftware">Other Graphics Software</A> +<ul> + <li><a href="#viewers">Image Viewers</a> + <li><a href="#visual">Visual Graphics Software</a> + <li><a href="#programmingtools">Programming Tools</a> + <li><a href="#toolsforformats">Tools For Specific Graphics Formats</a> + <li><a href="#document">Document/Graphics Software</a> + <li><a href="#otherothersoftware">Other</a> + </ul> +<LI><A HREF="#otherfmt">Other Graphics Formats</A> +<LI><A HREF="#history">History</A> +<LI><A HREF="#author">Author</A> +</UL> + +<H2 id="programs">The Netpbm Programs</H2> + +<P>The Netpbm programs are generally useful run by a person from a +command shell, but are also designed to be used by programs. A common +characteristic of Netpbm programs is that they are simple, fundamental +building blocks. They are most powerful when stacked in pipelines. +Netpbm programs do not use graphical user interfaces and do not seek +input from a user. The only programs that display graphics at all are +the very primitive display programs <b>pamx</b> and <b>ppmsvgalib</b>, +and they don't do anything but that. + +<P>Each of these programs has its own manual, as linked in the +directory below. + +<P>The Netpbm programs can read and write files greater than 2 GiB wherever +the underlying system can. There may be exceptions where the programs use +external libraries (The JPEG library, etc.) to access files and the external +library does not have large file capability. Before Netpbm 10.15 (April +2003), no Netpbm program could read a file that large. + +<H3 id="commonoptions">Common Options</H3> + +<P> +There are a few options that are present on all programs that are based +on the Netpbm library, including virtually all Netpbm programs. These +are not mentioned in the individual manuals for the programs. + +<p>You can use two hyphens instead of one on these options if you like. + +<DL COMPACT> + +<DT><B>-quiet</B> + +<DD> Suppress all informational messages that would otherwise be +issued to Standard Error. (To be precise, this only works to the +extent that the program in question implements the Netpbm convention +of issuing all informational messages via the <B>pm_message()</B> +service of the Netpbm library). + +<DT><B>-version</B> + +<DD>Instead of doing anything else, report the version of the +<B>libnetpbm</B> library linked with the program (it may have been +linked statically into the program, or dynamically linked at run +time). Normally, the Netpbm programs and the library are installed +at the same time, so this tells you the version of the program and all +the other Netpbm files it uses as well. + +<DT><B>-plain</b> + +<DD>If the program generates an image in Netpbm format, generate it in +the "plain" (aka "ascii") version of the format, as opposed to the +"raw" (aka "binary") version. + +<p> +This option was introduced in Netpbm 10.10 (October 2002). + +</DL> + +<H3 id="directory">Directory</H3> +<P>Here is a complete list of all the Netpbm programs (with links to +their manuals): + +<p> +<a href="directory.html">Netpbm program directory</a> + + +<H3 id="prognotes">How To Use The Programs</H3> + +<P> +As a collection of primitive tools, the power of Netpbm is multiplied +by the power of all the other unix tools you can use with them. These +notes remind you of some of the more useful ways to do this. Often, +when people want to add high level functions to the Netpbm tools, they +have overlooked some existing tool that, in combination with Netpbm, +already does it. +<P> +Often, you need to apply some conversion or edit to a whole bunch of files. +<P> +As a rule, Netpbm programs take one input file and produce one output file, +usually on Standard Output. This is for flexibility, since you so often +have to pipeline many tools together. +<P> +Here is an example of a shell command to convert all your of PNG files +(named *.png) to JPEG files named *.jpg: +<pre> +for i in *.png; do pngtopnm $i | ppmtojpeg >`basename $i .png`.jpg; done +</pre> + +<P> +Or you might just generate a stream of individual shell commands, one +per file, with awk or perl. Here's how to brighten 30 YUV images that +make up one second of a movie, keeping the images in the same files: + +<pre> +ls *.yuv + | perl -ne 'chomp; + print yuvtoppm $_ | ppmbrighten -v 100 | ppmtoyuv >tmp$$.yuv; + mv tmp$$.yuv $_ + ' + | sh +</pre> + +<P>The tools <B>find</B> (with the <B>-exec</B> option) and +<B>xargs</B> are also useful for simple manipulation of groups of files. + +<P> +Some shells' "process substitution" facility can help where a +non-Netpbm program expects you to identify a disk file for input and +you want it to use the result of a Netpbm manipulation. Say +the hypothetical program <b>printcmyk</b> +takes the filename of a Tiff CMYK file as input and what you have is a +PNG file +<B>abc.png</B>. + +Try: +<pre> +printcmyk <({ pngtopnm abc.png | pnmtotiffcmyk ; }) +</pre> + +<P>It works in the other direction too, if you have a program that +makes you name its output file and you want the output to go through a +Netpbm tool. + + +<H2 id="formats">The Netpbm Formats</H2> + +<P> +All of the programs work with a set of graphics formats called the +"netpbm" formats. Specifically, these formats are +<A HREF="pbm.html">pbm</A>, +<A HREF="pgm.html">pgm</A>, +<A HREF="ppm.html">ppm</A>, +and +<A HREF="pam.html">pam</A>. + +The first three of these are sometimes known generically as +"pnm". + +Many of the Netpbm programs convert from a Netpbm format to another +format or vice versa. This is so you can use the Netpbm programs to +work on graphics of any format. It is also common to use a +combination of Netpbm programs to convert from one non-Netpbm format +to another non-Netpbm format. Netpbm has converters for about 100 +graphics formats, and as a package Netpbm lets you do more graphics +format conversions than any other computer graphics facility. +<P> +The Netpbm formats are all raster formats, i.e. they describe an image +as a matrix of rows and columns of pixels. In the PBM format, the +pixels are black and white. In the PGM format, pixels are shades of +gray. In the PPM format, the pixels are in full color. The PAM format +is more sophisticated. A replacement for all three of the other formats, +it can represent matrices of general data including but not limited to +black and white, grayscale, and color images. +<P> +Programs designed to work with PBM images have "pbm" in their names. +Programs designed to work with PGM, PPM, and PAM images similarly have +"pgm", "ppm", and "pam" in their names. +<P> +All Netpbm programs designed to read PGM images see PBM images as if +they were PGM too. All Netpbm programs designed to read PPM images +see PGM and PBM images as if they were PPM. See <a href="#impconv"> +Implied Format Conversion</a>. + +<P> Programs that have "pnm" in their names read PBM, PGM, +and PPM but unlike "ppm" programs, they distinguish between +them and their function depends on the format. For example, <B><a +href="pnmtopng.html">pnmtopng</a></B> creates a black and white PNG +output image if its input is PBM or PGM, but a color PNG output image +if its input is PPM. And <B>pnmrotate</B> produces an output image of +the same format as the input. A hypothetical <B>ppmrotate</B> program +would also read all three PNM input formats, but would see them all as +PPM and would always generate PPM output. + +<P>Programs that have "pam" in their names read all the Netpbm +formats: PBM, PGM, PPM, and PAM. They sometimes treat them all as if +they are PAM, using an implied conversion, but often they recognize +the individual formats and behave accordingly, like a "pnm" program +does. See <a href="#impconv">Implied Format Conversion</a>. + +<P> If it seems wasteful to you to have three separate PNM formats, be +aware that there is a historical reason for it. In the beginning, +there were only PBMs. PGMs came later, and then PPMs. Much later +came PAM, which realizes the possibility of having just one aggregate +format. + +<P>The formats are described in the specifications of +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +and +<B><A HREF="pam.html">pam</A></B>. + +<H3 id="impconv">Implied Format Conversion</H3> + +<P>A program that uses the PGM library subroutines to read an image +can read a PBM image as well as a PGM image. The program sees the PBM +image as if it were the equivalent PGM image, with a maxval of 255. +<strong>note:</strong> This sometimes confuses people who are looking +at the formats at a lower layer than they ought to be because a zero +value in a PBM raster means white, while a zero value in a PGM raster +means black. + +<P>A program that uses the PPM library subroutines to read an image +can read a PGM image as well as a PPM image and a PBM image as well as +a PGM image. The program sees the PBM or PGM image as if it were the +equivalent PPM image, with a maxval of 255 in the PBM case and the +same maxval as the PGM in the PGM case. + +<P>A program that uses the PAM library subroutines to read an image +can read a PBM, PGM, or PPM image as well as a PAM image. The program +sees a PBM image as if it were the equivalent PAM image with tuple +type <b>BLACKANDWHITE</b>. It sees a PGM image as if it were the +equivalent PAM image with tuple type <b>GRAYSCALE</b>. It sees a PPM +image as if it were the equivalent PAM image with tuple type +<b>RGB</b>. But the program actually can see deeper if it wants to. +It can tell exactly which format the input was and may respond +accordingly. For example, a PAM program typically produces output in +the same format as its input. + +<H3 id="transparency">Netpbm and Transparency</H3> + +<P>In many graphics formats, there's a means of indicating that certain +parts of the image are wholly or partially transparent, meaning that +if it were displayed "over" another image, the other image +would show through there. Netpbm formats deliberately omit that +capability, since their purpose is to be extremely simple. + +<P>In Netpbm, you handle transparency via a transparency mask in a +separate (slightly redefined) PGM image. In this pseudo-PGM, what +would normally be a pixel's intensity is instead an opaqueness value. +See <B><A HREF="pgm.html">pgm</A></B>. <B><a +href="pamcomp.html">pamcomp</a></B> is an example of a program that uses +a PGM transparency mask. + +<P>Another means of representing transparency information has recently +developed in Netpbm, using PAM images. In spite of the argument given +above that Netpbm formats should be too simple to have transparency +information built in, it turns out to be extremely inconvenient to +have to carry the transparency information around separately. This is +primarily because Unix shells don't provide easy ways to have networks +of pipelines. You get one input and one output from each program in a +pipeline. So you'd like to have both the color information and the +transparency information for an image in the same pipe at the same +time. + +<p>For that reason, some new (and recently renovated) Netpbm programs +recognize and generate a PAM image with tuple type RGB_ALPHA or +GRAYSCALE_ALPHA, which contains a plane for the transparency +information. See <a href="pam.html">the PAM specification</a>. + + + + +<H2 id="libnetpbm">The Netpbm Library</H2> + +<P>The Netpbm programming library, <B><a +href="libnetpbm.html">libnetpbm</a></B>, makes it easy to write programs +that manipulate graphic images. Its main function is to read and +write files in the Netpbm formats, and because the Netpbm package +contains converters for all the popular graphics formats, if your +program reads and writes the Netpbm formats, you can use it with any +formats. + +<P> +But the library also contain some utility functions, such as character +drawing and RGB/YCrCb conversion. +<P> +The library has the conventional C linkage. Virtually all programs +in the Netpbm package are based on the Netpbm library. + + +<h2 id="config">netpbm-config</h2> + +<p>In a standard installation of Netpbm, there is a program named +<b>netpbm-config</b> in the regular program search path. We don't +consider this a Netpbm program -- it's just an ancillary part of a +Netpbm installation. This program tells you information about the +Netpbm installation, and is intended to be run by other programs that +interface with Netpbm. In fact, <b>netpbm-config</b> is really a +configuration file, like those you typically see in the <i>/etc/</i> +directory of a Unix system. + +<p>Example: +<pre> + $netpbm-config --datadir + /usr/local/netpbm/data +</pre> + +If you write a program that needs to access a Netpbm data file, it can +use such a shell command to find out where the Netpbm data files are. + +<p><b>netpbm-config</b> is the only file that must be installed in +a standard directory (it must be in a directory that is in the default +program search path). You can use <b>netpbm-config</b> as a bootstrap +to find all the other Netpbm files. + +<p>There is no detailed documentation of <b>netpbm-config</b>. If you're +in a position to use it, you should have no trouble reading the file +itself to figure out how to use it. + +<h2 id="memoryusage">Memory Usage</h2> + +<p>An important characteristic that varies among graphics software is +how much memory it uses, and how. Does it read an entire image into +memory, work on it there, then write it out all at once? Does it read one +and write one pixel at a time? In Netpbm, it differs from one program +to the next, but there are some generalizations we can make. + +<p>Most Netpbm programs keep one row of pixels at a time in memory. +Such a program reads a row from an input file, processes it, then +writes a row to an output file. Some programs execute algorithms that +can't work like that, so they keep a small window of rows in memory. +Others must keep the entire image in memory. If you think of what job +the program does, you can probably guess which one it does. + +<p>When Netpbm keeps a pixel in memory, it normally uses a lot more +space for it than it occupies in the Netpbm image file format. + +<p>The older programs (most of Netpbm) use 12 bytes per pixel. This +is true even for a PBM image, for which it only really takes one bit +to totally describe the pixel. Netpbm does this expansion to make +implementing the programs easier -- it uses the same format regardless +of the type of image. + +<p>Newer programs use the "pam" family of library functions +internally, which use memory a little differently. These functions +are designed to handle generic tuples with a variable numbers of +planes, so no fixed size per-tuple storage is possible. A program of +this type uses 4 bytes per sample (a tuple is composed of samples), +plus another 4 bytes per tuple. In a graphic image, a tuple is a +pixel. So an ordinary color image takes 16 bytes per pixel. + +<p>When considering memory usage, it is important to remember that +memory and disk storage are equivalent in two ways: + +<ul> +<li>Memory is often virtual, backed by swap space on disk storage. So +accessing memory may mean doing disk I/O. + +<li>Files are usually cached and buffered, so that accessing a disk file +may just mean accessing memory. +</ul> + +<p>This means that the consequences of whether a program works from +the image file or from a memory copy are not straightforward. + +<p>Note that an image takes a lot less space in a Netpbm format file, +and therefore in an operating system's file cache, than in Netpbm's +in-memory format. In non-Netpbm image formats, the data is even +smaller. So reading through an input file multiple times instead of +keeping a copy in regular memory can be the best use of memory, and many +Netpbm programs do that. But some files can't be read multiple times. +In particular, you can't rewind and re-read a pipe, and a pipe is +often the input for a Netpbm program. Netpbm programs that re-read +files detect such input files and read them into a temporary file, +then read that temporary file multiple times. + +<p>A few Netpbm programs use an in-memory format that is just one bit +per pixel. These are programs that convert between PBM and a format that +has a raster format very much like PBM's. In this case, it would actually +make the program more complicated (in addition to much slower) to use +Netpbm's generic 12 byte or 8 byte pixel representation. + +<p>By the way, the old axiom that memory is way faster than disk is not +necessarily true. On small systems, it typically is true, but on a +system with a large network of disks, especially with striping, it is +quite easy for the disk storage to be capable of supplying data faster +than the CPU can use it. + +<h2 id="cpuusage">CPU Usage</h2> + +<p>People sometimes wonder what CPU facilities Netpbm programs and the +Netpbm programming library use. The programs never depend on particular +features existing (assuming they're compiled properly), but the speed +and cost of running a program varies depending upon the CPU features. + +<p>One area of particular importance is floating point arithmetic. +The Netpbm image formats are based on integers, and Netpbm arithmetic +is done with integers where possible. But there is one significant +area that is floating point: programs that must deal with light +intensity. The Netpbm formats use integers that are proportional to +brightness, and brightness is exponentially related to light +intensity. The programs have to keep the intermediate intensity +values in floating point in order not to lose precision. And the +conversion (gamma function) between the two is heavy-duty floating +point arithmetic. + +Programs that mix pixels together have to combine light intensity, so +they do heavy floating point. Three of the most popular Netpbm +programs do that: <a href="pamscale.html"><b>pamscale</b></a> +(shrink/expand an image), <a href="pamcomp.html"><b>pamcomp</b></a> +(overlay an image over another one), and <a +href="pamditherbw.html"><b>pamditherbw</b></a> (Make a black and white +image that approximates a grayscale image). + +<p>The Netpbm image formats use 16 bit integers. The Netpbm code uses +"unsigned int" size integers to work with them. + + +<h2 id="companion">Companion Software</h2> + +<h3 id="php-netpbm">PHP-NetPBM</h3> + +<p>If you're using Netpbm to do graphics for a website, you can invoke +the Netpbm programs from a PHP script. To make this even easier, +check out <a href="http://sourceforge.net/projects/phpnetpbm">PHP-NetPBM</a>, +a PHP class that interacts with Netpbm. Its main goal is to decrease the +pain of using Netpbm when working with images in various formats. It +includes macro commands to perform manipulations on many files. + +<p>I can't actually recommend PHP-NetPBM. I spent some time staring +at it and was unable to make sense of it. Some documentation is in +fractured English and other is in an unusual character set. But a PHP +expert might be able to figure it out and get some use out of it. + +<H2 id="othersoftware">Other Graphics Software</H2> + +<P>Netpbm contains primitive building blocks. It certainly is not a +complete graphics software library. + +<h3 id="viewers">Graphics Viewers</h3> + +<P>The first thing you will want to make use of any of these tools is +a viewer. (On GNU/Linux, you can use <B>ppmsvgalib</B> in a pinch, +but it is pretty limiting). <B>zgv</B> is a good full service viewer +to use on a GNU/Linux system with the SVGALIB graphics display driver +library. You can find <B>zgv</B> at <B><A +HREF="ftp://ftp.ibiblio.org/pub/Linux/apps/graphics/viewers/svga">ftp://ftp.ibiblio.org/pub/Linux/apps/graphics/viewers/svga</A>.</B> + +<P><B>zgv</B> even has a feature in it wherein you can visually crop +an image and write an output file of the cropped image using +<B><a href="pamcut.html">pamcut</a></B>. + +See the <B>-s</B> option to <B>zgv</B>. + +<P>For the X inclined, there is also <B>xzgv</B>. + +<P><B>xloadimage</B> and its extension <B>xli</B> are also common +ways to display a graphic image in X. + +<p><b>gqview</b> is a more modern X-based image viewer. + +<p><b>qiv</b> is a small, very fast viewer for X. + +<P>To play mpeg movies, such as produced by <B>ppmtompeg</B>, +try <b><a href="http://www.mplayerhq.hu/design7/info.html">mplayer</a></b> or +<b><a href="http://sourceforge.net/projects/xine">xine</a>.</b> + +<p>See <B><A +HREF="ftp://metalab.unc.edu/pub/Linux/apps/graphics/viewers/X">ftp://metalab.unc.edu/pub/Linux/apps/graphics/viewers/X</A></B>. + +<h3 id="visual">Visual Graphics Software</h3> + +<p>Visual graphics software is modern point-and-click software that +displays an image and lets you work on it and see the results as you go. +This is fundamentally different from what Netpbm programs do. + +<P><B>ImageMagick</B> is like a visual version of Netpbm. Using the +X/Window system on Unix, you can do basic editing of images and lots +of format conversions. The package does include at least some +non-visual tools. <b>convert</b>, <b>mogrify</b>, <b>montage</b>, and +<b>animate</b> are popular programs from the <B>ImageMagick</B> +package. <B>ImageMagick</B> runs on Unix, Windows, Windows NT, +Macintosh, and VMS. + +<p><b>xv</b> is a very old and very popular simple image editor in the +Unix world. It does not have much in the way of current support, +or maintenance, though. + +<P>The Gimp is a visual image editor for Unix and X, in the same +category as the more famous, less capable, and much more expensive +Adobe Photoshop, etc. for Windows. See <B><A +HREF="http://www.gimp.org">http://www.gimp.org</A></B>. + +<p>Electric Eyes, <b>kuickshow</b>, and <b>gthumb</b> are also visual +editors for the X/Window system, and <b>KView</b> and <b>gwenview</b> +are specifically for KDE. + +<h3 id="programmingtools">Programming Tools</h3> + +<P>If you're writing a program in C to draw and manipulate images, +check out <a href="http://www.boutell.com/gd">gd</a>. Netpbm contains a +C library for drawing images, but it is probably not as capable or +documented as <b>gd</b>. You can easily run any Netpbm program from a +C program with the <b>pm_system</b> function from the Netpbm +programming library, but that is less efficient than <b>gd</b> +functions that do the same thing. + +<P><B>Ilib</B> is a C subroutine library with functions for adding +text to an image (as you might do at a higher level with +<B>pbmtext</B>, <B>pamcomp</B>, etc.). It works with Netpbm input and +output. Find it at <B><A +HREF="http://www.k5n.us/Ilib.php">k5n.us</A></B>. +Netpbm also includes character drawing functions in the <B><a +href="libnetpbm.html">libnetpbm</a></B> library, but they do not have as +fancy font capabilities (see <B><a href="ppmlabel.html">ppmlabel</a></B> +for an example of use of the Netpbm character drawing functions). + +<P><B>GD</B> is a library of graphics routines that is part of PHP. +It has a subset of Netpbm's functions and has been found to resize +images more slowly and with less quality. + +<h3 id="toolsforformats">Tools For Specific Graphics Formats</h3> + +<p><b>mencode</b>, which is part of the <b><a +href="http://www.mplayerhq.hu/design7/info.html">mplayer</a></b> package, +creates movie files. It's like a much more advanced version of <a +href="ppmtompeg.html"><b>ppmtompeg</b></a>, without the Netpbm +building block simplicity. + +<P>To create an animated GIF, or extract a frame from one, use +<B>gifsicle</B>. <B>gifsicle</B> converts between animated GIF and +still GIF, and you can use <B>pamtogif</B> and <B>giftopnm</B> to +connect up to all the Netpbm utilities. See <B><A +HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A></B>. + +<P>To convert an image of text to text (optical character recongition +- OCR), use <B>gocr</B> (think of it as an inverse of <B>pbmtext</B>). +See <B> <a +href="http://jocr.sourceforge.net/">http://jocr.sourceforge.net/</a></b>. + +<P><B><A HREF="http://schaik.com/pngsuite">http://schaik.com/pngsuite</A></B> +contains a PNG test suite -- a whole bunch of PNG images exploiting the +various features of the PNG format. + +<P>Another version of Netpbm's <B>pnmtopng</B>/<B>pngtopnm</B> is at +<B><A +HREF="http://www.schaik.com/png/pnmtopng.html">http://www.schaik.com/png/pnmtopng.html</A></B>. + +<p>The version in Netpbm was actually based on that package a long time +ago, and you can expect to find better exploitation of the PNG format, +especially recent enhancements, in that package. It may be a little +less consistent with the Netpbm project and less exploitive of recent +Netpbm format enhancements, though. + +<p><b><a href="http://pngwriter.sourceforge.net">pngwriter</a></b> is a +C++ library for creating PNG images. With it, you plot an image pixel +by pixel. You can also render text with the FreeType2 library. + +<P><B>jpegtran</B> Does some of the same transformations as Netpbm is +famous for, but does them specifically on JPEG files and does them +without loss of information. By contrast, if you were to use Netpbm, +you would first decompress the JPEG image to Netpbm format, then +transform the image, then compress it back to JPEG format. In that +recompression, you lose a little image information because JPEG is a +lossy compression. Of course, only a few kinds of lossless +transformation are possible. <B>jpegtran</B> comes with the +Independent Jpeg Group's (<A +HREF="http://www.ijg.org">http://www.ijg.org)</A> JPEG library. + +<P> Some tools to deal with EXIF files (see also Netpbm's <B><a +href="jpegtopnm.html">jpegtopnm</a></B> and <B><a +href="pnmtojpeg.html">pnmtojpeg</a></B>): + +To dump (interpret) an EXIF header: Exifdump ((<A +HREF="http://topo.math.u-psud.fr/~bousch/exifdump.py">http://topo.math.u-psud.fr/~bousch/exifdump.py)</A>) +or <A HREF="http://www.sentex.net/~mwandel/jhead">Jhead</a>. + +<P>A Python EXIF library and dumper: <A +HREF="http://pyexif.sourceforge.net.">http://pyexif.sourceforge.net.</A> + +<P>Here's some software to work with IOCA (Image Object Content +Architecture): <a +href="http://www.forminnovation.com">ImageToolbox</a> ($2500, demo +available). This can convert from TIFF -> IOCA and back again. +<a href="http://www.thethinktanksoftware.com/details.html">Ameri-Imager</a> +($40 Windows only). + +<P><B>pnm2ppa</B> converts to HP's "Winprinter" format (for +HP 710, 720, 820, 1000, etc). It is a superset of Netpbm's +<B>pbmtoppa </B> and handles, notably, color. However, it is more of +a printer driver than a Netpbm-style primitive graphics building +block. See <A +HREF="http://sourceforge.net/projects/pnm2ppa">The Pnm2ppa /Sourceforge +Project</a> + +<p><b>DjVuLibre</b> is a package of software for using the DjVu +format. It includes viewers, browser plugins, decoders, simple +encoders, and utilities. The encoders and decoders can convert +between DjVu and PNM. See <a +href="http://djvulibre.djvuzone.org/index.html"> the DjVu website.</a> + + +<h3 id="document">Document/Graphics Software</h3> + +<p>There is a large class of software that does document processing, +and that is somewhat related to graphics because documents contain +graphics and a page of a document is for many purposes a graphic +image. Because of this slight intersection with graphics, I cover +document processing software here briefly, but it is for the most part +beyond the scope of this document. + +<p>First, we look at where Netpbm meets document processing. +<b>pstopnm</b> converts from Postscript and PDF to PNM. It +effectively renders the document into images of printed pages. +<b>pstopnm</b> is nothing but a convenient wrapper for <a +href="http://www.ghostscript.com/">Ghostscript</a>, and in particular +Netpbm-format device drivers that are part of it. <b>pnmtops</b> and +<b>pbmtoepsi</b> convert a PNM image to a Postscript program for +printing the image. But to really use PDF and Postscript files, you +generally need more complex document processing software. + +<P>Adobe invented Postscript and PDF and products from Adobe are for many +purposes the quintessential Postscript and PDF tools. + +<P>Adobe's free Acrobat Reader displays PDF and converts to +Postscript. The Acrobat Reader for unix has a program name of +"acroread" and the -toPostScript option (also see the +-level2 option) is useful. + +<P>Other software from Adobe, available for purchase, interprets and +creates Postscript and PDF files. "Distill" +is a program that converts Postscript to PDF. + +<p><a href="http://www.foolabs.com/xpdf/"><b>xpdf</b></a> also reads +PDF files. + +<p>GSview, ghostview, gv, ggv, and kghostview are some other viewers +for Postscript and PDF files. + +<p>The program <b>ps2pdf</b>, part of Ghostscript, converts from Postscript +to PDF. + +<P>Two packages that produce more kinds of Encapsulated Postscript +than the Netpbm programs, including compressed kinds, are <a +href="http://bmeps.sourceforge.net/">bmeps</a> and <a +href="http://imgtops.sourceforge.net/">imgtops</a>. + +<p><b>dvips</b> converts from DVI format to Postscript. DVI is the format +that Tex produces. Netpbm can convert from Postscript to PNM. Thus, you +can use these in combination to work with Tex/Latex documents graphically. + +<p><a href="http://wvware.sourceforge.net"><b>wvware</b></a> converts +a Microsoft Word document (.doc file) to various other formats. While +the web page doesn't seem to mention it, it reportedly can extract an +embedded image in a Word document as a PNG. + +<p><A href="http://www.verypdf.com/artprint">Document Printer</a> +converts various print document formats (Microsoft Word, PDF, HTML, etc.) +to various graphic image formats. ($38, Windows only). + +<P>Latex2html converts Latex document source to HTML document source. +Part of that involves graphics, and Latex2html uses Netpbm tools for +some of that. But Latex2html through its history has had some rather +esoteric codependencies with Netpbm. Older Latex2html doesn't work +with current Netpbm. Latex2html-99.2beta8 works, though. + +<h3 id="otherothersoftware">Other</h3> + +<P>The <B>file</B> program looks at a file and tells you what kind of +file it is. It recognizes most of the graphics formats with which +Netpbm deals, so it is pretty handy for graphics work. Netpbm's +<B><a href="anytopnm.html">anytopnm</a></B> program depends on <B>file.</B> +See +<B><A HREF="ftp://ftp.astron.com/pub/file">ftp://ftp.astron.com/pub/file</A></B>. + +<P>The Utah Raster Toolkit serves a lot of the same purpose as Netpbm, +but without the emphasis on format conversions. This package is based +on the RLE format, which you can convert to and from the Netpbm +formats. The website of the <a +href="http://www.cs.utah.edu/gdc">Geometric Design And Computation +group</a> in the Department of Computer Science at University of Utah +used to (ca. 2002) have information on the Utah Raster Toolkit, but +now it doesn't. + +<P><B>Ivtools</B> is a suite of free X Windows drawing editors for +Postscript, Tex, and web graphics production, as well as an embeddable +and extendable vector graphic shell. It uses the Netpbm facilities. +See <B><A +HREF="http://www.ivtools.org">http://www.ivtools.org</A></B>. + +<P>The program <B>morph</B> morphs one image into another. It uses +Targa format images, but you can use <B>tgatoppm</B> and +<B>ppmtotga</B> to deal with that format. You have to use the +graphical (X/Tk) Xmorph to create the mesh files that you must feed to +<B>morph</B>. <B>morph</B> is part of the Xmorph package. See <B><A +HREF="http://xmorph.sourceforge.net/">http://xmorph.sourceforge.net/</A></B>. + +<H2 id="otherfmt">Other Graphics Formats</H2> + +<P>People never seem to tire of inventing new graphics formats, often +completely redundant with pre-existing ones. Netpbm cannot keep up +with them. Here is a list of a few that we know Netpbm does +<em>not</em> handle (yet). + +<p>Various commercial Windows software handles dozens of formats that +Netpbm does not, especially formats typically used with Windows programs. +ImageMagick is probably the most used free image format converter and it +also handles lots of formats Netpbm does not. + +<UL> + +<li>DjVu is a web-centric format and software platform for +distributing documents and images. Promoters say it is a good +replacement for PDF, PS, TIFF, JPEG, and GIF for distributing scanned +documents, digital documents, or high-resolution pictures, because it +downloads faster, displays and renders faster, looks nicer on a +screen, and consumes less client resources than competing formats. + +<p>For more information, see <a +href="http://djvulibre.djvuzone.org/index.html"> the DjVu website.</a> + +<LI> <a +href="http://www.web3d.org/x3d/specifications/vrml">VRML +(Virtual Reality Modelling Language)</a> + +<LI> +CALS (originated by US Department Of Defense, favored by architects). +It is described in this 1997 listing of graphicas formats: +<A HREF="http://www.faqs.org/faqs/graphics/fileformats-faq/part3/"> +http://www.faqs.org/faqs/graphics/fileformats-faq/part3/</A>. CALS +has at times been an abbreviation of various things, all of which appear +to be essentially the same format, but possibly slightly different: + +<ul> +<li>Computer Aided Logistics Support +<li>Computer Aided Acquisition and Logistics Support +<li>Continuous Acquisition and Life-cycle Support +<li>Commerce At Light Speed + +</ul> + +The US Navy publishes <a +href="http://www.dt.navy.mil/tot-shi-sys/des-int-pro/tec-inf-sys/cal-std/index.html">specs</a> +for it. + + +<LI> +array formats dx, general, netcdf, CDF, hdf, cm +<LI> +CGM+ +<LI>Windows Meta File (.WMF). Libwmf converts from WMF to things like +Latex, PDF, PNG. Some of these can be input to Netpbm. + +<LI>Microsoft Word .doc format. Microsoft keeps a proprietary hold on +this format. Any software you see that can handle it is likely to +cost money. + +<li>RTF + +<LI> +DXF (AutoCAD) +<LI> +IOCA (Image Object Content Architecture) +The specification of this format is documented by IBM: +<a href="http://publibz.boulder.ibm.com/epubs/pdf/c3168055.pdf"> +Data Stream and Object Architectures: Image Object Content Architecture +Reference</a>. See above for software that processes this format. + +<LI>OpenEXR is an HDR format (like <a href="pamtopfm.html">PFM</a>). +See <a href="http://www.openexr.com"> +http://www.openexr.com</a>. + +<li>Xv Visual Schnauzer thumbnail image. This is a rather antiquated +format used by the Xv program. In Netpbm circles, it is best known +for the fact that it is very similar to Netpbm formats and uses the +same signature ("P7") as PAM because it was developed as +sort of a fork of the Netpbm format specifications. + +<li>YUV 4:2:0, aka YUV 420, and the simlar YUV 4:4:4, YUV 4:2:2, +YUV 4:1:1, YUV 4:1:1s, and YUV 4:1:0. Video systems often use this. + +</UL> + +<H2 id="history">History</H2> + +<P>Netpbm has a long history, starting with Jef Poskanzer's +Pbmplus package in 1988. The file <I>HISTORY</I> +in the Netpbm source code contains a historical overview as well as a +detailed history release by release. + +<H2 id="author">Author</H2> + +<P>Netpbm is based on the Pbmplus package by Jef Poskanzer, first +distributed in 1988 and maintained by him until 1991. But the package +contains work by countless other authors, added since Jef's original +work. In fact, the name is derived from the fact that the work was +contributed by people all over the world via the Internet, when such +collaboration was still novel enough to merit naming the package after +it. + +<P>Bryan Henderson has been maintaining Netpbm since 1999. In +addition to packaging work by others, Bryan has also written a +significant amount of new material for the package. + +</BODY> +</HTML> diff --git a/infotopam.html b/infotopam.html new file mode 100644 index 00000000..aeab5395 --- /dev/null +++ b/infotopam.html @@ -0,0 +1,227 @@ +<?xml version="1.1" encoding="iso-8859-1" ?> + +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> + +<head> +<title>Infotopam User Manual</title> +</head> + +<body> + +<h1>infotopam</h1> + +<p>Updated: 07 April 2004</p> + +<p><a href="#index">Table Of Contents</a></p> + +<h2 id="name">NAME</h2> + +<p>infotopam - convert Amiga .info icons to PAM</p> + +<h2 id="synopsis">SYNOPSIS</h2> + +<p> +<b>infotopam</b> +[<b>-forcecolor</b>] +[<b>-numcolors</b> <i>numcolors</i>] +[<b>-selected</b>] +[<i>index color</i> ...] +[<i>filename</i>] +</p> + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white space in +place of the equals sign to separate an option name from its value.</p> + +<h2 id="examples">EXAMPLES</h2> + +<p>By default, <b>infotopam</b> converts the first icon in a .info file:</p> + + <pre> + infotopam amiga.info > amiga.first.pam + </pre> + +<p>Use the <i>-selected</i> option to convert the second icon in a .info +file. Here <b>infotopam</b> reads from Standard Input:</p> + + <pre> + infotopam -selected < amiga.info > amiga.second.pam + </pre> + +<p>Use the <i>-forcecolor</i> option to force color conversion for a 1 +bit-plane .info file:</p> + + <pre> + infotopam -forcecolor bw.info > bw.pam + </pre> + +<p>Use <i>-numcolors</i> to override colors for indexes 0 and 3. Notice the +two ways to specify the color:</p> + + <pre> + infotopam -numcolors 2 0 green 3 #FF0000 icon.info > icon.pam + </pre> + +<p>Since Amiga monitors do not use square pixels, some icons may appear +squished. Filtering the output through <b>pamscale</b> can fix this:</p> + + <pre> + infotopam squish.info | pamtopnm | pamscale -yscale 1.7 > normal.pnm + </pre> + +<h2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>infotopam</b> converts an Amiga .info (icon) file to a PAM image. +<b>infotopam</b> reads a .info file from <i>filename</i>, or from Standard +Input if you do not specify a file name, and writes the converted PAM image to +Standard Output.</p> + +<p><b>infotopam</b> currently handles 1 and 2 bit-plane icons. If the .info +icon only has 1 bit-plane, <b>infotopam</b> generates a bitmap +(black&white) PAM image; otherwise it generates a color PAM image. You +can force <b>infotopam</b> to convert 1 bit-plane images to color PAM images by +using the <i>-forcecolor</i> option.</p> + +<h2 id="options">OPTIONS</h2> + +<dl> + <dt><b>-forcecolor</b></dt> + + <dd><p>Forces <b>infotopam</b> to convert 1 bit-plane icons to color PAM + images instead of bitmap PAM images. <b>infotopam</b> uses the index 2 + color for black and the index 1 color for white (more on this + below).</p></dd> + + <dt><b>-numcolors</b> <i>numcolors</i></dt> + + <dd><p>Tells <b>infotopam</b> how many colors to override. Pixels in the + Amiga .info files are assigned an index value rather than a specific color. + The standard colors for a 2 bit-plane icon are:</p> + + <pre> + Index 0: Blue (00, 55, AA) + Index 1: White (FF, FF, FF) + Index 2: Black (00, 00, 20) + Index 3: Orange (FF, 8A, 00) + </pre> + + <p>To override the colors, first specify how many colors to override using + <i>-numcolors</i>, then specify an (<i>index color</i>) pair for each color + you want to override, where <i>index</i> is a value from 0 to 3 and + <i>color</i> the the new color for that index. Specify <i>color</i> as + described for the <a href= "libppm.html#colorname"><b>ppm_parsecolor()</b> + argument</a>.</p></dd> + + <dt><b>-selected</b></dt> + + <dd>Tells <b>infotopam</b> to convert the selected (second) icon instead of + the normal (first) icon. Each Amiga .info icon file contains two icon + images. The first image is the normal, unselected icon, and the second + image is the selected icon. By default <b>infotopam</b> converts the first + icon. You can tell <b>infotopam</b> to convert the second icon by using the + <i>-selected</i> option.</dd> + +</dl> + +<p>All options can be abbreviated to their shortest unique prefix.</p> + +<h2 id="seealso">SEE ALSO</h2> + +<p> + <a href="pam.html">pam</a> + <a href="pamtopnm.html">pamtopnm</a> + <a href="pamscale.html">pamscale</a> +</p> + +<h2 id="notes">NOTES</h2> + +<p>Thanks to the following people on comp.sys.amiga.programmer for tips +and pointers on decoding the info file format:</p> + +<ul> + <li>Ben Hutchings</li> + <li>Thomas Richter</li> + <li>Kjetil Svalastog Matheussen</li> + <li>Anders Melchiorsen</li> + <li>Dirk Stoecker</li> + <li>Ronald V.D.</li> +</ul> + +<p>The format of the Amiga .info file is as follows:</p> + + <pre> + DiskObject header 78 bytes + Optional DrawerData header 56 bytes + First icon header 20 bytes + First icon data Varies + Second icon header 20 bytes + Second icon data Varies + </pre> + +<p>The DiskObject header contains, among other things, the magic number +(0xE310), the object width and height (inside the embedded Gadget header), +and the version.</p> + +<p>Each icon header contains the icon width and height, which can be smaller +than the object width and height, and the number of bit-planes.</p> + +<p>The icon data has the following format:</p> + + <blockquote> + <p><i>BIT-PLANE</i> planes, each with <i>HEIGHT</i> rows of (<i>WIDTH</i> + +15) / 16 * 2 bytes length.</p> + </blockquote> + +<p>So if you have a 9x3x2 icon, the icon data will look like this:</p> + + <pre> + aaaa aaaa a000 0000 + aaaa aaaa a000 0000 + aaaa aaaa a000 0000 + bbbb bbbb b000 0000 + bbbb bbbb b000 0000 + bbbb bbbb b000 0000 + </pre> + +<p>where <i>a</i> is a bit for the first bit-plane, <i>b</i> is a bit for the +second bit-plane, and <i>0</i> is padding. Thanks again to Ben Hutchings for +his very helpful post!</p> + +<h2 id="history">HISTORY</h2> + +<p><b>infotopam</b> was new in Netpbm 10.22 (April 2004). + +<h2 id="limitations">LIMITATIONS</h2> + + +<p><b>infotopam</b> currently only handles 1 and 2 bit-plane icons.</p> + +<p>There is no <b>pamtoinfo</b> command, since the .info files contain a lot +more than just icon data, and mapping the colors would be difficult.</p> + +<h2 id="author">AUTHOR</h2> + +<p>Copyright (C) 2000, 2004 by Richard Griswold.</p> + +<hr /> + +<a id="index"> </a> +<h2>Table Of Contents</h2> + +<ul> + <li><a href="#name">NAME</a></li> + <li><a href="#synopsis">SYNOPSIS</a></li> + <li><a href="#examples">EXAMPLES</a></li> + <li><a href="#description">DESCRIPTION</a></li> + <li><a href="#options">OPTIONS</a></li> + <li><a href="#seealso">SEE ALSO</a></li> + <li><a href="#notes">NOTES</a></li> + <li><a href="#history">HISTORY</a></li> + <li><a href="#limitations">LIMITATIONS</a></li> + <li><a href="#author">AUTHOR</a></li> +</ul> + +</body> +</html> diff --git a/jbigtopnm.html b/jbigtopnm.html new file mode 100644 index 00000000..4d92d1a0 --- /dev/null +++ b/jbigtopnm.html @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Jbigtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>Jbigtopnm</H1> +Updated: 19 November 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +jbigtopnm - JBIG to PNM image file converter + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>jbigtopnm</B> +[<I>options</I>] +[<I>input-file</I> [<I>output-file</I>]] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>jbigtopnm</b> reads a JBIG bi-level image entity (BIE) from a +file or standard input, decompresses it, and outputs a PBM or PGM +file. If the input has one plane, or you choose just one plane of it, +the output is PBM. Otherwise, the output is PGM. + +<P>JBIG is a highly effective lossless compression algorithm for +bi-level images (one bit per pixel), which is particularly suitable +for scanned document pages. + +<P>A JBIG encoded image can be stored in several resolutions in one or +several BIEs. All resolution layers except the lowest one are stored +efficiently as differences to the next lower resolution layer. You +can use options <B>-x</B> and <B>-y</B> to stop the decompression at a +specified maximal output image size. The input file can consist of +several concatenated BIEs which contain different increasing +resolution layers of the same image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-x</B> <I>number</I> + +<DD>Decode only up to the largest resolution layer which is still not +more than <I>number</I> pixels wide. If no such resolution layer +exists, then use the smallest one available. + +<DT><B>-y</B><I> number</I> + +<DD>Decode only up to the largest resolution layer which is still not +more than <I>number</I> pixels high. If no such resolution layer +exists, then use the smallest one available. You can also use options +<B>-x</B> and <B>-y</B> together which selects the largest layer that +satisfies both limits. + +<DT><B>-b</B> + +<DD>Use binary values instead of Gray code words in order to decode +pixel values from multiple bitplanes. This option has effect only if +the input has more than one bitplane and you don't select just one of +those bitplanes. Note that the decoder has to be used in the same +mode as the encoder and cannot determine from the BIE, whether Gray or +binary code words were used by the encoder. + +<DT><B>-d</B> + +<DD>Diagnose a BIE. With this option, <B>jbigtopnm</B> only prints a +summary of the header information found in the input file and then +exits. + +<DT><B>-p</B><I> number</I> + +<DD>If the input contains multiple bitplanes, then extract only the +specified single plane as a PBM file. The first plane has number 0. + +</DL> + +<A NAME="lbAF"> </A> +<H2>STANDARDS</H2> + +<p>This program implements the JBIG image coding algorithm as +specified in ISO/IEC 11544:1993 and ITU-T T.82(1993). + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<!-- jbgtopnm below is not a typo. It is not meant to be jbigtopnm --> +<p><B>jbigtopnm</B> is based on the JBIG library by Markus Kuhn, part +of his <a +href="http://www.cl.cam.ac.uk/~mgk25/jbigkit/"><B>JBIG-KIT</B> +package</a>. The <B>jbgtopbm</B> program is part of the +<B>JBIG-KIT</B> package. + +<P><B>jbigtopnm</B> is part of the Netpbm package of graphics tools. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pnmtojbig.html">pnmtojbig</A></B> + +<A NAME="lbAI"> </A> +<H2>LICENSE</H2> + +If you use <B>jbigtopnm</B>, you are using various patents, +particularly on its arithmetic encoding method, and in all probability +you do not have a license from the patent owners to do so. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">STANDARDS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">LICENSE</A> +</UL> +</BODY> +</HTML> + + diff --git a/jpeg2ktopam.html b/jpeg2ktopam.html new file mode 100644 index 00000000..1c3104da --- /dev/null +++ b/jpeg2ktopam.html @@ -0,0 +1,149 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Jpeg2ktopam User Manual</TITLE></HEAD> +<BODY> +<H1>Jpeg2ktopam</H1> +Updated: 27 October 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +jpeg2ktopam - convert JPEG-2000 code stream to PAM/PNM + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>jpeg2ktopam</B> +[<B>-verbose</B>] +[<B>-debuglevel=</B><I>number</I>] +<I>filename</I> + +<?makeman .SH OPTION USAGE ?> + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>jpeg2ktopam</b> converts the named JPEG-2000 code stream file, +or Standard Input if no file is named, to a PBM, PGM, PPM, or PAM +file on Standard Output. + +<P>The JPEG-2000 specification specifies two different formats: JP2 +and JPEG-2000 code stream (JPC). JP2 represents a visual image quite +specifically, whereas JPC is a more or less arbitrary array of +codes. JP2 images are a subset of JPC images. <b>jpeg2ktopam</b> +converts any JPC image. If the color space identified in the image is +grayscale (JAS_IMAGE_CS_GRAY), <B>jpeg2ktopam</b> generates a PGM +image, unless the image contains only one bit per pixel, in which case +<b>jpeg2ktopam</b> generates PBM. If the color space is RGB +(JAS_IMAGE_CS_RGB), <b>jpeg2ktopam</b> generates a PPM image. If the +input image is anything else, <b>jpeg2ktopam</b> generates a PAM image +with no tuple type identified. + +<P>In the PGM and PPM cases, <b>jpeg2ktopam</b> assumes the intensity +values in the input image have the same meaning as for PGM and PPM. +One thing that implies is the ITU-R Recommendation BT.709 color space, +which means the assumption is false for JP2 input. JP2 input uses +SRGB color encoding. So if you use <b>jpeg2ktopam</b> to convert a +JP2 image to PPM, it changes the visual image (slightly) -- the colors +in the output are not the same as in the input. + +<p>In the PAM image, the output samples are numerically identical to +the input samples. If the input samples are signed, they are +represented in two's complement form in the output (because PAM +samples are always unsigned). The PAM plane numbers are identical to +the JPC component numbers. + +<p>A JPC image has a "precision," which is the number of bits used for +each code (in Netpbm lingo, "sample"). Actually, each component has a +separate precision. The maxval of a PGM, PPM, or PAM output is the +largest number you can represent in the JPC precision of the JPC +component with the greatest precision. The samples in all components are +scaled to that maxval. So if the red component has a precision of 4 bits +and the green component has a precision of 6 bits, the maxval is 63 and +the red component codes from the JPC image are multiplied by 63/15 to +generate the output samples. + +<P><b>jpeg2ktopam</b> interprets the JPC input with the <a +href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper JPEG-2000 +library</a>. See documentation of the library for details on what +<b>jpeg2ktopam</b> handles. Note that the Jasper library contains +facilities for writing PNM images, but <b>jpeg2ktopam</b> does not use +those. It uses the Netpbm library instead. Note that the makers of +the Jasper library write it "JasPer," but Netpbm documentation follows +standard American English typography rules, which don't allow that +kind of capitalization. + +<P>Use <b>pamtojpeg2k</b> to convert in the other direction. + +<p>The program <b>jasper</b>, which is packaged with the Jasper +JPEG-2000 library, also converts between JPEG-2000 and PNM formats. +Because it's packaged with the library, it may exploit it better, +especially recently added features. However, since it does not use the +Netpbm library to read and write the Netpbm formats, it doesn't do as +good a job on that side. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-verbose</b> + +<DD>This option causes <b>jpeg2ktopam</b> to issue informational +messages about the conversion process. + +<DT><B>-debuglevel</b>=<i>number</i> + +<DD>This option controls debug messages from the Jasper library. +<b>jpeg2ktopam</b> passes <i>number</i> as the debug level to the Jasper +JPC decoder. + +</DL> + +<A NAME="examples"> </A> +<H2>EXAMPLES</H2> + +<pre> + jpeg2ktopam myimg.jpc >myimg.ppm +</pre> + + +<A NAME="jpeg2000"> </A> +<H2>ABOUT JPEG-2000</H2> + +<p>See <a href="pamtojpeg2k.html">the <b>pamtojpeg2k</b> manual</a> +for general information on JPEG-2000 compression and the +JPEG-2000 formats. + + + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamtojpeg2k.html">jpctopam</A></B>, +<B><A HREF="jpegtopnm.html">pnmtopeg</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<H2>History</H2> + +<p><b>jpeg2ktopam</b> was added to Netpbm in Release 10.12 (November 2002). + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/jpegtopnm.html b/jpegtopnm.html new file mode 100644 index 00000000..86a44d50 --- /dev/null +++ b/jpegtopnm.html @@ -0,0 +1,339 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Jpegtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>JPEGTOPNM</H1> +Updated: 13 October 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +jpegtopnm - convert JPEG/JFIF file to PPM or PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>jpegtopnm</B> +[<B>-dct</B> {<B>int</B>|<B>fast</B>|<B>float</B>}] +[<B>-nosmooth</B>] +[<B>-maxmemory</B> <I>N</I>] +[{<B>-adobe</B>|<B>-notadobe</B>}] +[<B>-comments</B>] +[<B>-dumpexif</B>] +[<B>-exif=</B><I>filespec</I>] +[<B>-multiple</B>] +[<B>-verbose</B>] +[<B>-tracelevel</B> <I>N</I>] +[<I>filename</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>jpegtopnm</B> converts JFIF images to PPM or PGM images. + +<p>By default, <b>jpegtopnm</b> expects the input stream to contain one +JFIF image and produces one PGM or PPM image as output. It fails if the +input stream is empty. + +<p>But with the <b>-multiple</b> option, <b>jpegtopnm</b> reads JFIF +images sequentially from the input stream and writes one PPM or PGM image +to the output stream for each JFIF input. If the input stream is empty, +so is the output. + +<p>The input stream is the <i>filename</i> you specify or, if you +don't specify <i>filename</i>, Standard Input. The output stream is +Standard Output. + +<p>If a JFIF input image is of the grayscale variety, <B>jpegtopnm</B> +generates a PGM image. Otherwise, it generates a PPM image. + +<p>Before Netpbm 10.11 (October 2002), <b>jpegtopnm</b> did not have +the multiple image stream capability. From 10.11 through 10.22, +Netpbm always behaved as if you specified <b>-multiple</b>. Starting +with Netpbm 10.23 (July 2004), Netpbm's default behavior went back to +the pre-10.11 behavior and the new <b>-multiple</b> option selected +the 10.12 behavior. The reason for the reversion was that there were +discovered in the world files that contain JFIF images followed by +something other than another JFIF image. The producers of these files +expect them to work with any JFIF interpreter because most JFIF +interpreters just stop reading the file after the first JFIF image. + +<p><B>jpegtopnm</B> uses the Independent JPEG Group's JPEG library to +interpret the input file. See <B><A +HREF="http://www.ijg.org">http://www.ijg.org</A> </B> +for information on the library. + +<P>"JFIF" is the correct name for the image format commonly +known as "JPEG." Strictly speaking, JPEG is a method of +compression. The image format using JPEG compression that is by far +the most common is JFIF. There is also a subformat of TIFF that uses +JPEG compression. + +<P>EXIF is an image format that is a subformat of JFIF (to wit, a JFIF +file that contains an EXIF header as an APP1 marker). +<B>jpegtopnm</B> handles EXIF. + +<P>JFIF files can have either 8 bits per sample or 12 bits per sample. +The 8 bit variety is by far the most common. There are two versions +of the IJG JPEG library. One reads only 8 bit files and the other +reads only 12 bit files. You must link the appropriate one of these +libraries with <B>jpegtopnm</B>. Ordinarily, this means the library +is in your shared library search path when you run <B>jpegtopnm</B>. + +<P><B>jpegtopnm</B> generates output with either one byte or two bytes +per sample depending on whether the JFIF input has either 8 bits or 12 +bits per sample. You can use <B>pamdepth</B> to reduce a +two-byte-per-sample file to a one-byte-per-sample file if you need to. + +<P>If the JFIF file uses the CMYK or YCCK color space, the input does +not actually contain enough information to know what color each pixel +is. To know what color a pixel is, one would have to know the +properties of the inks to which the color space refers. +<B>jpegtopnm</B> interprets the colors using the common transformation +which assumes all the inks are simply subtractive and linear. + +<p>See the <a href="jpegtopnm.html"><B>jpegtopnm</B> manual</a> +for information on how images lose quality when you convert to and +from JFIF. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +The options are only for advanced users: +<DL COMPACT> +<DT><B>-dct int</B> + +<DD> +Use integer DCT method (default). + +<DT><B>-dct fast</B> + +<DD> +Use fast integer DCT (less accurate). + +<DT><B>-dct float</B> + +<DD> +Use floating-point DCT method. +The float method is very slightly more accurate than the int method, but is +much slower unless your machine has very fast floating-point hardware. Also +note that results of the floating-point method may vary slightly across +machines, while the integer methods should give the same results everywhere. +The fast integer method is much less accurate than the other two. + +<DT><B>-nosmooth</B> + +<DD> +Use a faster, lower-quality upsampling routine. +<DT><B>-maxmemory</B><I> N</I> + +<DD>Set limit on the amount of memory <B>jpegtopnm</B> uses in +processing large images. Value is in thousands of bytes, or millions +of bytes if "M" is suffixed to the number. For example, +<B>-maxmemory 4m</B> selects 4000000 bytes. If <B>jpegtopnm</B> needs +more space, it uses temporary files. + +<DT><B>-adobe</B> +<DT><B>-notadobe</B> + +<DD> +There are two variations on the CMYK (and likewise YCCK) color space that +may be used in the JFIF input. In the normal one, a zero value for a color +components indicates absence of ink. In the other, a zero value means the +maximum ink coverage. The latter is used by Adobe Photoshop when it creates +a bare JFIF output file (but not when it creates JFIF output as part of +Encapsulated Postscript output). + +<P>These options tell <B>jpegtopnm</B> which version of the CMYK or +YCCK color space the image uses. If you specify neither, +<B>jpegtopnm</B> tries to figure it out on its own. In the present +version, it doesn't try very hard at all: It just assumes the +Photoshop version, since Photoshop and its emulators seem to be the +main source of CMYK and YCCK images. But with experience of use, +future versions might be more sophisticated. + +<P>If the JFIF image does not indicate that it is CMYK or YCCK, these +options have no effect. + +<P>If you don't use the right one of these options, the symptom is +output that looks like a negative. + +<DT><B>-dumpexif</B> + +<DD>Print the interpreted contents of any Exif header in the input +file to the Standard Error file. Similar to the program <B>jhead</B> +(not part of the Netpbm package). + +<p>This option was added in Netpbm 9.19 (September 2001). + +<DT><B>-exif=</B><I>filespec</I> + +<DD>Extract the contents of the EXIF header from the input image and +write it to the file <I>filespec</I>. <I>filespec</I>=<B>-</B> means +write it to Standard Output. When you write the EXIF header to +Standard Output, <B>jpegtopnm</B> does not output the converted image +(which is what normally would go to Standard Output) at all. + +<p><B>jpegtopnm</B> writes the contents of the EXIF header +byte-for-byte, starting with the two byte length field (which length +includes those two bytes). + +<P>You can use this file as input to <B>pnmtojpeg</B> to insert an +identical EXIF header into a new JFIF image. + +<P>If there is no EXIF header, <B>jpegtopnm</B> writes two bytes of +binary zero and nothing else. + +<P>An EXIF header takes the form of a JFIF APP1 marker. Only the +first such marker within the JFIF header counts. + +<p>This option was added in Netpbm 9.19 (September 2001). + +<DT><B>-multiple</B> + +<dd>Read multiple JFIF images sequentially from the input stream. +See <a href="#description">Description section</a> for details. + +<p>This option was new in Netpbm 10.23 (July 2004). + +<DT><B>-comments</B> + +<DD> +Print any comments in the input file to the Standard Error file. +<DT><B>-verbose</B> + +<DD> +Print details about the conversion to the Standard Error file. +<DT><B>-tracelevel</B><I> n</I> + +<DD>Turn on the JPEG library's trace messages to the Standard Error +file. A higher value of <I>n</I> gets more trace information. +<B>-verbose</B> implies a trace level of at least 1. + +</DL> +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<P>This example converts the color JFIF file foo.jpg to a PPM file +named foo.ppm: + +<PRE> + jpegtopnm foo.jpg >foo.ppm +</PRE> + +<A NAME="lbAG"> </A> +<H2>HINTS</H2> + +You can use <B>pnmquant</B> to color quantize the result, i.e. to +reduce the number of distinct colors in the image. In fact, you may +have to if you want to convert the PPM file to certain other formats. +<B>ppmdither</B> Does a more sophisticated quantization. + +<p>Use <B>pamscale</B> to change the dimensions of the resulting +image. + +<P>Use <B>ppmtopgm </B> to convert a color JFIF file to a grayscale +PGM file. + +<P>You can easily use these converters together. E.g.: + +<PRE> + jpegtopnm foo.jpg | ppmtopgm | pamscale .25 >foo.pgm +</PRE> + +<P><B>-dct fast</B> and/or <B>-nosmooth</B> gain speed at a small +sacrifice in quality. + +<P>If you are fortunate enough to have very fast floating point +hardware, <B>-dct float</B> may be even faster than <B>-dct fast</B>. +But on most machines <B>-dct float</B> is slower than <B>-dct int</B>; +in this case it is not worth using, because its theoretical accuracy +advantage is too small to be significant in practice. + +<P>Another program, <B>djpeg</B>, is similar. <B>djpeg</B> is +maintained by the Independent JPEG Group and packaged with the JPEG +library which <B>jpegtopnm</B> uses for all its JPEG work. Because of +that, you may expect it to exploit more current JPEG features. Also, +since you have to have the library to run <B>jpegtopnm</B>, but not +vice versa, <B>cjpeg</B> may be more commonly available. + +<P>On the other hand, <B>djpeg</B> does not use the NetPBM libraries +to generate its output, as all the NetPBM tools such as +<B>jpegtopnm</B> do. This means it is less likely to be consistent +with all the other programs that deal with the NetPBM formats. Also, +the command syntax of <B>jpegtopnm</B> is consistent with that of the +other Netpbm tools, unlike <B>djpeg</B>. + +<A NAME="lbAH"> </A> +<H2>ENVIRONMENT</H2> + +<DL COMPACT> +<DT><B>JPEGMEM</B> + +<DD>If this environment variable is set, its value is the default +memory limit. The value is specified as described for the +<B>-maxmemory</B> option. An explicit <B>-maxmemory </B> option +overrides any <B>JPEGMEM</B>. + +</DL> + +<A NAME="lbAI"> </A> +<H2>SEE ALSO</H2> + +<p> +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="pnmtojpeg.html">pnmtojpeg</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, + +<p> +<B>djpeg</B> man page, +<B>cjpeg</B> man page, +<B>jpegtran</B> man page, +<B>rdjpgcom</B> man page, +<B>wrjpgcom</B> man page, +<B>jhead</B> man page + +<p>Wallace, Gregory K. "The JPEG Still Picture Compression +Standard", Communications of the ACM, April 1991 (vol. 34, +no. 4), pp. 30-44. + +<A NAME="lbAJ"> </A> +<H2>LIMITATIONS</H2> + +<p>Arithmetic coding is not offered for legal reasons. The program +could be much faster. + +<A NAME="lbAK"> </A> +<H2>AUTHOR</H2> + +<p><B>jpegtopnm</B> and this manual were derived in large part from +<B>djpeg</B>, by the Independent JPEG Group. The program is otherwise +by Bryan Henderson on March 19, 2000. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">HINTS</A> +<LI><A HREF="#lbAH">ENVIRONMENT</A> +<LI><A HREF="#lbAI">SEE ALSO</A> +<LI><A HREF="#lbAJ">LIMITATIONS</A> +<LI><A HREF="#lbAK">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/leaftoppm.html b/leaftoppm.html new file mode 100644 index 00000000..f7bfb73e --- /dev/null +++ b/leaftoppm.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Leaftoppm User Manual</TITLE></HEAD> +<BODY> +<H1>leaftoppm</H1> +Updated: 01 June 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +leaftoppm - convert Interleaf image format to PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>leaftoppm</B> +[<I>leaffile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>leaftoppm</b> reads a PPM image as input and generates an +Interleaf image file as output. + +<P>Interleaf is a now-defunct (actually purchased ca. 2000 by +BroadVision) technical publishing software company. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>The program is copyright (C) 1994 by Bill O'Donnell. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/libnetpbm.html b/libnetpbm.html new file mode 100644 index 00000000..f835376d --- /dev/null +++ b/libnetpbm.html @@ -0,0 +1,83 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Libnetpbm manual</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>libnetpbm</H1> +Updated: December 2003 +<BR> +<?makeman .SH NAME ?> +<?makeman libnetpbm \- general introduction to the netpbm library ?> +<?makeman .SH DESCRIPTION ?> + +<p><b>libnetpbm</b> is a C programming library for reading, writing, and +manipulating Netpbm images. It also contains a few general graphics +manipulation tools, but it is not intended to be a graphics tools +library. For graphics tools, Netpbm expects you to run the Netpbm +programs. From a C program, the <b>libnetpbm</b> function +<b>pm_system()</b> makes this easy. However, since it creates a +process and execs a program, this may be too heavyweight for some +applications. + +<p>To use <b>libnetpbm</b> services in your C program, #include the +<b>pam.h</b> interface header file. For historical reasons, you can +also get by in some cases with <b>pbm.h</b>, <b>pgm.h</b>, +<b>ppm.h</b>, or <b>pnm.h</b>, but there's really no point to that +anymore. + +<p>The <b>libnetpbm</b> functions are divided into these categories: +<ul> +<li>PBM functions. These have names that start with <b>pbm</b> and work +only on PBM images. +<li>PGM functions. These have names that start with <b>pgm</b> and work +only on PGM images. +<li>PPM functions. These have names that start with <b>ppm</b> and work +only on PPM images. +<li>PNM functions. These have names that start with <b>pnm</b> and work on +PBM, PGM, and PPM images. +<li>PAM functions. These also have names that start with <b>pnm</b> and +work on all the Netpbm image types. +<li>PM functions. These are utility functions that aren't specific to any +particular image format. +</ul> + +<p>For new programming, you rarely need to concern yourself with the +PBM, PGM, PPM, and PNM functions, because the newer PAM functions do +the same thing and are easier to use. For certain processing of +bi-level images, the PBM functions are significantly more efficient, +though. + +<p><b>libnetpbm</b> has a backward compatibility feature that means a +function designed to read one format can read some others too, +converting on the fly. In particular, a function that reads a PGM +image will also read a PBM image, but converts it as it reads it so +that for programming purposes, it is a PGM image. Similarly, a +function that reads PPM can read PBM and PGM as well. And a function +that reads PBM, PGM, or PPM can read a PAM that has an equivalent +tuple type. + +<p>For each of the five classes of <b>libnetpbm</b> image processing +functions, <b>libnetpbm</b> has in in-memory representation for a +pixel, a row, and a whole image. Do not confuse this format with the +actual image format, as you would see in a file. The <b>libnetpbm</b> +in-memory format is designed to make programming very easy. It is +sometimes extremely inefficient, even more than the actual image +format. For example, a pixel that a PPM image represents with 3 +bytes, <b>libnetpbm</b>'s PAM functions represent with 16 bytes. A +pixel in a PBM image is represented by a single bit, but the PNM +functions represent that pixel in memory with 96 bits. + +<p>See <a href="libnetpbm_ug.html">Libnetpbm User's Manual</a> for the +basics on using <b>libnetpbm</b> in a program. + +<p>You can look up the reference information for a particular function +in <a href="libnetpbm_dir.html">The libnetpbm Directory</a>. + +<P>Before Netpbm release 10 (June 2002), this library was split into +four: libpbm, libpgm, libppm, and libpnm. That's largely the reason +for the multiple sets of functions and scattered documentation. + +</BODY> +</HTML> diff --git a/libnetpbm_dir.html b/libnetpbm_dir.html new file mode 100644 index 00000000..bc37070a --- /dev/null +++ b/libnetpbm_dir.html @@ -0,0 +1,183 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Libnetpbm Directory</TITLE></HEAD> +<BODY> +<p>This is a directory of all the Netpbm programming library (<b>libnetpbm</b>) +services. + +<p>For general information about <b>libnetpbm</b>, see +<a href="libnetpbm.html">The Libnetpbm Manual</a>. + +<h1>PM functions</h1> +<ul> + <li><a href="libpm.html#initialization">pm_init()</a> + <li><a href="libpm.html#file">pm_openr()</a> + <li><a href="libpm.html#file">pm_openw()</a> + <li><a href="libpm.html#file">pm_openr_seekable()</a> + <li><a href="libpm.html#file">pm_tell2()</a> + <li><a href="libpm.html#file">pm_tell()</a> + <li><a href="libpm.html#file">pm_seek2()</a> + <li><a href="libpm.html#file">pm_seek()</a> + <li><a href="libpm.html#file">pm_read_unknown_size()</a> + <li><a href="libpm.html#endian">pm_readchar()</a> + <li><a href="libpm.html#endian">pm_writechar()</a> + <li><a href="libpm.html#endian">pm_readbigshort()</a> + <li><a href="libpm.html#endian">pm_writebigshort()</a> + <li><a href="libpm.html#endian">pm_readbiglong()</a> + <li><a href="libpm.html#endian">pm_writebiglong()</a> + <li><a href="libpm.html#endian">pm_readlittleshort()</a> + <li><a href="libpm.html#endian">pm_writelittleshort()</a> + <li><a href="libpm.html#endian">pm_readlittelong()</a> + <li><a href="libpm.html#endian">pm_writelittelong()</a> + <li><a href="libpm.html#endian">pm_readcharu()</a> + <li><a href="libpm.html#endian">pm_writecharu()</a> + <li><a href="libpm.html#endian">pm_readbigshortu()</a> + <li><a href="libpm.html#endian">pm_writebigshortu()</a> + <li><a href="libpm.html#endian">pm_readbiglongu()</a> + <li><a href="libpm.html#endian">pm_writebiglongu()</a> + <li><a href="libpm.html#endian">pm_readlittleshortu()</a> + <li><a href="libpm.html#endian">pm_writelittleshortu()</a> + <li><a href="libpm.html#endian">pm_readlittelongu()</a> + <li><a href="libpm.html#endian">pm_writelittelongu()</a> + <li><a href="libsystem.html">pm_system()</a> + <li><a href="libtmpfile.html">pm_tmpfile()</a> + <li><a href="libpm.html#maxval">pm_maxvaltobits()</a> + <li><a href="libpm.html#maxval">pm_bitstomaxval()</a> + <li><a href="libpm.html#maxval">pm_lcm()</a> + <li><a href="libpm.html#gamma">pm_gamma709()</a> + <li><a href="libpm.html#gamma">pm_ungamma709()</a> + <li><a href="libpm.html#message">pm_message()</a> + <li><a href="libpm.html#message">pm_setusermessagefn()</a> + <li><a href="error.html#pm_error">pm_error()</a> + <li><a href="error.html#pm_errormsg">pm_errormsg()</a> + <li><a href="error.html#pm_setusererrormsgfn">pm_setusererrormsgfn()</a> + <li><a href="error.html#pm_setjmpbuf">pm_setjmpbuf()</a> + <li><a href="libpm.html#keyword">pm_keymatch()</a> + </ul> + +<h1>PAM Functions</h1> +<ul> + <li><a href="libnetpbm_image.html#memory">pnm_allocpamarray()</a> + <li><a href="libnetpbm_image.html#memory">pnm_allocpamrow()</a> + <li><a href="libnetpbm_image.html#memory">pnm_allocpamrown()</a> + <li><a href="libnetpbm_image.html#memory">pnm_freepamarray()</a> + <li><a href="libnetpbm_image.html#memory">pnm_freepamrow()</a> + <li><a href="libnetpbm_image.html#memory">pnm_freepamrown()</a> + <li><a href="libnetpbm_image.html#memory">pnm_allocpamtuple()</a> + <li><a href="libnetpbm_image.html#memory">pnm_freepamtuple()</a> + <li><a href="libnetpbm_image.html#reading">pnm_readpaminit()</a> + <li><a href="libnetpbm_image.html#reading">pnm_readpamrow()</a> + <li><a href="libnetpbm_image.html#reading">pnm_readpamrown()</a> + <li><a href="libnetpbm_image.html#reading">pnm_readpam()</a> + <li><a href="libnetpbm_image.html#writing">pnm_writepaminit()</a> + <li><a href="libnetpbm_image.html#writing">pnm_writepamrow()</a> + <li><a href="libnetpbm_image.html#writing">pnm_writepamrown()</a> + <li><a href="libnetpbm_image.html#writing">pnm_writepam()</a> + <li><a href="libnetpbm_image.html#misc">pnm_checkpam()</a> + <li><a href="libnetpbm_image.html#misc">pnm_nextimage()</a> + <li><a href="libnetpbm_image.html#transform">pnm_YCbCrtuple()</a> + <li><a href="libnetpbm_image.html#transform">pnm_YCbCr_to_rgbtuple()</a> + <li><a href="libnetpbm_image.html#transform">pnm_lumin_factor[]</a> + <li><a href="libnetpbm_image.html#transform">pnm_gammarown()</a> + <li><a href="libnetpbm_image.html#transform">pnm_ungammarown()</a> + <li><a href="libnetpbm_image.html#transform">pnm_applyopacityrown()</a> + <li><a href="libnetpbm_image.html#transform">pnm_unapplyopacityrown()</a> + <li><a href="libnetpbm_image.html#transform">pnm_creategammatransform()</a> + <li><a href="libnetpbm_image.html#transform">pnm_freegammatransform()</a> + <li><a href="libnetpbm_image.html#transform">pnm_createungammatransform()</a> + <li><a href="libnetpbm_image.html#transform">pnm_freeungammatransform()</a> +</ul> + +<h1>PBM Functions</h1> +<ul> + <li><a href="libpbm.html">pbm_init()</a> + <li><a href="libpbm.html">pbm_allocarray()</a> + <li><a href="libpbm.html">pbm_allocrow()</a> + <li><a href="libpbm.html">pbm_freearray()</a> + <li><a href="libpbm.html">pbm_freerow()</a> + <li><a href="libpbm.html">pbm_readpbminit()</a> + <li><a href="libpbm.html">pbm_readpbmrow()</a> + <li><a href="libpbm.html">pbm_readpbmrowpacked()</a> + <li><a href="libpbm.html">pbm_readpbm()</a> + <li><a href="libpbm.html">pbm_writepbminit()</a> + <li><a href="libpbm.html">pbm_writepbmrow()</a> + <li><a href="libpbm.html">pbm_writepbmrowpacked()</a> + <li><a href="libpbm.html">pbm_writepbm()</a> + <li><a href="libpbm.html">pbm_nextimage()</a> + <li><a href="libpbm.html">pbm_check()</a> +</ul> +<h1>PGM Functions</h1> +<ul> + <li><a href="libpgm.html">pgm_init()</a> + <li><a href="libpgm.html">pgm_allocarray()</a> + <li><a href="libpgm.html">pgm_allocrow()</a> + <li><a href="libpgm.html">pgm_freearray()</a> + <li><a href="libpgm.html">pgm_freerow()</a> + <li><a href="libpgm.html">pgm_readpgminit()</a> + <li><a href="libpgm.html">pgm_readpgmrow()</a> + <li><a href="libpgm.html">pgm_readpgm()</a> + <li><a href="libpgm.html">pgm_writepgminit()</a> + <li><a href="libpgm.html">pgm_writepgmrow()</a> + <li><a href="libpgm.html">pgm_writepgm()</a> + <li><a href="libpgm.html">pgm_nextimage()</a> + <li><a href="libpgm.html">pgm_check()</a> + </ul> +<h1>PPM Functions</h1> +<ul> + <li><a href="libppm.html">ppm_init()</a> + <li><a href="libppm.html">ppm_allocarray()</a> + <li><a href="libppm.html">ppm_allocrow()</a> + <li><a href="libppm.html">ppm_freearray()</a> + <li><a href="libppm.html">ppm_freerow()</a> + <li><a href="libppm.html">ppm_readppminit()</a> + <li><a href="libppm.html">ppm_readppmrow()</a> + <li><a href="libppm.html">ppm_readppm()</a> + <li><a href="libppm.html">ppm_writeppminit()</a> + <li><a href="libppm.html">ppm_writeppmrow()</a> + <li><a href="libppm.html">ppm_writeppm()</a> + <li><a href="libppm.html">ppm_nextimage()</a> + <li><a href="libppm.html">ppm_check()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_GETR()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_GETG()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_GETB()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_ASSIGN()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_EQUAL()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_ISGRAY()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_DEPTH()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_LUMIN()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_CHROM_R()</a> + <li><a href="libppm.html#manipulating_pixels">PPM_CHROM_B()</a> + <li><a href="libppm.html#ppm_parsecolor">ppm_parsecolor()</a> + <li><a href="libppm.html#ppm_colorname">ppm_colorname()</a> + <li><a href="libppm.html#ppm_readcolornamefile">ppm_readcolornamefile()</a> + <li><a href="libppm.html#berlinkay">ppm_name_from_bk_color()</a> + <li><a href="libppm.html#berlinkay">ppm_bk_color_from_name()</a> + <li><a href="libppm.html#berlinkay">ppm_color_from_bk_color()</a> + <li><a href="libppm.html#berlinkay">ppm_bk_color_from_color()</a> + + </ul> +<h1>PNM Functions</h1> +<ul> + <li><a href="libnetpbm_image.html">pnm_init()</a> + <li><a href="libpnm.html">pnm_allocarray()</a> + <li><a href="libpnm.html">pnm_allocrow()</a> + <li><a href="libpnm.html">pnm_freearray()</a> + <li><a href="libpnm.html">pnm_freerow()</a> + <li><a href="libpnm.html">pnm_readpnminit()</a> + <li><a href="libpnm.html">pnm_readpnmrow()</a> + <li><a href="libpnm.html">pnm_readpnm()</a> + <li><a href="libpnm.html">pnm_writepnminit()</a> + <li><a href="libpnm.html">pnm_writepnmrow()</a> + <li><a href="libpnm.html">pnm_writepnm()</a> + <li><a href="libpnm.html">pnm_nextimage()</a> + <li><a href="libpnm.html">pnm_check()</a> + <li><a href="libpnm.html">pnm_promoteformatrow()</a> + <li><a href="libpnm.html">pnm_promoteformat()</a> + <li><a href="libpnm.html">pnm_whitexel()</a> + <li><a href="libpnm.html">pnm_blackxel()</a> + <li><a href="libpnm.html">pnm_invertxel()</a> + <li><a href="libpnm.html">pnm_backgroundxelrow()</a> + <li><a href="libpnm.html">pnm_backgroundxel()</a> +</ul> + +</BODY> +</HTML> diff --git a/libnetpbm_draw.html b/libnetpbm_draw.html new file mode 100644 index 00000000..168ed0e0 --- /dev/null +++ b/libnetpbm_draw.html @@ -0,0 +1,142 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Libnetpbm PPM Drawing Function Manual</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>Libnetpbm PPM Drawing Function Manual</H1> +Updated: September 2005 +<br> +<p><A HREF="#toc">Table Of Contents</A> +<?makeman .SH NAME ?> +<?makeman libnetpbm_draw \- Libnetpbm PPM Drawing Function Manual ?> +<?makeman .SH DESCRIPTION ?> + +<p>This reference manual covers functions in the <b>libnetpbm</b> +library for drawing images, using the PPM image format and the +<b>libnetpbm</b> in-memory image formats. + +<p>We actually have very little information here; this is mainly a +framework for adding documentation later if someone becomes interested +in this facility. + + +<h2 id="functions">The Functions</h2> + +<p>The functions are all declared in the <b>ppmdraw.h</b> header file. + +<h3><b>ppmd_point_drawproc</b></h3> + +<h3><b>ppmd_setlinetype</b></h3> + +<h3><b>ppmd_setlineclip</b></h3> + +<h3><b>ppmd_line</b></h3> + +<h3><b>ppmd_spline3</b></h3> + +<h3><b>ppmd_polyspline</b></h3> + +<h3><b>ppmd_circle</b></h3> + +<h3><b>ppmd_filledrectangle</b></h3> + +<h3><b>ppmd_fill_init</b></h3> + +<h3><b>ppmd_fill_drawproc</b></h3> + +<h3><b>ppmd_fill</b></h3> + +<h3><b>ppmd_text</b></h3> + +<h3><b>ppmd_text_box</b></h3> + + +<h2 id="fonts">Fonts</h2> + +<p> +The <b>ppmd_text</b> and <b>ppmd_text_box</b> functions use fonts. +You control the fonts using functions described in this section. +There is one font that comes with Netpbm, called "standard". +It is built into the function library and is the default font. You +can create additional fonts and use them instead. + +<p>In a program that uses Netpbm drawing facilities, there is a +"current font." all drawing of text uses the current font. +When the program starts, the current font is "standard"; you +can change it after that by calling the <b>ppmd_setfont</b> function. + +<p>Other than a built-in font, a font lives in file in a format +special to Netpbm called Ppmdfont. The file typically has a name that +ends in ".ppmdfont". + +<p>Use the <b>ppmddumpfont</b> program to dump the contents of a +Ppmdfont file in human readable format. + +<p>Use the <b>ppmdmkfont</b> program to generate the "standard" +font as a Ppmdfont file. You don't normally need to do this, becuase +"standard" is built into <b>libnetpbm</b>. + +<p>Use the <b>ppmdcfont</b> program to turn a Ppmdfont file into a C +source file that you can compile into a program as a built-in font. +Though we don't give full instructions here on how to do that, +<b>libnetpbm</b>'s built-in "standard" font is a good +example. In Netpbm source code, you will find the C source file +<b>standardppmdfont.c</b>, which was generated from the file +<b>standard.ppmdfont</b> by <b>ppmdcfont</b>. You simply use a +pointer to the structure that the C file defines as a font handle, +just like one you would get from <b>ppmd_readfont</b>. + + +<h2>Font File Format</h2> + +<p>The font file starts with the characters "ppmdfont" (without +the quotation marks) in ASCII. + +<p>The rest of the format is not yet documented, but it generally +describes, for each code point, a sequence of straight line plotting +commands to form the glyph for the indicated character. I.e. it is a +vector, not raster, font. + + +<h2 id="fontcontrol">Font Control Functions</h2> + +<p>These functions are declared in the header file <b>ppmdfont.h</b>. + +<h3><b>ppmd_readfont</b></h3> + +<p>This function associates a Ppmdfont file, which you identify by +naming the Ppmdfont file, with a handle that you can use to identify +the font to other functions. Technically, this function reads the +font into memory. + +<h3><b>ppmd_freefont</b></h3> + +<p>This function releases the handle that you get from +<b>ppmd_readfont</b>. It frees resources associated with it; you +can't use the handle after this. + +<h3><b>ppmd_getfont</b></h3> + +<p>This function returns the handle of the currently selected font. + +<h3><b>ppmd_setfont</b></h3> + +<p>This function sets the currently selected font. You identify the +font to which to set it with a handle such as you get from +<b>ppmd_readfont</b> or <b>ppmd_getfont</b>. + +<HR> +<A NAME="toc"> </A> +<H2>Table Of Contents</H2> + +<ul> + <li><a href="#functions">The Functions</a> + <li><a href="#fonts">Fonts</a> + </ul> + + + +</BODY> +</HTML> diff --git a/libnetpbm_image.html b/libnetpbm_image.html new file mode 100644 index 00000000..af87c3d6 --- /dev/null +++ b/libnetpbm_image.html @@ -0,0 +1,712 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Libnetpbm Image Processing Manual</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>Libnetpbm Image Processing Manual</H1> +Updated: December 2003 +<br> +<p><A HREF="#toc">Table Of Contents</A> +<?makeman .SH NAME ?> +<?makeman libnetpbm_image \- overview of netpbm image-processing functions ?> +<?makeman .SH DESCRIPTION ?> + +<p>This reference manual covers functions in the <b>libnetpbm</b> +library for processing images, using the Netpbm image formats and the +<b>libnetpbm</b> in-memory image formats. + +<p>For historical reasons as well as to avoid clutter, it does not cover +the largely obsolete PBM, PGM, PPM, and PNM classes of +<b>libnetpbm</b> functions. For those, see <a href="libpbm.html">PBM +Function Manual</a>, <a href="libpgm.html">PGM Function Manual</a>, <a +href="libppm.html">PPM Function Manual</a>, and <a +href="libpnm.html">PNM Function Manual</a>. Note that you do <em>not</em> +need those functions to process PBM, PGM, PPM, and PNM images. The +functions in this manual are sufficient for that. + +<p>The PPM Drawing function are covered separately in +<a href="libnetpbm_draw.html">PPM Drawing Function Manual</a>. + +<p>For introductory and general information using <b>libnetpbm</b>, see +<a href="libnetpbm_ug.html">Libnetpbm User's Guide</a>. + +<p><b>libnetpbm</b> also contains functions that are not specifically +oriented toward processing image data. Read about those in the +<a href="libpm.html">Libnetpbm Utility Manual</a>. + + +<p>To use these services, #include <b>pam.h</b>. + + +<a name="types"></a> +<H2>Types</h2> + +<p>Here are some important types that you use with <b>libnetpbm</b>: + +<dl> + +<dt>sample + +<dd>A sample of a Netpbm image. See the format specifications -- as an +example, the red intensity of a particular pixel of a PPM image is a +sample. This is an integer type. + +<dt>tuple + +<dd>A tuple from a PAM image or the PAM equivalent of a PNM image. +See the PAM format specification -- as an example, a pixel of a PPM image +would be a tuple. A tuple is an array of samples. + +<dt>samplen + +<dd>Same as <b>sample</b>, except in normalized form. This is a floating +point type with a value in the range 0..1. 0 corresponds to a PAM/PNM +sample value of 0. 1 corresponds to a PAM/PNM sample value equal to the +image's maxval. + +<dt>tuplen + +<dd>The same as <b>tuple</b>, except composed of normalized samples +(<b>samplen</b>) intead of regular samples (<b>sample</b>). + +</dl> + + + +<p>The main argument to most of the PAM functions is the address of +a <b>pam</b> structure, which is defined as follows: + +<P> +<a name="#pamstruct"></a> +<B>struct pam {</B> +<BR> +<B>int </B><I>size</I> +<BR> +<B>int </B><I>len</I> +<BR> +<B>FILE *</B><I>file </I> +<BR> +<B>int </B><I>format</I> +<BR> +<B>int </B><I>plainformat</I> +<BR> +<B>int </B><I>height</I> +<BR> +<B>int </B><I>width</I> +<BR> +<B>int </B><I>depth</I> +<BR> +<B>sample </B><I>maxval</I> +<BR> +<B>int </B><I>bytes_per_sample</I> +<BR> +<B>char </B><I>tuple_type</I><B>[256];</B> +<B>}</B> + +<p>See <a href="libnetpbm_ug.html#pamstruct">The Libnetbm User's Guide</a> +for information on the <b>pam</b> structure. + + +<a name="macros"></a> +<H2>Macros</h2> + +<B>PNM_MAXMAXVAL</B> is the maximum maxval that Netpbm images could +historically have: 255. Many programs aren't capable of handling Netpbm +images with a maxval larger than this. It's named this way for backward +compatibility -- it had this name back when it was <em>the</em> maximum +maxval. + +<p><B>PNM_OVERALLMAXVAL</b> is the maximum maxval that Netpbm images can +have today (65535). + +<P><B>PBM_FORMAT</b>, <B>RPBM_FORMAT</b>, <B>PGM_FORMAT</b>, +<B>RPGM_FORMAT</B>, <b>PPM_FORMAT</B>, <B>RPPM_FORMAT</B>, and +<B>PAM_FORMAT</B> are the format codes of the various Netpbm formats. +<B>RPBM_FORMAT</B> is the raw PBM format and <B>PBM_FORMAT</B> is the +plain PBM format, and so on. See the <i>format</i> member of <a +href="libnetpbm_ug.html#pamstruct">the <b>pam</b> structure</a>. + +<p><B>PAM_FORMAT_TYPE(</B><I>format</I><B>)</B> gives the type of a +format, given the format code. The types of formats are PBM, PGM, +PPM, and PAM and macros for the type codes are, respectively, +PBM_TYPE, PGM_TYPE, PPM_TYPE, and PAM_TYPE. Note that there are more +format codes then there are format types because there are different +format codes for the plain and raw subformats of each format. + + + +<a name="functions"></a> +<H2>Functions</H2> + +<p>These interfaces are declared in <b>pam.h</b>. + +<a name="memory"></a> +<h3>Memory Management</h3> +<h4>Synopsis</h4> +<P> +<B>tuple ** pnm_allocpamarray(</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>tuple * pnm_allocpamrow(</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>void pnm_freepamarray(</B> +<B>tuple **</B><I>tuplearray</I><B>,</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>void pnm_freepamrow(</B> +<B>tuple *</B><I>tuplerow</I><B>);</B> + +<P> +<B>tuple * allocpamtuple(</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>void pnm_freepamtuple(</B> +<B>tuple </B><I>tuple</I> +<B>);</B> + +<P> +<B>tuplen * pnm_allocpamrown(</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>void pnm_freepamrown(</B> +<B>tuple *</B><I>tuplenrow</I><B>);</B> + + + +<h4>Description</h4> + +<p><B>pnm_allocpamarray()</B> allocates space for an array of tuples. +<B>pnm_freepamarray()</B> frees an array space allocated by +<B>pnm_allocpamarray()</B> or <B>pnm_readpam()</B>. + +<P><B>pnm_allocpamrow() </B> allocates space for a row of a PAM image, +in basic form. <B>pnm_freepamrow()</B> frees it. + +<p><b>pnm_allocpamrown()</b> is the same as <b>pnm_allocpamrow()</b> +except that it allocates space for a PAM row in the normalized form. +<b>pnm_freepamrown()</b> is similarly like <b>pnm_freepamrow</b>. + + +<a name="reading"></a> +<h3>Reading Netpbm Files</h3> +<h4>Synopsis</h4> + +<P> +<B>void pnm_readpaminit(</B> +<B>FILE *</B><I>file</I><B>,</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>int </B><I>size</I><B>);</B> + +<P> +<B>void pnm_readpamrow(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>tuple *</B><I>tuplerow</I><B>);</B> + +<P> +<B>tuple ** pnm_readpam(</B> +<B>FILE *</B><I>file</I><B>,</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<BR> +<B>int </B><I>size</I><B>);</B> + +<P> +<B>void pnm_readpamrown(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>tuplen *</B><I>tuplenrow</I><B>);</B> + + +<h4>Description</h4> + +<P><B>pnm_readpaminit()</B> reads the header of a Netpbm image. + +<p>See above for a general description of the <i>pamP</i> argument. + +<p><b>pnm_readpaminit()</b> returns the information from the header in +the <B>*</B><I>pamP</I> structure. It does not require any members of +<B>*</B><I>pamP</I> through <b>tuple_type</b> to be set at invocation, +and sets all of those members. It expects all members after +<b>tuple_type</b> to be meaningful. + +<p><I>size</I> is the size of the <B>*</B><I>pamP</I> structure as +understood by the program processing the image. +<b>pnm_readpaminit()</B> does not attempt to use or set any members of +the structure beyond that. The point of this argument is that the +definition of the structure may change over time, with additional +fields being added to the end. This argument allows +<b>pnm_readpaminit</b> to distinguish between a new program that wants +to exploit the additional features and an old program that cannot (or +a new program that just doesn't want to deal with the added +complexity). At a minimum, this size must contain the members up +through <b>tuple_type</b>. You should use the <b>PAM_STRUCT_SIZE</B> +macro to compute this argument. +E.g. <b>PAM_STRUCT_SIZE(tuple_type)</b>. + +<P>The function expects to find the image file positioned to the start +of the header and leaves it positioned to the start of the raster. + +<P><B>pnm_readpamrow()</B> reads a row of the raster from a Netpbm +image file. It expects all of the members of the <B>*pamP</B> +structure to be set upon invocation and does not modify any of them. +It expects to find the file positioned to the start of the row in +question in the raster and leaves it positioned just after it. It +returns the row as the array of tuples <I>tuplerow</I>, which must +already have its column pointers set up so that it forms a C +2-dimensional array. The leftmost tuple is Element 0 of this array. + +<P><B>pnm_readpam()</B> reads an entire image from a PAM or PNM image +file and allocates the space in which to return the raster. It +expects to find the file positioned to the first byte of the image and +leaves it positioned just after the image. <P> The function does not +require <B>*</B><I>pamP</I> to have any of its members set and sets +them all. <I>size</I> is the storage size in bytes of the +<B>*</B><I>pamP</I> structure, normally <B>sizeof(struct pam)</B>. + +<P>The return value is a newly allocated array of the rows of the image, +with the top row being Element 0 of the array. Each row is represented +as <B>pnm_readpamrow()</B> would return. + +<P>The return value is also effectively a 3-dimensional C array of +samples, with the dimensions corresponding to the height, width, and +depth of the image, in that order. + +<P><B>pnm_readpam()</B> combines the functions of +<B>pnm_allocpamarray()</B>, <B>pnm_readpaminit()</B>, and iterations +of <B>pnm_readpamrow()</B>. It may require more dynamic storage than +you can afford. + +<p><b>pnm_readpamrown()</b> is like <b>pnm_readpamrow()</b> except that +it returns the row contents in normalized form (composed of normalized +tuples (<b>tuplen</b>) instead of basic form (<b>tuple</b>). + +<p><b>pnm_readpaminit()</b> and <b>pnm_readpam</b> abort the program +with a message to Standard Error if the PAM or PNM image header is not +syntactically valid, including if it contains a number too large to be +processed using the system's normal data structures (to wit, a number +that won't fit in a C 'int'). + +<a name="writing"></a> +<h3>Writing Netpbm Files</h3> +<h4>Synopsis</h4> +<P> +<B>void pnm_writepaminit(</B> +<B>struct pam *</B><I>pamP</I><B>);</B> + +<P> +<B>void pnm_writepamrow(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>const tuple *</B><I>tuplerow</I><B>);</B> + +<P> +<B>void pnm_writepam(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>const tuple * const *</B><I>tuplearray</I><B>);</B> + +<P> +<B>void pnm_writepamrown(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>const tuplen *</B><I>tuplerown</I><B>);</B> + +<p> +<b>void pnm_formatpamrow(</b> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>const tuple *</B><I>tuplerow</I> +<b>unsigned char * const <i>outbuf</i>,</b> +<b>unsigned int * const <i>rowSizeP</i></b> +<B>);</B> + +<h4>Description</h4> + +<P><B>pnm_writepaminit()</B> writes the header of a PAM or PNM image +and computes some of the fields of the pam structure. + +<p>See above for a description of the <i>pamP</i> argument. + +<P>The following members of the <B>*</B><I>pamP</I> structure must be +set upon invocation to tell the function how and what to write. +<B>size</B>, <B>len</B>, <B>file</B>, <B>format</B>, <B>height</B>, +<B>width</B>, <B>depth</B>, <B>maxval</B>, <B>tuple_type</B>. + +<P><B>pnm_writepaminit()</B> sets the <B>plainformat</B> and +<B>bytes_per_sample</B> members based on the information supplied. + +<P><B>pnm_writepamrow()</B> writes a row of the raster into a PAM or +PNM image file. It expects to find the file positioned where the row +should start and leaves it positioned just after the row. The +function requires all the elements of <B>*</B><I>pamP</I> to be set +upon invocation and doesn't modify them. + +<P><I>tuplerow</I> is an array of tuples representing the row. The +leftmost tuple is Element 0 of this array. + +<p><B>pnm_writepam()</B> writes an entire PAM or PNM image to a PAM or +PNM image file. It expects to find the file positioned to where the +image should start and leaves it positioned just after the image. <P> +The following members of the <B>*</B><I>pamP</I> structure must be set +upon invocation to tell the function how and what to write: +<B>size</B>, <B>len</B>, <B>file</B>, <B>format</B>, <B>height</B>, +<B>width</B>, <B>depth</B>, <B>maxval</B>, <B>tuple_type</B>. + +<P><B>pnm_writepam()</B> sets the <B>plainformat</B> and +<B>bytes_per_sample</B> members based on the information supplied. + +<P><I>tuplearray</I> is an array of rows such that you would pass to +<B>pnm_writepamrow()</B>, with the top row being Element 0 of the +array. + +<P><B>pnm_writepam()</B> combines the functions of +<B>pnm_writepaminit()</B>, and iterations of <B>pnm_writepamrow()</B>. +Its raster input may be more storage than you can afford. + +<p><b>pnm_writepamrown()</b> is like <b>pnm_writepamrow()</b> except that +it takes the row contents in normalized form (composed of normalized +tuples (<b>tuplen</b>) instead of basic form (<b>tuple</b>). + +<p><b>pnm_formatpamrow()</b> is like <b>pnm_writepamrow()</b>, except +that instead of writing a row to a file, it places the same bytes that +would go in the file in a buffer you supply. There isn't an equivalent +function to construct an image header; i.e. there is no analog to +<b>pnm_writepaminit()</b>. But the header format, particularly for +PAM, is so simple that you can easily build it yourself with standard +C library string functions. + +<p><b>pnm_formatpamrow()</b> was new in Netpbm 10.25 (October 2004). + +<h3 id="transform">Transforming Pixels</h3> + +<h4>Synopsis</h4> + + +<P> +<B>void pnm_YCbCrtuple(</B> +<br> +<B>tuple</B><I>tuple</I><B>,</B> +<B>double *</B><I>YP</I><B>,</B> +<B>double *</B><I>CrP</I><B>,</B> +<B>double *</B><I>CbP</I><B>);</B> + +<p> +<b>void pnm_YCbCr_to_rgbtuple( +<br> +const struct pam * const <i>pamP</i>, +<br> + tuple const <i>tuple</i>, +<br> + double const <i>Y</i>, + double const <i>Cb</i>, + double const <i>Cr</i>, +<br> + int * const <i>overflowP</i> +); +</b> + +<p> +<b>extern double pnm_lumin_factor[3];</b> + +<p> +<b> +void +pnm_normalizetuple( +<br> + struct pam * const <i>pamP</i>, + tuple const <i>tuple</i>, + tuplen const <i>tuplen</i>); +</b> + +<p> +<b> +void +pnm_unnormalizetuple( +<br> + struct pam * const <i>pamP</i>, + tuplen const <i>tuplen</i>, + tuple const <i>tuple</i>); +</b> + +<p> +<b> +void +pnm_normalizeRow( +<br> + struct pam * const <i>pamP</i>, + const tuple * const <i>tuplerow</i>, + pnm_transformMap * const <i>transform</i>, + tuplen * const <i>tuplenrow</i>); +</b> + +<p> +<b> +void +pnm_unnormalizeRow( +<br> + struct pam * const <i>pamP</i>, + const tuplen * const <i>tuplenrow</i>, + pnm_transformMap * const <i>transform</i>, + tuple * const <i>tuplerow</i>); +</b> + +<p> +<b> +void +pnm_gammarown( +<br> + struct pam * const <i>pamP</i>, + tuplen * const <i>row</i> +); +</b> + +<p> +<b> +void +pnm_ungammarown( +<br> + struct pam * const <i>pamP</i>, + tuplen * const <i>row</i> +); +</b> + +<p> +<b> +void +pnm_applyopacityrown( +<br> + struct pam * const <i>pamP</i>, + tuplen * const <i>tuplenrow</i> +); +</b> + +<p> +<b> +void +pnm_unapplyopacityrown( +<br> + struct pam * const <i>pamP</i>, + tuplen * const <i>tuplenrow</i> +); + +</b> + +<p> +<b> +pnm_transformMap * +pnm_creategammatransform( +<br> + const struct pam * const <i>pamP</i> +); +</b> + +<p> +<b> +void +pnm_freegammatransform( +<br> + const pnm_transformMap * const <i>transform</i>, + const struct pam * const <i>pamP</i> +); +</b> + +<p> +<b> +pnm_transformMap * +pnm_createungammatransform( +<br> + const struct pam * const <i>pamP</i> +); +</b> + +<p> +<b> +void +pnm_freeungammatransform( +<br> + const pnm_transformMap * const <i>transform</i>, + const struct pam * const <i>pamP</i> +); +</b> + + +<h4>Description</h4> + +<P><B>pnm_YCbCrtuple()</B> returns the Y/Cb/Cr luminance/chrominance +representation of the color represented by the input tuple, assuming +that the tuple is an RGB color representation (which is the case if it +was read from a PPM image). The output components are based on the +same scale (maxval) as the input tuple, but are floating point +nonetheless to avoid losing information due to rounding. Divide them +by the maxval to get normalized [0..1] values. + +<p><b>pnm_YCbCr_to_rgbtuple()</b> does the reverse. <i>pamP</i> +indicates the maxval for the returned <i>tuple</i>, and the <i>Y</i>, +<i>Cb</i>, and <i>Cr</i> arguments are of the same scale. + +<p>It is possible for <i>Y</i>, <i>Cb</i>, and <i>Cr</i> to describe a +color that cannot be represented in RGB form. In that case, +<b>pnm_YCbCr_to_rgbtuple()</b> chooses a color as close as possible +(by clipping each component to 0 and the maxval) and sets *overflowP +true. It otherwise sets *overflowP false. + + +<b>pnm_lumin_factor[]</b> is the factors (weights) one uses to compute +the intensity of a color (according to some standard -- I don't know +which). pnm_lumin_factor[0] is for the red component, [1] is for the +green, and [2] is for the blue. They add up to 1. + +<p><b>pnm_gammarown()</b> and <b>pnm_ungammarown()</b> apply and unapply +gamma correction to a row of an image using the same transformation as +<a href="libpm.html#gamma"><b>pm_gamma()</b> and <b>pm_ungamma()</b></a>. +Note that these operate on a row of normalized tuples (<b>tuplen</b>, +not <b>tuple</b>). + +<p><b>pnm_applyopacity()</b> reduces the intensity of samples in accordance +with the opacity plane of an image. The opacity plane, if it exists, tells +how much of the light from that pixel should show when the image is composed +with another image. You use <b>pnm_applyopacity()</b> in preparation for +doing such a composition. For example, if the opacity plane says that the +top half of the image is 50% opaque and the bottom half 100% opaque, +<b>pnm_applyopacity()</b> will reduce the intensity of each sample of each +tuple (pixel) in the upper half of the image by 50%, and leave the rest +alone. + +<p>If the image does not have an opacity plane (i.e. its tuple type is +not one that <b>libnetpbm</b> recognizes as having an opacity plane), +<b>pnm_applyopacity()</b> does nothing (which is the same as assuming +opacity 100%). The tuple types that <b>libnetpbm</b> recognizes as +having opacity are <B>RGB_ALPHA</B> and <B>GRAYSCALE_ALPHA</B>. + +<p><b>pnm_unapplyopacity()</b> does the reverse. It assumes the +intensities are already reduced according to the opacity plane, and +raises back to normal. + +<p><b>pnm_applyopacity()</b> works on (takes as input and produces as +output) <em>normalized</em>, <em>intensity-proportional</em> tuples. +That means you will typically read the row from the image file with +<b>pnm_readpamrown()</b> and then gamma-correct it with +<b>pnm_ungammarown()</b>, and then do <b>pnm_applyopacity()</b>. You +then manipulate the row further (perhaps add it with other rows you've +processed similarly), then do <b>pnm_unapplyopacity()</b>, then +<b>pnm_gammarown()</b>, then <b>pnm_writegammarown()</b>. + +<p><b>pnm_normalizeTuple()</b> and <b>pnm_unnormalizeTuple()</b> +convert between a <b>tuple</b> data type and a <b>tuplen</b> data +type. The former represents a sample value using the same unsigned +integer that is in the PAM image, while the latter represents a +sample value as a number scaled by the maxval to the range 0..1. +I.e. <b>pnm_normalizeTuple()</b> divides every sample value by the +maxval and <b>pnm_unnormalizeTuple()</b> multiples every sample by the +maxval. + +<p><b>pnm_normalizeRow()</b> and <b>pnm_unnormalizeRow()</b> do the same +thing on an entire tuple row, but also have an extra feature: You can +specify a transform function to be applied in addition. Typically, this +is a gamma transform function. You can of course more easily apply your +transform function separately from normalizing, but doing it all at once +is usually way faster. Why? Because you can use a lookup table that +is indexed by an integer on one side and produces a floating point number +on the other. To do it separately, you'd either have to do floating point +arithmetic on the normalized value or do the transform on the integer +values and lose a lot of precision. + +<p>If you don't have any transformation to apply, just specify +<b>NULL</b> for the <i>transform</i> argument and the function will +just normalize (i.e. divide or multiply by the maxval). + +<p>Here's an example of doing a transformation. The example composes +two images together, something that has to be done with intensity-linear +sample values. + +<pre> + +pnm_transformMap * const transform1 = pnm_createungammatransform(&inpam1); +pnm_transformMap * const transform2 = pnm_createungammatransform(&inpam2); +pnm_transformMap * const transformOut = pnm_creategammatransform(&outpam); + +pnm_readpamrow(&inpam1, inrow1); +pnm_readpamrow(&inpam2, inrow2); + +pnm_normalizeRow(&inpam1, inrow1, transform1, normInrow1); +pnm_normalizeRow(&inpam2, inrow2, transform2, normInrow2); + +for (col = 0; col < outpam.width; ++col) + normOutrow[col] = (normInrow1[col] + normInrow2[col])/2; + +pnm_unnormalizeRow(&outpam, normOutrow, transformOut, outrow); + +pnm_writepamrow(&outpam, outrow); + +</pre> + +<p>To specify a transform, you must create a special +<b>pnm_transformMap</b> object and pass it as the <i>transform</i> +argument. Typically, your transform is a gamma transformation because +you want to work in intensity-proportional sample values and the PAM +image format uses gamma-adjusted ones. In that case, just use +<b>pnm_creategammtransform()</b> and +<b>pnm_createungammatransform()</b> to create this object and don't +worry about what's inside it. + +<p><b>pnm_creategammatransform()</b> and +<b>pnm_createungammatransform()</b> create objects that you use with +<b>pnm_normalizeRow()</b> and <b>pnm_unnormalizeRow()</b> as described +above. The created object describes a transform that applies or +reverses the ITU-R Recommendation BT.709 gamma adjustment that is used +in PAM visual images and normalizes or unnormalizes the sample values. + +<b>pnm_freegammatransform()</b> and <b>pnm_freeungammatransform()</b> +destroy the objects. + + +<h3 id="misc">Miscellaneous</h3> + +<h4>Synopsis</h4> + + +<P> +<B>void pnm_checkpam(</B> +<B>struct pam *</B><I>pamP</I><B>,</B> +<B>const enum pm_check_type </B><I>check_type</I><B>,</B> +<B>enum pm_check_code *</B><I>retvalP</I><B>);</B> + +<P> +<B>void pnm_nextimage(</B> +<B>FILE *</B><I>file</I><B>,</B> +<B>int * const </B><I>eofP</I><B>);</B> + +<h4>Description</h4> + +<P><B>pnm_checkpam()</B> checks for the common file integrity error +where the file is the wrong size to contain the raster, according to +the information in the header. + +<P><B>pnm_nextimage()</B>positions a Netpbm image input file to the +next image in it (so that a subsequent <B>pnm_readpaminit()</B> reads +its header). + + +<HR> +<A NAME="toc"> </A> +<H2>Table Of Contents</H2> + +<ul> + <li><a href="#types">Types</a> + <li><a href="#macros">Macros</a> + <li><a href="#functions">Functions</a> + <ul> + <li><a href="#memory">Memory Management</a> + <li><a href="#reading">Reading Netpbm Files</a> + <li><a href="#writing">Writing Netpbm Files</a> + <li><a href="#transform">Transforming Pixels</a> + <li><a href="#misc">Miscellaneous</a> + </ul> + </ul> + + + +</BODY> +</HTML> diff --git a/libnetpbm_ug.html b/libnetpbm_ug.html new file mode 100644 index 00000000..6eb3081b --- /dev/null +++ b/libnetpbm_ug.html @@ -0,0 +1,303 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Libnetpbm Image Processing Manual</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>Libnetpbm User's Guide</H1> +<?makeman .SH NAME ?> +<?makeman libnetpbm_ug \- netpbm sample code ?> + +<p>The Libnetpbm programming library is part of <a +href="index.html">Netpbm</a>. + +<H2>Example</H2> + +<p>Here is an example of a C program that uses <b>libnetpbm</b> to read a +Netpbm image input and produce a Netpbm image output. + +<pre> + /* Example program fragment to read a PAM or PNM image + from stdin, add up the values of every sample in it + (I don't know why), and write the image unchanged to + stdout. */ + + #include <pam.h> + + struct pam inpam, outpam; + unsigned int row; + + pnm_init(&argc, argv); + + pnm_readpaminit(stdin, &inpam, PAM_STRUCT_SIZE(tuple_type)); + + outpam = inpam; outpam.file = stdout; + + pnm_writepaminit(&outpam); + + tuplerow = pnm_allocpamrow(&inpam); + + for (row = 0; row < inpam.height; row++) { + unsigned int column; + pnm_readpamrow(&inpam, tuplerow); + for (column = 0; column < inpam.width; ++column) { + unsigned int plane; + for (plane = 0; plane < inpam.depth; ++plane) { + grand_total += tuplerow[column][plane]; + } + } + pnm_writepamrow(&outpam, tuplerow); } + + pnm_freepamrow(tuplerow); + +</pre> + +<H2>Guide To Using Libnetpbm</H2> + +<h3><b>libnetpbm classes</b></h3> + +<p>In this section, we cover only the PAM functions in +<b>libnetpbm</b>. As described in <a href="libnetpbm.html">the +introduction to <b>libnetpbm</b></a>, there are four other classes of +image processing functions (PBM, PGM, PPM, PNM). They are less +important, since you can do everything more easily with the PAM +functions, but if you're working on old programs or need the extra +efficiency those older functions can sometimes provide, you can find +them documented as here: <a href="libpbm.html">PBM Function Manual</a>, +<a href="libpgm.html">PGM Function Manual</a>,<a +href="libppm.html">PPM Function Manual</a>, and <a +href="libpnm.html">PNM Function Manual</a>. + +<p>In case you're wondering, what makes the PAM functions easier to use +is: +<ul> +<li>Each function handles all the formats. It does so without converting +to a common format, so your program can treat the different formats +differently if it wants. However, the interface makes it easy for your +program to ignore the differences between the formats if that's what you +want. + +<li>The PAM function parameter lists convey most information about the +image with which you're working with a single <b>pam</b> structure, +which you can build once and use over and over, whereas the older +functions require you to pass up to 5 pieces of image information +(height, width, etc.) as separate arguments to every function. +</ul> + +<H3 id="pamstruct">THE pam STRUCTURE</H3> + +<P>The PAM functions take most of their arguments in the form of a +single <B>pam</B> structure. This is not an opaque object, but just a +convenient way to organize the information upon which most the +functions depend. So you are free to access or set the elements of +the structure however you want. But you will find in most cases it is +most convenient to call <B>pnm_readpaminit()</B> or +<B>pnm_writepaminit()</B> to set the fields in the <B>pam</B> +structure before calling any other pam functions, and then just to +pass the structure unchanged in all future calls to pam functions. + +<P>The fields are: + +<DL COMPACT> +<DT><B>size</B> +<DD> +The storage size in bytes of this entire structure. + +<DT><B>len</B> + +<DD>The length, in bytes, of the information in this structure. The +information starts in the first byte and is contiguous. This cannot +be greater than <B>size</B>. <B>size</B> and <B>len</B> can be used +to make programs compatible with newer and older versions of the +Netpbm libraries. + +<DT><B>file</B> + +<DD>The file. + +<DT><B>format</B> + +<DD>The format code of the image. This is <B>PAM_FORMAT</B> +unless the PAM image is really a view of a PBM, PGM, or PPM image. +Then it's <B>PBM_FORMAT</B>, <B>RPBM_FORMAT</B>, etc. +<p> +There is an important quirk in the meaning of this member when you use +the pam structure to write an image: Only the type portion of it is +meaningful. A Netpbm format code conveys two pieces of information: +The format type (PBM, PGM, PPM, or PAM) and the plainness (plain PBM +vs raw PBM, etc.). But when writing, <b>libnetpbm</b> ignores the +plainness part and instead takes the plainness from the +<b>plainformat</b> member. So <B>PBM_FORMAT</B> and +<B>RPBM_FORMAT</B> are identical when writing. +<p> +This quirk exists for historical purposes; it's necessary for consistency +with the older functions such as <b>pnm_writepnmrow()</b> whose +<i>format</i> and <i>forceplain</i> arguments are analogous. +<p> +Before Netpbm 10.32 (February 2006), <b>libnetpbm</b> did not ignore the +plainness. This caused many programs to behave poorly, producing plain +format output when they should, for backward compatibility at the very +least, produce raw format output. +<p> +A common way to use this member is to copy it and the +<b>plainformat</b> member from a pam for an input image to a pam for +an output image. When you do that, your output image will be raw +format regardless of whether your input image was plain or raw, and +this is the conventional behavior of Netpbm programs. + +<DT><B>plainformat</B> + +<DD>This is a boolean value (0 = false, 1 = true), meaningful only +when writing an image file. It means to write in the plain (text) +version of the format indicated by <b>format</b> as oppposed to the +raw (binary) version. Note that the format code in <b>format</b> +would appear to completely specify the format, making +<b>plainformat</b> redundant. But see the description of +<b>format</b> for why that isn't true. +<p> +Until Netpbm 10.32 (Februrary 2006), this was defined a little differently. +The <b>format</b> member did in fact completely identify the format and +<b>plainformat</b> was redundant and existed as a separate member only +for computational speed. But this was inconsistent with the older +<b>libnetpbm</b> interface (e.g. <b>pnm_writepnm()</b>, and it made it +difficult to write backward compatible programs. Before Netpbm 10.32, +it affected reading as well as writing. +<p> +<b>libnetpbm</b> image reading functions set this field to false, for your +convenience in building an output image pam from an input image pam. + +<DT><B>height</B> + +<DD>The height of the image in rows. + +<DT><B>width</B> + +<DD>The width of the image in number of columns (tuples per row). + +<DT><B>depth</B> + +<DD>The depth of the image (degree of or number of samples in each tuple). + +<DT><B>maxval</B> + +<DD>The maxval of the image. See definitions in <A HREF="pam.html">pam</A>. + +<DT><B>bytes_per_sample</B> + +<DD>The number of bytes used to represent each sample in the image +file. See the format definition in <A HREF="pam.html">pam</A>. This +is entirely redundant with <B>maxval</B>. It exists as a separate +member for computational speed. + +<DT><B>tuple_type</B> + +<DD>The tuple type of the image. See definitions in <A +HREF="pam.html">pam</A>. Netpbm does not define any values for this +except the following, which are used for a PAM image which is really a +view of a PBM, PGM, or PPM image: <B>PAM_PBM_TUPLETYPE</B>, +<B>PAM_PGM_TUPLETYPE</B>, <B>PAM_PPM_TUPLETYPE</B>. + +<DT><B>allocation_depth</B> + +<dd>The number of samples for which memory is allocated for any tuple +associated with this PAM structure. This must be at least as great as +'depth'. Only the first 'depth' of the samples of a tuple are +meaningful. + +<p>The purpose of this is to make it possible for a program to change +the type of a tuple to one with more or fewer planes. + +<p>0 means the allocation depth is the same as the image depth. + +<dt><b>comments_p</b> + +<dd>Pointer to a pointer to a NUL-terminated ASCII string of comments. +When reading an image, this contains the comments from the image's PAM +header; when writing, the image gets these as comments, right after +the magic number line. The individual comments are delimited by +newlines and are in the same order as in the PAM header. The "#" +at the beginning of a PAM header line that indicates the line is a comment +is not part of the comment. + +<p>On output, NULL means no comments. + +<p>On input, libnetpbm mallocs storage for the comments and placed the +pointer at *comment_p. Caller must free it. NULL means libnetpbm +does not return comments and does not allocate any storage. + +<p>Examples: + +<pre> +<code> + const char * comments; + ... + pam.comment_p = &comments; + pnm_readpaminit(fileP, &pam, PAM_STRUCT_SIZE(comment_p)); + printf("The comments are:\n"); + printf("%s", comments) + free(comments); +</code> +</pre> + +<pre> +<code> + const char * comments; + ... + comments = strdup("This is a comment 1\nThis is comment 2\n"); + pam.comment_p = &comments; + pnm_writepaminit(&pam); + free(comments); +</code> +</pre> + +<p>This works only for PAM images. If you read a PNM image, you +always get back a null string. If you write a PNM image, you always get +an image that contains no comments. + +<p>This member does not exist before Netpbm 10.35 (August 2006). Before that, +there is no way with libnetpbm to get or set comments. The macro +<B>PAM_HAVE_COMMENT_P</B> is defined in <b>pam.h</b> where the member +exists. + +</DL> + + + +<H3 id="plainvsraw">PLAIN VERSUS RAW FORMAT</H3> + +<P>The PNM formats each come in two varieties: the older plain (text) +format and the newer raw (binary) format. There are different format +codes for the plain and raw formats, but which of the two formats the +pnm and pam functions write is independent of the format code you pass +to them. + +<P>The pam functions always write raw formats. If you specify the format +code for a plain format, a pam function assumes instead the raw +version of that format. + +<P>The pnm functions choose between plain and raw based on the +<I>forceplain</I> parameter that every write-type pnm function has. +If this boolean value is true, the function writes the plain version +of the format specified by the format code. If it is false, the +function writes the raw version of the format specified by the format +code. + +<P>We are trying to stamp out the older plain formats, so it would be +a wise choice not to write a program that sets <I>forceplain</I> true +under any circumstance. A user who needs a plain format can use the +<B>pnmtoplainpnm</B> program to convert the output of your program to +plain format. + +<H3>Reference</h3> + +<p>The <a href="libnetpbm_image.html">Libnetpbm Netpbm Image +Processing Manual</a> describes the the <b>libnetpbm</b> functions for +processing image data. + +<p>The <a href="libpm.html">Libnetpbm Utility Manual</a> +describes the functions that are not specifically related to the Netpbm +image formats. + +</BODY> +</HTML> diff --git a/libpbm.html b/libpbm.html new file mode 100644 index 00000000..23005f31 --- /dev/null +++ b/libpbm.html @@ -0,0 +1,309 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>User manual for old pbm functions</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> + +<H1>pbm Functions</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +libpbm - libnetpbm functions to read and write PBM image files + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>#include <pbm.h></B> + +<P> +<B>bit **pbm_allocarray(int</B> +<I>cols</I><B>, int </B><I>rows</I><B>);</B> + +<P> +<B>bit *pbm_allocrow(int</B> +<I>cols</I><B>);</B> + +<P> +<B>pbm_freearray(bit </B> +<B>**</B><I>bits</I><B>, int </B><I>rows</I><B>);</B> + +<P> +<B>pbm_freerow(bit</B> +<B>*</B><I>bitrow</I><B>);</B> + +<P> +<B>void pbm_readpbminit(FILE *</B> +<I>fp</I><B>, +int *</B><I>colsP</I><B>, +int *</B><I>rowsP</I><B>, +int *</B><I>formatP</I><B>);</B> + +<P> +<B>void pbm_readpbmrow(FILE *</B> +<I>fp</I><B>, +bit *</B><I>bitrow</I><B>, +int </B><I>cols</I><B>, +int </B><I>format</I><B>);</B> + +<P> +<B>void pbm_readpbmrow_packed(FILE *</B> +<I>fp</I><B>,</B> + +<BR> + +<B>unsigned char * const </B><I>packed_bits</I><B>,</B> +<B>const int </B><I>cols</I><B>,</B> +<B>const int </B><I>format</I><B>);</B> + +<P> +<B>void bit** pbm_readpbm(FILE *</B> +<I>fp</I><B>, int *</B><I>colsP</I><B>, int *</B><I>rowsP</I><B>);</B> + +<P> +<B>void pbm_writepbminit(FILE *</B> +<I>fp</I><B>, +int </B><I>cols</I><B>, +int </B><I>rows</I><B>, +int </B><I>forceplain</I><B>);</B> + +<P> +<B>void pbm_writepbmrow(FILE *</B> +<I>fp</I><B>, +bit *</B><I>bitrow</I><B>, +int </B><I>cols</I><B>, +int </B><I>forceplain</I><B>);</B> + +<P> +<B>void pbm_writepbmrow_packed(FILE *</B> +<I>fp</I><B>,</B> + +<BR> + +<B>unsigned char * const </B><I>packed_bits</I><B>,</B> +<B>const int </B><I>cols</I><B>,</B> +<B>const int </B><I>forceplain</I><B>);</B> + +<P> +<B>void pbm_writepbm(FILE *</B> +<I>fp</I><B>, +bit **</B><I>bits</I><B>, +int </B><I>cols</I><B>, +int </B><I>rows</I><B>, +int </B><I>forceplain</I><B>);</B> + +<P> +<B>#define pbm_packed_bytes(</B><I>cols</I><B>) ...</B> + +<P> +<B>void pbm_nextimage(</B> +<B>FILE *</B><I>file</I><B>,</B> +<B>int * const </B><I>eofP</I><B>);</B> + +<P> +<B>void pbm_check(</B> +<B>FILE * </B><I>file</I><B>,</B> +<B>const enum pm_check_type </B><I>check_type</I><B>,</B> +<B>const int </B><I>format</I><B>,</B> +<B>const int </B><I>cols</I><B>,</B> +<B>const int </B><I>rows</I><B>,</B> +<B>enum pm_check_code * const </B><I>retval</I><B>);</B> + + +<A NAME="lbAK"> </A> +<H2>DESCRIPTION - PBM-SPECIFIC ROUTINES</H2> + +<p>These library functions are part of <a href="index.html">Netpbm</a>. + +<A NAME="lbAL"> </A> +<H3>TYPES AND CONSTANTS</H3> + +<B>typedef ... bit;</B> + +<P> +<B>#define PBM_WHITE ...</B> + +<P> +<B>#define PBM_BLACK ...</B> + +<P>Each <B>bit</B> should contain only the values of <B>PBM_WHITE</B> +or <B>PBM_BLACK</B>. + +<P><B>#define PBM_FORMAT ...</B> + +<P><B>#define RPBM_FORMAT ...</B> + +<P><B>#define PBM_TYPE PBM_FORMAT</B> + +<P><B>#define </B> +<B>PBM_FORMAT_TYPE(</B><I>f</I><B>) ...</B> + +<P>These are for distinguishing different file formats and types. + +<A NAME="lbAM"> </A> +<H3>INITIALIZATION</H3> + +<p><b>pbm_init()</b> is identical to <b>pm_init()</b>. + +<A NAME="lbAN"> </A> +<H3>MEMORY MANAGEMENT</H3> + +<B>pbm_allocarray()</B> allocates an array of bits. +<B>pbm_allocrow()</B> allocates a row of the given number of bits. +<B>pbm_freearray()</B> frees the array allocated with +<B>pbm_allocarray()</B> containing the given number of rows. +<B>pbm_freerow()</B> frees a row of bits. + + +<A NAME="lbAO"> </A> +<H3>READING PBM IMAGE FILES</H3> + +<P><B>pbm_readpbminit()</B> reads the header from a PBM image in a PBM +file, filling in the rows, cols and format variables. +<B>pbm_readpbmrow()</B> reads a row of bits into the <I>bitrow </I> +array. Format and cols were filled in by <B>pbm_readpbminit()</B>. + +<B>pbm_readpbmrow_packed()</B> is like <B>pbm_readrow()</B> except +instead of returning a <B>bits</B> array, it returns an array +<I>packed_bits</I> of bytes with the pixels of the image row packed +into them. The pixels are in order from left to right across the row +and from the beginning of the array to the end. Within a byte, the +bits are in order from the most significant bit to the least +significant bit. If the number of pixels in the row is not a multiple +of 8, the last byte returned is padded on the least signficant bit +side with undefined bits. White is represented by a <B>PBM_WHITE</B> +bit; black by <B>PBM_BLACK</B>. + +<P><B>pbm_readpbm()</B> reads an entire bitmap file into memory, +returning the allocated array and filling in the rows and cols +variables. This function combines <B>pbm_readpbminit()</B>, +<B>pbm_allocarray()</B> and <B>pbm_readpbmrow()</B>. + +<p><b>pbm_readpbminit()</b> and <b>pbm_readpbm</b> abort the program with +a message to Standard Error if the PBM image header is not syntactically +valid, including if it contains a number too large to be processed using +the system's normal data structures (to wit, a number that won't fit in +a C 'int'). + +<p><b>ppm_readppminit()</b> and <b>ppm_readppm</b> abort the program with +a message to Standard Error if the PPM image header is not syntactically +valid, including if it contains a number too large to be processed using +the system's normal data structures (to wit, a number that won't fit in +a C 'int'). + +<A NAME="lbAP"> </A> +<H3>WRITING PBM IMAGE FILES</H3> + +<B>pbm_writepbminit()</B> writes the header for a PBM image in a PBM +file. <I>forceplain</I> is a boolean value specifying that a plain +format (text) file to be written, as opposed to a raw format (binary) +one. <B>pbm_writepbmrow()</B> writes a row to a PBM file. +<B>pbm_writepbmrow_packed()</B> is the same as +<B>pbm_writepbmrow()</B> except that you supply the row to write as an +array of bytes packed with bits instead of as a <B>bits</B> array. +The format of <I>packed_bits </I> is the same as that returned by +<B>pbm_readpbmrow()</B>. + +<P><B>pbm_writepbm()</B> writes the header and all data for a PBM +image to a PBM file. This function combines <B>pbm_writepbminit()</B> +and <B>pbm_writepbmrow()</B>. + +<A NAME="lbAQ"> </A> +<H3>MISCELLANEOUS</H3> + +<P><B>pbm_nextimage()</B> positions a PBM input file to the next image +in it (so that a subsequent <B>pbm_readpbminit()</B> reads its +header). + +<P>Immediately before a call to <B>pbm_nextimage()</B>, the file must +be positioned either at its beginning (i.e. nothing has been read from +the file yet) or just after an image (i.e. as left by a +<B>pbm_readpbmrow() </B> of the last row in the image). + +<P>In effect, then, all <B>pbm_nextimage()</B> does is test whether +there is a next image or the file is positioned at end-of-file. + +<P>If <B>pbm_nextimage() </B> successfully positions to the next +image, it returns <B>*</B><I>eofP</I> false (0). If there is no next +image in the file, it returns <B>*</B><I>eofP</I> true . If it can't +position or determine the file status due to a file error, it issues +an error message and exits the program with an error exit code. + +<P><B>pbm_check()</B> checks for the common file integrity error where +the file is the wrong size to contain all the image data. +<B>pbm_check()</B> assumes the file is positioned after an image +header (as if <B>pbm_readpbminit() </B> was the last operation on the +file). It checks the file size to see if the number of bytes left in +the file are the number required to contain the image raster. If the +file is too short, <B>pbm_check()</B> causes the program to exit with +an error message and error completion code. Otherwise, it returns one +of the following values (enumerations of the <B>enum pm_check_code</B> +type) as <B>*</B><I>retval</I>: + +<DL COMPACT> +<DT><B>PM_CHECK_OK</B> + +<DD>The file's size is exactly what is required to hold the image raster. + +<DT><B>PM_CHECK_UNKNOWN_TYPE</B> + +<DD><I>format</I> is not a format whose size <B>pbm_check()</B> can +anticipate. The only format with which <B>pbm_check()</B> can deal is +raw PBM format. + +<DT><B>PM_CHECK_TOO_LONG</B> + +<DD>The file is longer than it needs to be to contain the image +raster. The extra data might be another image. + +<DT><B>PM_CHECK_UNCHECKABLE</B> + +<DD>The file is not a kind that has a predictable size, so there is no +simple way for <B>pbm_check()</B> to know if it is the right size. +Only a regular file has predictable size. A pipe is a common example +of a file that does not. + +</DL> + +<P><I>check_type</I> must have the value <B>PM_CHECK_BASIC </B> (an +enumerated value of the <B>pm_check_type</B> enumerated type). +Otherwise, the effect of <B>pbm_check()</B> is unpredictable. This +argument exists for future backward compatible expansion of the +function of <B>pbm_check()</B>. + +<A NAME="lbAR"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="libpgm.html">libpgm</A></B>, +<B><A HREF="libppm.html">libppm</A></B>, +<B><A HREF="libpnm.html">libpnm</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAS"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> + +<UL> +<LI><A HREF="#lbAK">DESCRIPTION - PBM-SPECIFIC ROUTINES</A> +<UL> +<LI><A HREF="#lbAL">TYPES AND CONSTANTS</A> +<LI><A HREF="#lbAM">INITIALIZATION</A> +<LI><A HREF="#lbAN">MEMORY MANAGEMENT</A> +<LI><A HREF="#lbAO">READING PBM IMAGE FILES</A> +<LI><A HREF="#lbAP">WRITING PBM IMAGE FILES</A> +<LI><A HREF="#lbAQ">MISCELLANEOUS</A> +</UL> +<LI><A HREF="#lbAR">SEE ALSO</A> +<LI><A HREF="#lbAS">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/libpgm.html b/libpgm.html new file mode 100644 index 00000000..9c89da8b --- /dev/null +++ b/libpgm.html @@ -0,0 +1,279 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>User manual for old pgm functions</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>pgm Functions</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +libpgm - libnetpbm functions to read and write PGM image files + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>#include <pgm.h></B> + +<P> +<B>void pgm_init( </B> +<B>int *</B><I>argcP</I><B>,</B> +<B>char *</B><I>argv</I><B>[]</B> +<B>);</B> + +<P> +<B>gray ** pgm_allocarray(</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B> );</B> + +<P> +<B>gray * pgm_allocrow(</B> +<B>int</B><I>cols</I><B> );</B> + +<P> +<B>void pgm_freearray(</B> +<B>gray **</B><I>grays</I><B>,</B> +<B>int</B><I>rows</I><B> );</B> + +<P> +<B>void pgm_freerow(</B> +<B>gray *</B><I>grayrow</I><B>);</B> + +<P> +<B>void pgm_readpgminit( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>int *</B><I>colsP</I><B>,</B> +<B>int *</B><I>rowsP</I><B>,</B> +<B>gray *</B><I>maxvalP</I><B>,</B> +<B>int *</B><I>formatP</I><B> );</B> + +<P> +<B>void pgm_readpgmrow( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>gray *</B><I>grayrow</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>gray </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B> );</B> + +<P> +<B>gray ** pgm_readpgm( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>int *</B><I>colsP</I><B>,</B> +<B>int *</B><I>rowsP</I><B>,</B> +<B>gray *</B><I>maxvalP</I><B> );</B> + +<P> +<B>void pgm_writepgminit( </B> +<B>FILE * fp , </B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>gray </B><I>maxval</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pgm_writepgmrow( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>gray *</B><I>grayrow</I><B>,</B> +<B>int cols</B><I>,</I> +<B>gray </B><I>maxval</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pgm_writepgm( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>gray ** </B><I>grays</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>gray </B><I>maxval</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pgm_writepgm( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>gray **</B><I>grays</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>gray </B><I>maxval</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pgm_nextimage(</B> +<B>FILE *</B><I>file</I><B>,</B> +<B>int * const </B><I>eofP</I><B>);</B> + +<P> +<B>void pgm_check(</B> +<B>FILE * </B><I>file</I><B>,</B> +<B>const enum pm_check_type </B><I>check_type</I><B>,</B> +<B>const int </B><I>format</I><B>,</B> +<B>const int </B><I>cols</I><B>,</B> +<B>const int </B><I>rows</I><B>,</B> +<B>const int </B><I>maxval</I><B>,</B> +<B>enum pm_check_code * const </B><I>retval</I><B>);</B> + +<P> +<B>typedef ... gray;</B> + +<P> +<B>#define PGM_MAXMAXVAL ...</B> + +<P> +<B>#define PGM_OVERALLMAXVAL ...</B> + +<P> +<B>extern gray pgm_pbmmaxval;</B> + +<P> +<B>#define PGM_FORMAT ...</B> + +<P> +<B>#define RPGM_FORMAT ...</B> + +<P> +<B>#define PGM_TYPE PGM_FORMAT</B> + +<P> +<B>#define </B> + +<B>PGM_FORMAT_TYPE(</B><I>format</I><B>)</B> +<B>...</B> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>These library functions are part of <a href="index.html">Netpbm</a>. + +<A NAME="lbAE"> </A> +<H3>TYPES AND CONSTANTS</H3> + +<P>Each <B>gray</B> should contain only the values between <B>0</B> +and <B>PGM_OVERALLMAXVAL</B>. <B>pgm_pbmmaxval</B> is the maxval used +when a PGM program reads a PBM file. Normally it is 1; however, for +some programs, a larger value gives better results. + +<P><B>PGM_OVERALLMAXVAL</B> is the maximum value of a maxval in a PGM +file. <B>PGM_MAXMAXVAL</B> is the maximum value of a maxval in a PGM +file that is compatible with the PGM format as it existed before April +2000. It is also the maximum value of a maxval that results in the +minimum possible raster size for a particular image. I.e an image +with a maxval higher than <B>PGM_MAXMAXVAL</B> cannot be read or +generated by old PGM processing programs and requires more file space. + +<P><B>PGM_FORMAT </B> is the format code for a Plain PGM format image +file. <B>RPGM_FORMAT</B> is the format code for a Raw PGM format +image file. <B>PGM_TYPE </B> is the format type code for the PGM +formats. <B>PGM_FORMAT_TYPE</B> is a macro that generates code to +compute the format type code of a PBM or PGM format from the format +code which is its argument. + +<A NAME="lbAF"> </A> +<H3>INITIALIZATION</H3> + +<P><b>pgm_init</b> is identical to <b>pm_init()</b>. + +<A NAME="lbAG"> </A> +<H3>MEMORY MANAGEMENT</H3> + +<B>pgm_allocarray()</B> allocates an array of grays. + +<P><B>pgm_allocrow()</B> allocates a row of the given number of grays. + +<P><B>pgm_freearray()</B> frees the array allocated with +<B>pgm_allocarray()</B> containing the given number of rows. + +<P><B>pgm_freerow()</B> frees a row of grays allocated with +<B>pgm_allocrow()</B>. + +<A NAME="lbAH"> </A> +<H3>READING FILES</H3> + +<P>If a function in this section is called on a PBM format file, it +translates the PBM file into a PGM file on the fly and functions as if +it were called on the equivalent PGM file. The <I>format</I> value +returned by <B>pgm_readpgminit()</B> is, however, not translated. It +represents the actual format of the PBM file. + +<P><B>pgm_readpgminit()</B> reads the header of a PGM file, returning +all the information from the header and leaving the file positioned +just after the header. + +<P><B>pgm_readpgmrow()</B> reads a row of grays into the <I>grayrow +</I> array. <I>format</I>, <I>cols</I>, and <I>maxval </I> are the +values returned by <B>pgm_readpgminit()</B>. + +<P><B>pgm_readpgm()</B> reads an entire PGM image into memory, +returning the allocated array as its return value and returning the +information from the header as <I>rows</I>, <I>cols</I>, and +<I>maxval</I>. This function combines <B>pgm_readpgminit()</B>, +<B>pgm_allocarray()</B>, and <B>pgm_readpgmrow()</B>. + +<p><b>pgm_readpgminit()</b> and <b>pgm_readpgm</b> abort the program with +a message to Standard Error if the PGM image header is not syntactically +valid, including if it contains a number too large to be processed using +the system's normal data structures (to wit, a number that won't fit in +a C 'int'). + + +<A NAME="lbAI"> </A> +<H3>WRITING FILES</H3> + +<B>pgm_writepgminit()</B> writes the header for a PGM file and leaves +it positioned just after the header. + +<P><I>forceplain</I> is a logical value that tells +<B>pgm_writepgminit() </B> to write a header for a plain PGM format +file, as opposed to a raw PGM format file. + +<P><B>pgm_writepgmrow()</B> writes the row <I>grayrow</I> to a PGM +file. For meaningful results, <I>cols</I>, <I>maxval</I>, and +<I>forceplain</I> must be the same as was used with +<B>pgm_writepgminit()</B>. + +<P><B>pgm_writepgm()</B> write the header and all data for a PGM +image. This function combines <B>pgm_writepgminit()</B> and +<B>pgm_writepgmrow()</B>. + +<A NAME="lbAJ"> </A> +<H3>MISCELLANEOUS</H3> + +<P><B>pgm_nextimage()</B> positions a PGM input file to the next image +in it (so that a subsequent <B>pgm_readpgminit()</B> reads its +header). + +<P><B>pgm_nextimage()</B> is analogous to <B>pbm_nextimage()</B>, but +works on PGM and PBM files. + +<P><B>pgm_check() </B> checks for the common file integrity error +where the file is the wrong size to contain all the image data. + +<P><B>pgm_check() </B> is analogous to <B>pbm_check()</B>, but works +on PGM and PBM files. + +<A NAME="lbAK"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="libpbm.html">libpbm</A></B>, +<B><A HREF="libppm.html">libppm</A></B>, +<B><A HREF="libpnm.html">libpnm</A></B> + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<UL> +<LI><A HREF="#lbAE">TYPES AND CONSTANTS</A> +<LI><A HREF="#lbAF">INITIALIZATION</A> +<LI><A HREF="#lbAG">MEMORY MANAGEMENT</A> +<LI><A HREF="#lbAH">READING FILES</A> +<LI><A HREF="#lbAI">WRITING FILES</A> +<LI><A HREF="#lbAJ">MISCELLANEOUS</A> +</UL> +<LI><A HREF="#lbAK">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/libpm.html b/libpm.html new file mode 100644 index 00000000..7f1c47af --- /dev/null +++ b/libpm.html @@ -0,0 +1,523 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> <head> +<title>Libnetbpm Utility Functions</title> +<meta name="manual_section" content="3"> +</head> +<body> +<h1>Libnetpbm Utility Functions</h1> +Updated: 27 August 2006 +<BR> +<p><A HREF="#toc">Table Of Contents</A> + +<H2>NAME</H2> +libpm - netpbm utility functions +<H2>DESCRIPTION</H2> + +<p>These library functions are part of <a href="index.html">Netpbm</a>. + +<p>This page documents functions in the Netpbm subroutine library that +are not directly related to image data. + +<p>For introductory and general information using <b>libnetpbm</b>, see +<a href="libnetpbm_ug.html">Libnetpbm User's Guide</a>. + +<p>The most commonly used <b>libnetpbm</b> functions are those that +read and write and process Netpbm images. Those are documented in <a +href="libnetpbm_image.html">Libnetpbm Netpbm Image Processing +Manual</a> + +<p>To use these services, #include <b>pam.h</b>. + +<H2 id="functions">Functions</H2> + +<h3 id="initialization">Initialization</h3> + +<h4>Overview</h4> + +<p> +<B>void pm_init(</B> +<B>int *</B><I>argcP</I><B>,</B> +<B>char *</B><I>argv</I><B>[]</B> +<B>);</B> + +<h4>Description</h4> + +<p>All Netpbm programs must call <b>pm_init()</b> just after +startup, before they process their arguments. <b>pm_init()</b>, +among other things, processes Netpbm universal arguments and removes +them from the argument list. + +<p>A program that isn't a Netpbm program, but just uses <b>libnetpbm</b> +services, need not invoke <b>pm_init</b>. + +<h3 id="file">File Or Image Stream Access</h3> + +<h4>Overview</h4> +<P> +<B>FILE *pm_openr(</b> +<b>char *</B> <I>name</I><B>)</B> + +<P> +<B>FILE *pm_openw(</b> +<b>char *</B> <I>name</I> +<B>);</B> + +<P> +<B>FILE *pm_openr_seekable(</b> +<b>const char *</B> <I>name</I> +<B>);</B> + +<P> +<B>FILE *pm_close(</b> +<b>FILE *</B> <I>fp</I> +<B>);</B> + +<P> +<B>void pm_tell2(</b> +<b>FILE * </B> <I>fileP</I><B>,</b> +<b>pm_filepos *</B> <I>fileposP</I><B>,</b> +<b>unsigned int</b> <i>fileposSize</i> +<B>);</B> + +<P> +<B>unsigned int pm_tell(</b> +<b>FILE *</B> <I>fileP</I> +<B>);</B> + +<P> +<B>void pm_seek2(</b> +<b>FILE * </B> <I>fileP</I><B>,</b> +<b>const pm_filepos *</B> <I>fileposP</I><B>,</b> +<b>unsigned int</b> <i>fileposSize</i> +<B>);</B> + +<P> +<B>void pm_seek(</b> +<b>FILE * </B> <I>fileP</I><B>,</b> +<b>unsigned long</B> <I>filepos</I> +<B>);</B> + +<P> +<B>char *pm_read_unknown_size(</b> +<b>FILE *</B> <I>fp</I><B>,</b> +<b>long *</B> <I>nread</I> +<B>);</B> + + +<h4>Description</h4> + +<p>An image stream is just a file stream (represented in the standard C +library as type <b>FILE *</b>). + +<p>These routines work on files > 2 GiB if the underlying system does, +using the standard large file interface. Before Netpbm 10.15 (April 2003), +though, they would fail to open any file that large or process any offset +in a file that could not be represented in 32 bits. + +<p><B>pm_openr()</B> opens the given file for reading, with +appropriate error checking. A filename of <B>-</B> is taken to mean +Standard Input. <B>pm_openw()</B> opens the given file for writing, +with appropriate error checking. <B>pm_close()</B> closes the file +descriptor, with appropriate error checking. + +<P><B>pm_openr_seekable()</B> appears to open the file just like +<B>pm_openr()</B>, but the file thus opened is guaranteed to be +seekable (you can use ftell() and fseek() on it). +<B>pm_openr_seekable()</B> pulls this off by copying the entire file +to a temporary file and giving you the handle of the temporary file, +if it has to. If the file you name is a regular file, it's already +seekable so <B>pm_openr_seekable()</B> just does the same thing as +<B>pm_openr()</B>. + +But if it is, say, a pipe, it isn't seekable. So +<B>pm_openr_seekable()</B> reads the pipe until EOF into a temporary +file, then opens that temporary file and returns the handle of the +temporary file. The temporary file is seekable. <P> The file +<B>pm_openr_seekable()</B> creates is one that the operating system +recognizes as temporary, so when you close the file, by any means, it +gets deleted. + +<P> +You need a seekable file if you intend to make multiple passes through +the file. The only alternative is to read the entire image into +memory and work from that copy. That may use too much memory. Note +that the image takes less space in the file cache than in a buffer in +memory. As much as 96 times less space! Each sample is an integer in +the buffer, which is usually 96 bits. In the file, a sample may be as +small as 1 bit and rarely more than 8 bits. + +<P><B>pm_tell2()</B> returns a handle for the current position of the +image stream (file), whether it be the header or a row of the raster. +Use the handle as an argument to <B>pm_seek2()</B> to reposition the +file there later. The file must be seekable (which you can ensure by +opening it with <B>pm_openr_seekable()</B>) or this may fail. + +<p>The file position handle is of type <b>pm_filepos</b>, which is +intended to be opaque, i.e. used only with these two functions. In +practice, it is a file offset and is 32 bits or 64 bits depending upon +the capability of the underlying system. For maximum backward and +forward compatibility, the functions that take or return a +<b>pm_filepos</b> have a <i>fileposSize</i> argument for the size of +the data structure. In C, simply code <b>sizeof(pm_filepos)</b> for +that. + +<p><b>pm_seek()</b> and <b>pm_tell</b> are for backward compatibility +only. Do not use them in new code. These functions are not capable of +handle positions in files whose byte offset cannot be represented in 32 +bits. + +<p><b>pm_tell2()</b> and <b>pm_seek2()</b> replaced <b>pm_tell()</b> and +<b>pm_seek()</b> in Netpbm 10.15 (April 2003). + +<P><B>pm_read_unknown_size()</B> reads an entire file or input stream +of unknown size to a buffer. It allocates more memory as needed. The +calling routine has to free the allocated buffer with <B>free()</B>. + +<P><B>pm_read_unknown_size()</B> returns a pointer to the allocated +buffer. The <B>nread</B> argument returns the number of bytes read. + + +<a name="endian"></a> +<h3>Endian I/O</h3> + +<h4>Entry Points</h4> + +<P> +<B>void pm_readchar(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>char *</B> <I>sP</I> +<B>);</B> + +<P> +<B>void pm_writechar(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>char</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readbigshort(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>short *</B> <I>sP</I> +<B>);</B> + +<P> +<B>int pm_writebigshort(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>short</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readbiglong(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>long *</B> <I>lP</I> +<B>);</B> + +<P> +<B>int pm_writebiglong(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>long</B> <I>l</I> +<B>);</B> + +<P> +<B>int pm_readlittleshort(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>short *</B> <I>sP</I> +<B>);</B> + +<P> +<B>int pm_writelittleshort(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>short</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readlittlelong(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>long *</B> <I>lP</I> +<B>);</B> + +<P> +<B>int pm_writelittlelong(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>long</B> <I>l</I> +<B>);</B> + +<P> +<B>void pm_readcharu(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>char *</B> <I>sP</I> +<B>);</B> + +<P> +<B>void pm_writecharu(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>char</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readbigshortu(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>short *</B> <I>sP</I> +<B>);</B> + +<P> +<B>int pm_writebigshortu(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>short</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readbiglongu(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>long *</B> <I>lP</I> +<B>);</B> + +<P> +<B>int pm_writebiglongu(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>long</B> <I>l</I> +<B>);</B> + +<P> +<B>int pm_readlittleshortu(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>short *</B> <I>sP</I> +<B>);</B> + +<P> +<B>int pm_writelittleshortu(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>short</B> <I>s</I> +<B>);</B> + +<P> +<B>int pm_readlittlelongu(</b> +<b>FILE *</B> <I>in</I><B>,</b> +<b>long *</B> <I>lP</I> +<B>);</B> + +<P> +<B>int pm_writelittlelongu(</b> +<b>FILE *</B> <I>out</I><B>,</b> +<b>long</B> <I>l</I> +<B>);</B> + +<h4>Description</h4> + +<B>pm_readchar()</B>, <B>pm_writechar()</B>, <B>pm_readbigshort()</B>, +<B>pm_writebigshort()</B>, <B>pm_readbiglong()</B>, +<B>pm_writebiglong()</B>, <B>pm_readlittleshort()</B>, +<B>pm_writelittleshort()</B>, <B>pm_readlittlelong()</B>, and +<B>pm_writelittlelong()</B> are routines to read and write 1-byte, +2-byte, and 4-byte pure binary integers in either big- or +little-endian byte order. Note that a "long int" C type might +be wider than 4 bytes, but the "long" routines still read and +write 4 bytes. + +<p><b>pm_readbiglongu()</b>, etc. (names ending in <b>u</b>) are the same +except they work on unsigned versions of the type. + +<P>The routines with declared return values always return 0. Before +Netpbm 10.27 (March 2005), they returned -1 on failure, including EOF. +Now, they issue an error message to Standard Error and abort the program +if the I/O fails or encounters EOF. + +<p>The 1-byte routines were new in Netpbm 10.27 (March 2005). +The unsigned versions were new somewhere around Netpbm 10.21 (2004). + +<A NAME="maxval"> </A> +<H3>Maxval Arithmetic</H3> + +<h4>Entry Points</h4> +<P> +<B>int pm_maxvaltobits(</b> +<b>int</B> <I>maxval</I> +<B>);</B> + +<P> +<B>int pm_bitstomaxval(</b> +<b>int</B> <I>bits</I> +<B>);</B> + +<P> +<B>unsigned int pm_lcm(</b> +<b>unsigned int</B> <I>x</I><B>,</B> +<B>unsigned int</B> <I>y</I><B>,</B> +<B>unsigned int</B> <I>z</I><B>,</B> +<B>unsigned int</B> <I>limit</I> +<B>);</B> + +<h4>Description</h4> + +<p><B>pm_maxvaltobits()</B> and <B>pm_bitstomaxval()</B> convert +between a maxval and the minimum number of bits required to hold it. + +<P><B>pm_lcm()</B> computes the least common multiple of 3 integers. +You also specify a limit and if the LCM would be higher than that +limit, <B>pm_lcm()</B> just returns that limit. + +<H3 id="gamma">Gamma Arithmetic</H3> + +<h4>Entry Points</h4> +<P> +<B>float pm_gamma(</b> +<b>float</B> <I>intensity</I> +<B>);</B> + +<P> +<B>float pm_ungamma(</b> +<b>float</B> <I>brightness</I> +<B>);</B> + + +<h4>Description</h4> + +<p>In graphics processing, there are two common ways of representing +numerically the intensity of a pixel, or a component of a pixel. + +<p>The obvious way is with a number that is directly proportional to +the light intensity (e.g. 10 means twice as many milliwatts per square +centimeter as 5). There are two problems with this: + +<ul> + <li>To the human eye, a 1 milliwatt per square centimeter difference + in a bright image is much less apparent than a 1 milliwatt per + square centimeter difference in a dark image. So if you have + a fixed number of bits in which to store the intensity value, + you're wasting resolution at the bright end and skimping on it at + the dark end. + <li>Monitor inputs and camera outputs aren't directly proportional to + the light intensity they project or detect. +</ul> + +<p>For these reasons, light intensities are often represented in +graphics processing by an exponential scale. The transfer function is +called a gamma function and the resulting numbers are called +gamma-corrected or gamma-adjusted. There are various gamma functions. +The Netpbm formats specify that intensities are represented by +gamma-adjusted numbers of a particular gamma transfer function. + +<p>These functions let you convert back and forth between these two +scales, using the same gamma transfer function that is specified in the +Netpbm format specifications. + +<p><b>pm_gamma709</b> converts from an intensity-proportional intensity +value to a gamma-adjusted intensity value (roughly proportional to +brightness, which is the human subjective perception of intensity), +using the ITU-R Recommendation BT.709 gamma transfer function. + +<P><B>pm_ungamma709</b> is the inverse of <b>pm_gamma709</b>. + +<H3 id="message">Messages</H3> + +<h4>Overview</h4> + +<P> +<B>void pm_message(</b> +<b>char *</B> <I>fmt</I><B>,</B> +<B>... );</B> + +<p> +<B>void pm_setusermessagefn(pm_usermessagefn *</B> <I>function</I><B>);</b> + +<h4>Description</h4> + +<p><B>pm_message()</B> is a <B>printf()</B> style routine to write an +informational message to the Standard Error file stream. +<B>pm_message()</B> suppresses the message, however, if the user +specified the <B>-quiet</B> option on the command line. See the +initialization functions, e.g. <B>pnm_init()</B>, for information on +the <B>-quiet</B> option. Note that Netpbm programs are often used +interactively, but also often used by programs. In the interactive +case, it is nice to issue messages about what the program is doing, +but in the program case, such messages are usually undesirable. By +using <B>pm_message()</B> for all your messages, you make your program +usable in both cases. Without any effort on your part, program users +of your program can avoid the messages by specifying the <B>-quiet</B> +option. + +<p>Netpbm distinguishes between error messages and information +messages; <b>pm_message()</b> is just for informational messages. To +issue an error message, see +<a href="error.html#pm_errormsg"><b>pm_errormsg()</b></a>. + +<p><b>pm_setusermessagefn</b> registers a handler for informational +messages, called a user message routine. Any library function +(including <b>pm_message()</b>) that wants to issue an informational +message in the future will call that function with the message as an +argument instead of writing the message to Standard Error. + +<p>The argument the user message routine gets is English text designed +for human reading. It is just the text of the message; there is no +attempt at formatting in it (so you won't see any newline or tab +characters). + +<p>To capture error messages in addition to informational messages, +see +<a href="error.html#pm_setusererrormsgfn"><b>pm_setusererrormsgfn()</b></a>. + +<p>You can remove the user message routine, so that the library issues +future informational messages in its default way (write to Standard +Error) by specifying a null pointer for <i>function</i>. + +Example: + +<pre> +<code> + static pm_usermessagefn logfilewrite; + + static void + logfilewrite(const char * const msg) { + fprintf(mymsglog, "Netpbm message: %s", msg); + } + + pm_setusermessagefn(&logfilewrite); + + pm_message("Message for the message log"); +</code> +</pre> + + +<h3 id="system">System Utilities</h3> + +<ul> +<li><a href="libsystem.html">pm_system</a> +<li><a href="libtmpfile.html">pm_tmpfile</a> +</ul> + +<H3 id="keyword">Keyword Matching</H3> + +<h4>Entry Points</h4> + +<P> +<B>void pm_keymatch();</b> + +<h4>Description</h4> + +<p>This subroutine is obsolete. It used to be used for command line +option processing. Today, you can do better option processing more +easily with the shhopt facility. See any recent program in the Netpbm +package for an example. + +<B>pm_keymatch()</B> does a case-insensitive match of <B>str</B> +against <B>keyword</B>. <B>str</B> can be a leading substring of +<B>keyword</B>, but at least <B>minchars</B> must be present. + + +<HR> +<H2 id="toc">Table Of Contents</H2> + +<ul> + <li><a href="#functions">Functions</a> + <ul> + <li><a href="#initialization">Initialization</a> + <li><a href="#file">File Or Image Stream Access</a> + <li><a href="#endian">Endian I/O</a> + <li><a href="#maxval">Maxval Arithmetic</a> + <li><a href="#message">Messages And Errors</a> + <li><a href="#keyword">Keyword</a> + </ul> + </ul> + + +</body> </html> diff --git a/libpnm.html b/libpnm.html new file mode 100644 index 00000000..00482a43 --- /dev/null +++ b/libpnm.html @@ -0,0 +1,357 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>User manual for old pnm functions</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>pnm Functions</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +libpnm - libnetpbm functions to read and write PNM image files + +<A NAME="lbAD"> </A> +<H2>SYNOPSIS</H2> + +<B>#include <pnm.h></B> + +<P> +<B>void pnm_init(</B> +<B>int *</B><I>argcP</I><B>,</B> +<B>char *</B><I>argv</I><B>[]</B> +<B>);</B> + +<P> +<B>xel ** pnm_allocarray(</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>);</B> + +<P> +<B>xel * pnm_allocrow(</B> +<B>int </B><I>cols</I><B>);</B> + +<P> +<B>void pnm_freearray(</B> +<B>xel **</B><I>xels</I><B>,</B> +<B>int </B><I>rows</I><B>);</B> + +<P> +<B>void pnm_freerow(</B> +<B>xel *</B><I>xelrow</I><B>);</B> + +<P> +<B>void pnm_readpnminit( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>int *</B><I>colsP</I><B>,</B> +<B>int *</B><I>rowsP</I><B>,</B> +<B>xelval *</B><I>maxvalP</I><B>,</B> +<B>int *</B><I>formatP</I><B> );</B> + +<P> +<B>void pnm_readpnmrow( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>xel *</B><I>xelrow</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> + +<BR> + +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B> );</B> + +<P> +<B>xel ** pnm_readpnm( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>int *</B><I>colsP</I><B>,</B> +<B>int *</B><I>rowsP</I><B>,</B> + +<BR> + +<B>xelval *</B><I>maxvalP</I><B>, int</B><I>*</I><B> formatP </B><I>);</I> + +<P> +<B>void pnm_writepnminit( </B> +<B>FILE * fp , </B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>,</B> +<B>int </B><I>forceplain</I><B>);</B> + +<P> +<B>void pnm_writepnmrow( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>xel *</B><I>xelrow</I><B>,</B> +<B>int cols</B><I>,</I> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pnm_writepnm( </B> +<B>FILE *</B><I>fp</I><B>,</B> +<B>xel ** </B><I>xels</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>,</B> +<B>int </B><I>forceplain</I><B> );</B> + +<P> +<B>void pnm_check(</B> +<B>FILE * </B><I>file</I><B>,</B> +<B>const enum pm_check_type </B><I>check_type</I><B>,</B> +<B>const int </B><I>format</I><B>,</B> +<B>const int </B><I>cols</I><B>,</B> +<B>const int </B><I>rows</I><B>,</B> +<B>const xelval </B><I>maxval</I><B>,</B> +<B>enum pm_check_code *</B><I>retvalP</I><B>);</B> + +<P> +<B>void pnm_promoteformatrow( </B> +<B>xel *</B><I>xelrow</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>,</B> +<B>xelval </B><I>newmaxval</I><B>,</B> +<B>int </B><I>newformat</I><B>);</B> + +<P> +<B>void pnm_promoteformat( </B> +<B>xel **</B><I>xels</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>,</B> +<B>xelval </B><I>newmaxval</I><B>,</B> +<B>int </B><I>newformat</I><B>);</B> + +<P> +<B>xel pnm_whitexel( </B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>);</B> + +<P> +<B>xel pnm_blackxel( </B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>);</B> + +<P> +<B>void pnm_invertxel( </B> +<B>xel *</B><I>x</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>);</B> + +<P> +<B>xel pnm_backgroundxelrow( </B> +<B>xel *</B><I>xelrow</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>);</B> + +<P> +<B>xel pnm_backgroundxel( </B> +<B>xel **</B><I>xels</I><B>,</B> +<B>int </B><I>cols</I><B>,</B> +<B>int </B><I>rows</I><B>,</B> +<B>xelval </B><I>maxval</I><B>,</B> +<B>int </B><I>format</I><B>);</B> +<P><B>typedef ... xelval;</B> +<P><B>typedef ... xel;</B> +<P><B>extern xelval pnm_pbmmaxval;</B> + +<P> +<B>#define </B> +<B>PNM_ASSIGN1(</B><I>x</I><B>,</B><I>v</I><B>)</B> +<B>...</B> + +<P> +<B>#define </B> +<B>PNM_GET1(</B><I>x</I><B>)</B> +<B>...</B> + +<P> +<B>#define </B> +<B>PNM_EQUAL(</B><I>x</I><B>,</B><I>y</I><B>)</B> +<B>...</B> + +<P> +<B>#define </B> +<B>PNM_FORMAT_TYPE(</B><I>format</I><B>)</B> +<B>...</B> + +<A NAME="lbAE"> </A> +<H2>DESCRIPTION</H2> + +<p>These library functions are part of <a href="index.html">Netpbm</a>. + + +<A NAME="lbAI"> </A> +<H3>PNM TYPES AND CONSTANTS</H3> + +<P>Each <B>xel</B> contains three <B>xelval</B>s, each of which should +contain only the values between <B>0</B> and <B>PNM_MAXMAXVAL</B>, +inclusive. <B>pnm_pbmmaxval</B> is the maxval used when a PNM program +reads a PBM file. Normally it is 1; however, for some programs, a +larger value gives better results. + +<A NAME="lbAJ"> </A> +<H3>PNM XEL MANIPULATIONS</H3> + +<A NAME="lbAK"> </A> + +<p>The <B>PNM_GET1</B> macro extracts a single value from an xel, when +you know it's from a PBM or PGM file. When it's from a PPM file, use +<B>PPM_GETR()</B>, <B>PPM_GETG()</B>, and <B>PPM_GETB()</B>. + +<P>The <B>PNM_ASSIGN1</B> macro assigns a single value to an xel, when +you know it's from a PBM or PGM file. When it's from a PPM file, use +<B>PPM_ASSIGN</B>. + +The <B>PNM_EQUAL</B> macro checks two xels for equality. The +<B>PNM_FORMAT_TYPE</B> macro computes a +format type code from a format code. The format types are PBM, PGM, +PPM, and PAM. But note that PBM, PGM, and PPM each are two different +formats: a plain one and a raw one. So there are four format types, +but seven formats. <B>PNM_FORMAT_TYPE</B> does not work on the PAM +format code. + +<A NAME="lbAL"> </A> +<H3>INITIALIZATION</H3> + +<p><b>pnm_init</b> is identical to <b>pm_init()</b>. + +<A NAME="lbAM"> </A> +<H3>MEMORY MANAGEMENT</H3> + +<P><B>pnm_allocarray()</B> allocates space for an array of xels. +<B>pnm_freearray()</B> frees an array space allocated by +<B>pnm_allocarray()</B> or <B>pnm_readpnm()</B>. + +<P><B>pnm_allocrow()</B> allocates space for a row of a PNM image. +<B>pnm_freerow()</B> frees it. + + +<A NAME="lbAN"> </A> +<H3>READING PNM FILES</H3> + +<P><B>pnm_readpnminit()</B> is similar to <B>pnm_readpaminit()</B>, +but reads only PNM images and has a different parameter list. + +<P><B>pnm_readpnmrow()</B> is similar to <B>pnm_readpamrow()</B> +but only works on PNM images and has a different parameter list and returns +the row as an array of xels instead of tuples. + +<P><B>pnm_readpnm()</B> is similar to <B>pnm_readpam()</B> except that +it reads only PNM images and uses a different parameter list and +returns an array of rows such that <B>pnm_readpnmrow()</B> would +return rather than such that <B>pnm_readpamrow()</B> would return. + + +<A NAME="lbAO"> </A> +<H3>WRITING FILES</H3> + +<P><B>pnm_writepnminit()</B> is similar to <B>pnm_writepaminit()</B> +except that it can write only a PNM header and has a different +parameter list. + +<P><i>forceplain</i> is a binary value. True (nonzero) means to write +the image in the plain (ASCII) version of the selected format. False +(zero) means to write it in the raw (binary) version of the selected +format. See <a href="pnm.html">PNM format specification</a>. + +<P><B>pnm_writepnmrow()</B> is similar to <B>pnm_writepamrow()</B> +except that it works only on PNM images and has a different parameter +list and takes an array of xels instead of an array of tuples. See +the description of <I>forceplain </I> above. + +<P><B>pnm_writepnm()</B> is similar to <B>pnm_writepam()</B> except +that it works only on PNM image, has a different parameter list, and +takes an array of rows of xels instead of an array of rows of tuples. +See the description of <I>forceplain</I> above. + + +<A NAME="lbAP"> </A> +<H3>MISCELLANEOUS</H3> + +<P> <B>pnm_check()</B> is similar to <B>pnm_checkpam()</B> except it +works only on PNM images. + +<P><B>pnm_check()</B> is identical to <B>ppm_check()</B>. + +<A NAME="lbAQ"> </A> +<H3>PNM FORMAT PROMOTION</H3> + +<B>pnm_promoteformatrow()</B> promotes a row of xels from one maxval +and format to a new set. Use this when you are combining multiple +anymaps of different types - just take the maximum of the maxvals and +the maximum of the formats, and promote them all to that. + +<P><B>pnm_promoteformat()</B> promotes an entire anymap. + + +<A NAME="lbAR"> </A> +<H3>PNM XEL MANIPULATION</H3> + +<B>pnm_whitexel()</B> and <B>pnm_blackxel()</B> return a white or +black xel, respectively, for the given <I>maxval</I> and +<I>format</I>. + +<P><B>pnm_invertxel()</B> inverts an xel. + +<P><B>pnm_backgroundxelrow()</B> figures out an appropriate background +xel based on the row of xels <I>xelrow</I>, which is <I>cols</I> xels +wide, has maxval <I>maxval</I>, and represents an image with format +<I>format</I>. + +<P>This estimate works best when the row is the top or bottom row of +the image. + +<P><B>pnm_backgroundxel()</B> does the same thing as +<B>pnm_backgroundxelrow()</B>, except based on an entire image instead +of just one row. This tends to do a slightly better job than +<B>pnmbackgroundxelrow()</B>. + +<A NAME="lbAS"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="libnetpbm.html">Libnetpbm</A></B>, +<B><A HREF="libnetpbm_ug.html">Libnetpbm User's Guide</A></B>, +<B><A HREF="libnetpbm_dir.html">Libnetpbm Directory</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="libpbm.html">libpbm</A></B>, +<B><A HREF="libpgm.html">libpgm</A></B>, +<B><A HREF="libppm.html">libppm</A></B> + +<A NAME="lbAT"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> + <LI><A HREF="#lbAB">NAME</A> + <LI><A HREF="#lbAD">SYNOPSIS</A> + <LI><A HREF="#lbAE">DESCRIPTION</A> + <UL> + <LI><A HREF="#lbAI">PNM TYPES AND CONSTANTS</A> + <LI><A HREF="#lbAJ">PNM XEL MANIPULATIONS</A> + <LI><A HREF="#lbAK">The </A> + <LI><A HREF="#lbAL">INITIALIZATION</A> + <LI><A HREF="#lbAM">MEMORY MANAGEMENT</A> + <LI><A HREF="#lbAN">READING PNM FILES</A> + <LI><A HREF="#lbAO">WRITING FILES</A> + <LI><A HREF="#lbAP">MISCELLANEOUS</A> + <LI><A HREF="#lbAQ">PNM FORMAT PROMOTION</A> + <LI><A HREF="#lbAR">PNM XEL MANIPULATION</A> + </UL> + <LI><A HREF="#lbAS">SEE ALSO</A> + <LI><A HREF="#lbAT">AUTHOR</A> + </UL> +</BODY> +</HTML> diff --git a/libppm.html b/libppm.html new file mode 100644 index 00000000..3d83709d --- /dev/null +++ b/libppm.html @@ -0,0 +1,823 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>User manual for old ppm functions</TITLE> +<META NAME="manual_section" CONTENT="3"> +</HEAD> +<BODY> +<H1>libppm</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +libppm - functions for PPM programs + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>#include <<A HREF="file:/usr/include/ppm.h">ppm.h</A>></B> + +<P> +<B>void ppm_init(</B><B>int *</B> <I>argcP</I><B>,</B> + <B>char *</B> <I>argv</I><B>[]</B><B>);</B> + +<P> +<B>pixel ** ppm_allocarray(</B> + +<B>int </B><I>cols</I><B>,</B><B>int</B> <I>rows</I><B>);</B> + +<P> +<B>pixel * ppm_allocrow(</B><B>int</B> <I>cols</I><B>);</B> + +<P> +<B>void ppm_freearray(</B><B>pixel **</B> <I>pixels</I><B>,</B> + <B>int</B> <I>rows</I><B>);</B> + +<P> +<B>void ppm_freerow(</B><B>pixel *</B> <I>pixelrow</I><B>);</B> + +<P> +<B>void ppm_readppminit(</B><B>FILE *</B> <I>fp</I><B>,</B> + <B>int *</B> <I>colsP</I><B>,</B> + <B>int *</B> <I>rowsP</I><B>,</B> + +<B>pixval *</B> <I>maxvalP</I><B>,</B><B>int *</B> <I>formatP</I><B> );</B> + +<P> +<B>void ppm_readppmrow(</B><B>FILE *</B><I>fp</I><B>,</B> + <B>pixel *</B> <I>pixelrow</I><B>,</B> + <B>int </B><I>cols</I><B>,</B> + <B>pixval </B><I>maxval</I><B>,</B> + <B>int </B><I>format</I><B>);</B> + +<P> +<B>pixel ** ppm_readppm(</B><B>FILE *</B> <I>fp</I><B>,</B> + <B>int *</B> <I>colsP</I><B>,</B> + <B>int *</B> <I>rowsP</I><B>,</B> + <B>pixvalP *</B> <I>maxvalP</I><B>);</B> + +<P> +<B>void ppm_writeppminit(</B><B>FILE * <i>fp</i>,</B> + <B>int</B> <I>cols</I><B>,</B> + <B>int</B> <I>rows</I><B>,</B> + <B>pixval</B> <I>maxval</I><B>,</B> + <B>int</B> <I>forceplain</I><B>);</B> + +<P> +<B>void ppm_writeppmrow(</B><B>FILE *</B> <I>fp</I><B>,</B> + <B>pixel *</B> <I>pixelrow</I><B>,</B> + <B>int</b> <i>cols</i><B>,</B> + <B>pixval</B> <I>maxval</I><B>,</B> + <B>int</B> <I>forceplain</I><B>);</B> + +<P> +<B>void ppm_writeppm(</B><B>FILE *</B> <I>fp</I><B>,</B> + <B>pixel **</B> <I>pixels</I><B>,</B> + <B>int</B> <I>cols</I><B>,</B> + <B>int</B> <I>rows</I><B>,</B> + <B>pixval</B> <I>maxval</I><B>,</B> + <B>int</B> <I>forceplain</I><B>);</B> + +<P> +<B>void ppm_writeppm(</B><B>FILE *</B> <I>fp</I><B>,</B> + <B>pixel **</B> <I>pixels</I><B>,</B> + <B>int</B> <I>cols</I><B>,</B> + <B>int</B> <I>rows</I><B>,</B> + <B>pixval</B> <I>maxval</I><B>,</B> + <B>int</B> <I>forceplain</I><B>);</B> + +<P> +<B>void ppm_nextimage(</B><B>FILE *</B> <I>file</I><B>,</B> + <B>int * const</B> <I>eofP</I><B>);</B> + +<P> +<B>void ppm_check(</B><B>FILE *</B> <I>file</I><B>,</B> + <B>const enum pm_check_type</B> <I>check_type</I><B>,</B> + <B>const int</B> <I>format</I><B>,</B> + <B>const int</B> <I>cols</I><B>,</B> + <B>const int</B> <I>rows</I><B>,</B> + <B>const int</B> <I>maxval</I><B>,</B> + +<BR> + +<B>enum pm_check_code * const</B> <I>retval</I><B>);</B> + +<P> +<B>typedef ... pixel;</B> + +<B>typedef ... pixval;</B> + +<P> +<B>#define PPM_MAXMAXVAL ...</B> + +<P> +<B>#define PPM_OVERALLMAXVAL ...</B> + +<P> +<B>#define PPM_FORMAT ...</B> + +<P> +<B>#define RPPM_FORMAT ...</B> + +<P> +<B>#define PPM_TYPE PPM_FORMAT</B> + +<P> +<B>#define</B> <B>PPM_FORMAT_TYPE(</B><I>format</I><B>)</B> <B>...</B> + +<P> +<B>extern pixval ppm_pbmmaxval;</B> + +<P> +<B>pixval PPM_GETR(pixel</B> <I>p</I><B>)</B> + +<p> +<B>pixval PPM_GETG(pixel</B> <I>p</I><B>)</B> + +<p> +<B>pixval PPM_GETB(pixel</B> <I>p</I><B>)</B> + +<P> +<B>void PPM_ASSIGN(pixel</B> <I>p</I><B>,</B> + <B>pixval</B> <I>red</I><B>,</b> + <b>pixval</B> <I>grn</I><B>,</b> + <b>pixval</B> <I>blu</I><B>)</B> + +<P> +<B>int PPM_EQUAL(pixel</B> <I>p</I><B>,</b> + <b>pixel</B> <I>q</I><B>)</B> + +<P> +<B>int PPM_ISGRAY(pixel</B> <I>p</I><B>)</B> + +<P> +<B>void</b> + <b>PPM_DEPTH(pixel</B> <I>newp</I><B>,</b> + <b>pixel</B> <I>p</I><B>,</B> + <B>pixval</B> <I>oldmaxval</I><B>,</b> + <b>pixval</B> <I>newmaxval</I><B>)</B> + +<P> +<B>pixel ppm_parsecolor(char *</B> <I>colorname</I><B>,</b> + <b>pixval</B> <I>maxval</I><B>)</B> + +<P> +<B>char * ppm_colorname(pixel *</B> <I>colorP</I><B>,</b> + <b>pixval</B> <I>maxval</I><B>,</b> + <b>int</B> <I>hexok</I><B>)</B> + +<P> +<B>void ppm_readcolornamefile(</b> + <b>const char *</b><i>fileName</i>, + <b>int</b> <i>mustOpen</i>, + <b>colorhash_table *</b> <i>chtP</i>, + <b>const char ***</b> <i>colornamesP</i> + <b>)</b> + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>These library functions are part of <a href="index.html">Netpbm</a>. + +<A NAME="lbAE"> </A> +<H3>TYPES AND CONSTANTS</H3> + +Each <B>pixel</B> contains three <B>pixval</B>s, each of which should +contain only the values between <B>0</B> and <B>PPM_MAXMAXVAL</B>. +<B>ppm_pbmmaxval</B> is the maxval used when a PPM program reads a PBM +file. Normally it is 1; however, for some programs, a larger value +gives better results. + + +<H3 id="manipulating_pixels">MANIPULATING PIXELS</H3> + +<p>The macros <B>PPM_GETR</B>, <B>PPM_GETG</B>, and <B>PPM_GETB</B> +retrieve the red, green, or blue sample, respectively, from the given +pixel. + +<P>The <B>PPM_ASSIGN</B> macro assigns the given values to the red, +green, and blue samples of the given pixel. + +<P>The <B>PPM_EQUAL</B> macro tests two pixels for equality. + +<P>The <B>PPM_ISGRAY</B> macro tests a pixel for being gray. It +returns true if and only if the color of pixel <i>p</i> is black, +white, or gray. + +<P>The <B>PPM_DEPTH</B> macro scales the colors of pixel <I>p</I> +according the old and new maxvals and assigns the new values to +<I>newp</I>. It is intended to make writing ppmtowhatever easier. + +<P>The <B>PPM_LUMIN</B>, <B>PPM_CHROM_R</B>, and <B>PPM_CHROM_B</B> +macros determine the luminance, red chrominance, and blue chrominance, +respectively, of the pixel <I>p</I>. The scale of all these values is +the same as the scale of the input samples (i.e. 0 to maxval for +luminance, -maxval/2 to maxval/2 for chrominance). + +<P>Note that the macros do it by floating point multiplication. If +you are computing these values over an entire image, it may be +significantly faster to do it with multiplication tables instead. +Compute all the possible products once up front, then for each pixel, +just look up the products in the tables. + +<A NAME="lbAG"> </A> +<H3>INITIALIZATION</H3> + +<P><b>ppm_init()</b> is identical to <b>pm_init</b>. + +<A NAME="lbAH"> </A> +<H3>MEMORY MANAGEMENT</H3> + +<B>ppm_allocarray()</B> allocates an array of pixels. + +<P><B>ppm_allocrow()</B> allocates a row of the given number of +pixels. + +<P><B>ppm_freearray()</B> frees the array allocated with +<B>ppm_allocarray()</B> containing the given number of rows. + +<P><B>ppm_freerow()</B> frees a row of pixelss allocated with +<B>ppm_allocrow()</B>. + +<A NAME="lbAI"> </A> +<H3>READING FILES</H3> + +<P>If a function in this section is called on a PBM or PGM format +file, it translates the PBM or PGM file into a PPM file on the fly and +functions as if it were called on the equivalent PPM file. The +<I>format</I> value returned by <B>ppm_readppminit()</B> is, however, +not translated. It represents the actual format of the PBM or PGM +file. + +<P><B>ppm_readppminit()</B> reads the header of a PPM file, returning +all the information from the header and leaving the file positioned +just after the header. + +<P><B>ppm_readppmrow()</B> reads a row of pixels into the +<I>pixelrow</I> array. <I>format</I>, <I>cols</I>, and <I>maxval</I> +are the values returned by <B>ppm_readppminit()</B>. + +<P><B>ppm_readppm()</B> reads an entire PPM image into memory, +returning the allocated array as its return value and returning the +information from the header as <I>rows</I>, <I>cols</I>, and +<I>maxval</I>. This function combines <B>ppm_readppminit()</B>, +<B>ppm_allocarray()</B>, and <B>ppm_readppmrow()</B>. + + +<A NAME="lbAJ"> </A> +<H3>WRITING FILES</H3> + +<B>ppm_writeppminit()</B> writes the header for a PPM file and leaves +it positioned just after the header. + +<P><I>forceplain</I> is a logical value that tells +<B>ppm_writeppminit() </B> to write a header for a plain PPM format +file, as opposed to a raw PPM format file. + +<P><B>ppm_writeppmrow()</B> writes the row <I>pixelrow</I> to a PPM +file. For meaningful results, <I>cols</I>, <I>maxval</I>, and +<I>forceplain</I> must be the same as was used with +<B>ppm_writeppminit()</B>. + +<P><B>ppm_writeppm()</B> write the header and all data for a PPM +image. This function combines <B>ppm_writeppminit()</B> and +<B>ppm_writeppmrow()</B>. + +<H3 id="miscellaneous">MISCELLANEOUS</H3> + +<P><B>ppm_nextimage()</B> positions a PPM input file to the next image +in it (so that a subsequent <B>ppm_readppminit()</B> reads its +header). + +<P><B>ppm_nextimage()</B> is analogous to <B>pbm_nextimage()</B>, but +works on PPM, PGM, and PBM files. + +<P><B>ppm_check() </B> checks for the common file integrity error +where the file is the wrong size to contain all the image data. + +<P><B>ppm_check() </B> is analogous to <B>pbm_check()</B>, but works +on PPM, PGM, and PBM files. + + +<h3 id="color">COLOR</h3> + +<H4>Luminance, Chrominance (YcbCr)</H4> + +<pre> +<code> + float PPM_LUMIN(pixel p); + float PPM_CHROM_B(pixel p); + float PPM_CHROM_R(pixel p); +</code> +</pre> + +<p><B>PPM_LUMIN</B> takes a <b>pixel</b> as an argument and returns +the luminance of that pixel, with the same maxval as the pixel +(e.g. if the pixel's maxval is 255, a <b>PPM_LUMIN</b> value of 255 +means fully luminant). + +<p><b>PPM_CHROM_B</b> and <b>PPM_CHROM_R</b> are similar, for the red +and blue chrominance values. + + +<PRE> +<CODE> + pixel + ppm_color_from_ycbcr(unsigned int y, + int cb, + int cr); +</CODE> +</PRE> + +<p><b>ppm_color_from_ycbcr()</b> converts in the other direction. +Given luminance and chrominance, it returns a pixel value. + +<h4 id="hsv">Hue, Saturation, Value (HSV)</h4> + +<pre> +<code> + struct hsv { + double h; /* hue (degrees) 0..360 */ + double s; /* saturation (0-1) */ + double v; /* value (0-1) */ + }; +</code> +</pre> + +<pre> +<code> + pixel + ppm_color_from_hsv(struct hsv const hsv, + pixval const maxval); +</code> +</pre> + +<pre> +<code> + struct hsv + ppm_hsv_from_color(pixel const color, + pixval const maxval); +</code> +</pre> + +<p>These convert a color between from <b>pixel</b> (RGB) form and HSV. + +<pre> +<code> + pixval + ppm_saturation(pixel const p, + pixval const maxval); +</code> +</pre> + +<p>This gives you the saturation of a color, as a pixval. (e.g. if +the saturation of <i>p</i> is 50% and <i>maxval</i> is 100, +<b>ppm_saturation()</b> returns 50). + + +<h4 id="berlinkay">Berlin-Kay Color</h4> + +<p>Brent Berlin and Paul Kay in 1969 did a study which identified +a set of 11 basic colors people universally recognize. They are: + +<ul> +<li>black +<li>gray +<li>white +<li>red +<li>orange +<li>yellow +<li>green +<li>blue +<li>violet +<li>purple +<li>brown +</ul> + +<p>The <b>bk_color</b> type represents a color from this set: + +<pre> +<code> + typedef enum { + BKCOLOR_BLACK = 0, + BKCOLOR_GRAY, + BKCOLOR_WHITE, + BKCOLOR_RED, + BKCOLOR_ORANGE, + BKCOLOR_YELLOW, + BKCOLOR_GREEN, + BKCOLOR_BLUE, + BKCOLOR_VIOLET, + BKCOLOR_PURPLE, + BKCOLOR_BROWN + } bk_color; +</code> +</pre> + +<p>You can use this as an index of an array, in which case you might also +want macro <b>BKCOLOR_COUNT</b>, which is the number of colors in the +set (11). + +<p>To translate between the <b>bk_color</b> type and the English names +of the colors, use <b>ppm_bk_color_from_name()</b> and +<b>ppm_name_from_bk_color()</b>: + +<pre> +<code> + bk_color + ppm_bk_color_from_name(const char * name); + + const char * + ppm_name_from_bk_color(bk_color bkColor); +</code> +</pre> + + +<p><b>ppm_bk_color_from_color()</b> tells you to which Berlin-Kay color +a certain color is closest, by way of a fuzzy color matching algorithm: + +<pre> +<code> + bk_color + ppm_bk_color_from_color(pixel color, + pixval maxval); +</code> +</pre> + +<p><i>maxval</i> is the maxval on which <i>color</i> is based. + +<p><b>ppm_color_from_bk_color()</b> converts the opposite way: given +a Berlin-Kay color, it gives the color, in <b>pixel</b> form, that best +represents it. + +<pre> +<code> + pixel + ppm_color_from_bk_color(bk_color bkColor, + pixval maxval); +</code> +</pre> + +<p><i>maxval</i> is the maxval on which the returned color is based. + +<p>All of the facilities in this section were new in Netpbm 10.34 +(June 2006). + +<H3 id="colorname">COLOR NAMES</H3> + +<A NAME="rgb.txt"> </a> +<h4>System Color Dictionary</h4> + +<P>Netpbm uses the system's X11 color dictionary (usually in +<b>/usr/lib/X11/rgb.txt</b>). This is the same file the X Window +System typically uses to associate colors with their names. + +<p>The color dictionary that Netpbm uses is in the file whose name is +the value of the <B>RGBDEF</B> environment variable. If <B>RGBDEF</B> +is not set, Netpbm defaults to the first existing file from this list: + +<ol> +<li><b>/usr/lib/X11/rgb.txt</b> +<li><b>/usr/openwinlib/rgb.txt</b> +<li><b>/usr/X11R6/lib/X11/rgb.txt</b> +</ol> + +<P>You can see the color names from a typical X11 color dictionary, +which is probably very close to what is on your system, along with the +colors, <a +href="http://www.swiss.ai.mit.edu/~jaffer/Color/x11.pdf">here</a>. <a +href="http://www.swiss.ai.mit.edu/~jaffer/Color/Dictionaries.html">This +website</a> shows a bunch of other versions you could use. + +<P>Netpbm is packaged with a color dictionary. A standard Netpbm +installation installs this file as "misc/rgb.txt" in the Netpbm +directory. This color dictionary has colors from everywhere the +Netpbm maintainer could find them, and is a superset of XFree 86's +color dictionary. + +<H4 id="ppm_parsecolor">ppm_parsecolor</H4> + +<p><B>ppm_parsecolor()</B> interprets a color specification and returns a +pixel of the color that it indicates. The color specification is +ASCII text, in one of these formats: + +<ul> + +<li>a name, as defined in the <a href="#rgb.txt">system color dictionary +</a>. + +<LI> An X11-style hexadecimal specifier: +<tt>rgb:<i>r</i>/<i>g</i>/<i>b</i></tt>, where <i>r</i>, <i>g</i>, and +<i>b</i> are each 1- to 4-digit hexadecimal numbers. For each, the maxval +is the maximum number that can be represented in the number of hexadecimal +digits given. Example: <tt>rgb:01/ff/8000</tt> specifies 1/255 red +intensity, maximum green intensity, and about half blue intensity. + +<LI> An X11-style decimal specifier: +<tt>rgbi:<i>r</i>/<i>g</i>/<i>b</i></tt>, where <i>r</i>, <i>g</i>, +and <i>b</i> are floating point numbers from 0 to 1. + +<li>an old-X11-style hexadecimal triple: <tt>#rgb</tt>, <tt>#rrggbb</tt>, +<tt>#rrrgggbbb</tt>, or <tt>#rrrrggggbbbb</tt>. + +<li>A triplet of decimal floating point numbers from 0.0 to 1.0, +representing red, green, and blue intensities respectively, separated +by commas. E.g. <tt>1.0,0.5,.25</tt>. This is for backwards compatibility; +it was in use before MIT came up with the similar and preferred rgbi style). + +</ul> + +<P>If the color specification does not conform to any of these +formats, including the case that it is a name, but is not in the +system color dictionary, <B>ppm_parsecolor()</B> <a +href="error.html">throws an error</a>. + +<h4 id="ppm_colorname">ppm_colorname</h4> + +<P><B>ppm_colorname()</B> returns a string that describes the color +of the given pixel. If a <a href="#rgb.txt">system color dictionary</a> +is available and the color appears in it, <B>ppm_colorname()</B> +returns the name of the color from the file. If the color does not +appear in a system color dictionary and <I>hexok</I> is true, +<B>ppm_colorname()</B> returns a hexadecimal color specification +triple (#rrggbb). If a system color dictionary is available but the +color does not appear in it and <I>hexok</I> is false, +<B>ppm_colorname()</B> returns the name of the closest matching color +in the color file. Finally, if there is no system color dictionary +available and <I>hexok</I> is false, <B>ppm_colorname()</B> fails and +exits the program with an error message. + +<P>The string returned is in static libppm library storage which is +overwritten by every call to <B>ppm_colorname()</B>. + + +<h4 id="ppm_readcolornamefile">ppm_readcolornamefile</h4> + +<P><b>ppm_readcolornamefile()</b> reads the entire contents of the color +dictionary in the file named <i>fileName</i> into data structures you +can use to access it easily. + +<p>The function returns all the color names as an array of +null-terminated strings. It mallocs the space for this array and +returns its address at <i>colornamesP</i>. +<b>(*colornamesP)[</b><i>i</i><b>]</b> is the address of the first +character in the null-terminated string that is the name of the +<i>i</i>th color in the dictionary. + +<p>The function also returns a <b>colorhash_table</b> (see <a +href="#colorindex">COLOR INDEXING</a>) that matches all these color names +up to the colors they represent. It mallocs the space for the +<b>colorhash_table</b> and returns its address at <i>chtP</i>. The +number that the <b>colorhash_table</b> associates with each color is +the index into the color name array described above of the name of +that color. + +<p>You may specify a null pointer for <i>fileName</i> to indicate the +default color dictionary. + +<p><i>mustOpen</i> is a boolean. If it is nonzero, the function fails +and aborts the program if it is unable to open the specified color dictionary +file. If it is zero, though, it simply treats an unopenable color dictionary +as an empty one. The colorhash and color name array it returns contain no +colors or names. + +<p><b>ppm_readcolornamefile()</b> was new in Netpbm 10.15 (April 2003). + + +<A NAME="colorindex"> </A> +<H3>COLOR INDEXING</H3> + +<P>Sometimes in processing images, you want to associate a value with +a particular color. Most often, that's because you're generating a +color mapped graphics format. In a color mapped graphics format, the +raster contains small numbers, and the file contains a color map that +tells what color each of those small numbers refers to. If your image +has only 256 colors, but each color takes 24 bits to describe, this +can make your output file much smaller than a straightforward RGB +raster would. + +<P>So, continuing the above example, say you have a <B>pixel</B> value +for chartreuse and in your output file and you are going to represent +chartreuse by the number 12. You need a data structure that allows +your program quickly to find out that the number for a chartreuse +<B>pixel</B> is 12. Netpbm's color indexing data types and functions +give you that. + +<P><B>colorhash_table</B> is a C data type that associates an integer +with each of an arbitrary number of colors. It is a hash table, so it +uses far less space than an array indexed by the color's RGB values +would. + +<P>The problem with a <B>colorhash_table</B> is that you can only look +things up in it. You can't find out what colors are in it. So Netpbm +has another data type for representing the same information, the +poorly but historically named <B>colorhist_vector</B>. A +<B>colorhist_vector</B> is just an array. Each entry represents a +color and contains the color's value (as a <B>pixel</B>) and the +integer value associated with it. The entries are filled in starting +with subscript 0 and going consecutively up for the number of colors +in the histogram. + +<P>(The reason the name is poor is because a color histogram is only +one of many things that could be represented by it). + +<P><B>colorhash_table ppm_alloccolorhash()</B> + +<P>This creates a <B>colorhash_table</B> using dynamically allocated +storage. There are no colors in it. If there is not enough storage, +it exits the program with an error message. + +<P><B>void ppm_freecolorhash()</B> + +<P>This destroys a <B>ppm_freecolorhash </B> and frees all the storage +associated with it. + +<P><B>int ppm_addtocolorhash( colorhash_table cht, const pixel * const +colorP, const int value)</B> + +<P>This adds the specified color to the specified <B>colorhash_table +</B> and associates the specified value with it. + +<P>You must ensure that the color you are adding isn't already present +in the <B>colorhash_table</B>. + +<P>There is no way to update an entry or delete an entry from a +<B>colorhash_table</B>. + +<P><B>int ppm_lookupcolor( const colorhash_table cht, const pixel * +const colorP )</B> + +<P>This looks up the specified color in the specified +<B>colorhash_table</B>. It returns the integer value associated with +that color. + +<P>If the specified color is not in the hash table, the function +returns -1. (So if you assign the value -1 to a color, the return +value is ambiguous). + +<P><B>colorhist_vector ppm_colorhashtocolorhist( const colorhash_table cht,</B> + +<B>const int ncolors )</B> + +<P>This converts a <B>colorhash_table</B> to a +<B>colorhist_vector</B>. The return value is a new +<B>colorhist_vector</B> which you must eventually free with +<B>ppm_freecolorhist()</B>. + +<P><B>ncolors</B> is the number of colors in <B>cht</B>. If it has +more colors than that, <B>ppm_colorhashtocolorhist</B> does not create +a <B>colorhist_vector</B> and returns NULL. + +<P><B>colorhash_table ppm_colorhisttocolorhash( const colorhist_vector chv, +const int ncolors ) </B> + +<P>This poorly named function does <em>not</em> convert from a +<B>colorhist_vector</B> to a <B>colorhash_table</B>. + +<P>It does create a <B>colorhash_table</B> based on a +<B>colorhist_vector</B> input, but the integer value for a given color +in the output is not the same as the integer value for that same color +in the input. <B>ppm_colorhisttocolorhash()</B> ignores the integer +values in the input. In the output, the integer value for a color is +the index in the input <B>colorhist_vector</B> for that color. + +<P>You can easily create a color map for an image by running +<B>ppm_computecolorhist() </B> over the image, then +<B>ppm_colorhisttocolorhash()</B> over the result. Now you can use +<B>ppm_lookupcolor()</B> to find a unique color index for any pixel in +the input. + +<P>If the same color appears twice in the input, +<B>ppm_colorhisttocolorhash() </B> exit the program with an error +message. + +<P><B>ncolors</B> is the number of colors in <B>chv</B>. + +<P>The return value is a new <B>colorhash_table</B> which you must +eventually free with <B>ppm_freecolorhash()</B>. + +<A NAME="lbAN"> </A> +<H3>COLOR HISTOGRAMS</H3> + +<P>The Netpbm libraries give you functions to examine a Netpbm image +and determine what colors are in it and how many pixels of each color +are in it. This information is known as a color histogram. Netpbm +uses its <B>colorhash_table</B> data type to represent a color +histogram. + +<P><B>colorhash_table ppm_computecolorhash( pixel ** const pixels, +const int cols, const int rows, const int maxcolors, int* const colorsP )</B> + +<P>This poorly but historically named function generates a +<B>colorhash_table</B> whose value for each color is the number of +pixels in a specified image that have that color. (I.e. a color +histogram). As a bonus, it returns the number of colors in the image. + +<P>(It's poorly named because not all <B>colorhash_table</B>s are +color histograms, but that's all it generates). + +<P><B>pixels</B>, <B>cols</B>, and <B>rows</B> describe the input +image. + +<P><B>maxcolors</B> is the maximum number of colors you want +processed. If there are more colors that that in the input image, +<B>ppm_computecolorhash()</B> returns NULL as its return value and +stops processing as soon as it discovers this. This makes it run +faster and use less memory. One use for <B>maxcolors</B> is when you +just want to find out whether or not the image has more than N colors +and don't want to wait to generate a huge color table if so. If you +don't want any limit on the number of colors, specify +<B>maxcolors</B>=<B>0</B>. + +<P><B>ppm_computecolorhash()</B> returns the actual number of colors +in the image as <B>*colorsP</B>, but only if it is less than or equal +to <B>maxcolors</B>. + +<P><B>colorhash_table ppm_computecolorhash2( FILE * const ifp, +const int cols, const int rows, const pixval maxval, const int format,</B> + +<B>const int maxcolors, int* const colorsP )</B> + +<P>This is the same as <B>ppm_computecolorhash()</B> except that +instead of feeding it an array of pixels in storage, you give it an +open file stream and it reads the image from the file. The file must +be positioned after the header, at the raster. Upon return, the file +is still open, but its position is undefined. + +<P><B>maxval</B> and <B>format</B> are the values for the image +(i.e. information from the file's header). + +<P><B>colorhist_vector ppm_computecolorhist( pixel ** pixels, +int cols, int rows, int maxcolors, int * colorsP )</B> + +<P>This is like <B>ppm_computecolorhash()</B> except that it creates a +<B>colorhist_vector</B> instead of a <B>colorhash_table</B>. + +<P>If you supply a nonzero <B>maxcolors</B> argument, that is the +maximum number of colors you expect to find in the input image. If +there are more colors than you say in the image, +<B>ppm_computecolorhist()</B> returns a null pointer as its return +value and nothing meaningful as <B>*colorsP</B>. + +<P>If not, the function returns the new <B>colorhist_vector </B> as +its return value and the actual number of colors in the image as +<B>*colorsP</B>. The returned array has space allocated for the +specified number of colors regardless of how many actually exist. The +extra space is at the high end of the array and is available for your +use in expanding the <B>colorhist_vector</B>. + +<P>If you specify <B>maxcolors</B>=<B>0</B>, there is no limit on the +number of colors returned and the return array has space for 5 extra +colors at the high end for your use in expanding the +<B>colorhist_vector</B>. + +<P><B>colorhist_vector ppm_computecolorhist2( FILE * ifp, +int cols, int rows, int maxcolors, pixval maxval, int format, +int * colorsP )</B> + +<P>This is the same as <B>ppm_computecolorhist()</B> except that +instead of feeding it an array of pixels in storage, you give it an +open file stream and it reads the image from the file. The file must +be positioned after the header, at the raster. Upon return, the file +is still open, but its position is undefined. + +<A NAME="lbAO"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="libpbm.html">libpbm</A></B> + +<A NAME="lbAP"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<UL> +<LI><A HREF="#lbAE">TYPES AND CONSTANTS</A> +<LI><A HREF="#manipulating_pixels">MANIPULATING PIXELS</A> +<LI><A HREF="#lbAG">INITIALIZATION</A> +<LI><A HREF="#lbAH">MEMORY MANAGEMENT</A> +<LI><A HREF="#lbAI">READING FILES</A> +<LI><A HREF="#lbAJ">WRITING FILES</A> +<LI><A HREF="#miscellaneous">MISCELLANEOUS</A> +<LI><A HREF="#color">COLOR</A> +<LI><A HREF="#colorname">COLOR NAMES</A> +<LI><A HREF="#colorindex">COLOR INDEXING</A> +<LI><A HREF="#lbAN">COLOR HISTOGRAMS</A> +</UL> +<LI><A HREF="#lbAO">SEE ALSO</A> +<LI><A HREF="#lbAP">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/libsystem.html b/libsystem.html new file mode 100644 index 00000000..db969303 --- /dev/null +++ b/libsystem.html @@ -0,0 +1,307 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title>Netpbm subroutine library: pm_system() subroutine</title> +<meta name="manual_section" content="3"> +</head> + +<body> +<h1>pm_system()</h1> +Updated: 17 October 2006 +<br> + +<h2>Name</h2> +pm_system - run a Netpbm program with program input and output + +<h2>Synopsis</h2> + +<pre> +#include <netpbm/pm_system.h> + +pm_system(void stdinFeeder(int, void *), + void * const feederParm, + void stdoutAccepter(int, void *), + void * const accepterParm, + const char * const shellCommand); +</pre> + +<h2>Example</h2> + +<p>This simple example converts a PNM image on Standard Input to a +JFIF (JPEG) image on Standard Output. In this case, +<b>pm_system()</b> is doing no more than <b>system()</b> would do. + +<pre> + pm_system(NULL, NULL, NULL, NULL, "pnmtojpeg"); +</pre> + + +<p>This example does the same thing, but moves the data through memory +buffers to illustrate use with memory buffers, and we throw in a stage +to shrink the image too: +<pre> +#include <netpbm/pm_system.h> + +char pnmData[100*1024]; /* Input file better be < 100K */ +char jfifData[100*1024]; +struct bufferDesc pnmBuffer; +struct bufferDesc jfifBuffer; +unsigned int jfifSize; + +pnmBuffer.size = fread(pnmData, 1, sizeof(pnmData), stdin); +pnmBuffer.buffer = pnmData; +pnmBuffer.bytesTransferredP = NULL; + +jfifBuffer.size = sizeof(jfifData); +jfifBuffer.buffer = jfifData; +jfifBuffer.bytesTransferredP = &jfifSize; + +pm_system(&pm_feed_from_memory, &pnmBuffer, + &pm_accept_to_memory, &jfifBuffer, + "pamscale .5 | pnmtojpeg"); + +fwrite(jfifData, 1, jfifSize, stdout); + +</pre> + + +<p>This example reads an image into libnetpbm PAM structures, then +brightens it, then writes it out, to illustrate use of <b>pm_system</b> +with PAM structures. +<pre> +#include <netpbm/pam.h> +#include <netpbm/pm_system.h> + +struct pam inpam; +struct pam outpam; +tuple ** inTuples; +tuple ** outTuples; +struct pamtuples inPamtuples; +struct pamtuples outPamtuples; + +inTuples = pnm_readpam(stdin, &inpam, sizeof(inpam)); + +outpam = inpam; + +inPamtuples.pamP = &inpam; +inPamtuples.tuplesP = &inTuples; +outPamtuples.pamP = &outpam; +outPamtuples.tuplesP = &outTuples; + +pm_system(&pm_feed_from_pamtuples, &inPamtuples, + &pm_accept_to_pamtuples, &outPamtuples, + "ppmbrighten -v 100"); + +outpam.file = stdout; +pnm_writepam(&outpam, outTuples); + +</pre> + + + +<h2>DESCRIPTION</H2> + +<p>This library function is part of <a href="index.html">Netpbm</a>. + +<p><b>pm_system()</b> is a lot like the standard C library +<b>system()</b> subroutine. It runs a shell and has that shell +execute a shell command that you specify. But <b>pm_system()</b> +gives you more control over the Standard Input and Standard Output of +that shell command than <b>system()</b>. <b>system()</b> passes to the +shell command as Standard Input and Output whatever is the Standard Input +and Output of the process that calls <b>system()</b>. But with +<b>pm_system()</b>, you specify as arguments subroutines to execute to +generate the shell command's Standard Input stream and to process the +shell command's Standard Output stream. + +<p>Your Standard Input feeder subroutine can generate the stream in +limitless ways. <b>pm_system()</b> gives it a file descriptor of a +pipe to which to write the stream it generates. <b>pm_system()</b> +hooks up the other end of that pipe to the shell command's Standard +Input. + +<p>Likewise, your Standard Output accepter subroutine can do anything +it wants with the stream it gets. <b>pm_system()</b> gives it a file +descriptor of a pipe from which to read the stream. +<b>pm_system()</b> hooks up the other end of that pipe to the shell +command's Standard Output. + +<p>The argument <i>stdinFeeder</i> is a function pointer that +identifies your Standard Input feeder subroutine. <b>pm_system()</b> +runs it in a child process and waits for that process to terminate (and +accepts its completion status) before returning. <i>feederParm</i> is +the argument that <b>pm_system()</b> passes to the subroutine; it is +opaque to <b>pm_system()</b>. + +<p>If you pass <i>stdinFeeder</i> = NULL, <b>pm_system()</b> simply +passes your current Standard Input stream to the shell command (as +<b>system()</b> would do), and does not create a child process. + +<p>The argument <i>stdoutAccepter</i> is a function pointer that +identifies your Standard Output accepter subroutine. +<b>pm_system()</b> calls it in the current process. +<i>accepterParm</i> is an argument analogous to <i>feederParm</i>. + +<p>If you pass <i>stdoutAccepter</i> = NULL, <b>pm_system()</b> simply +passes your current Standard Output stream to the shell command (as +<b>system()</b> would do. + +<p>The argument <i>shellCommand</i> is a null-terminated string +containing the shell command that the shell is to execute. It can be +any command that means something to the shell and can take a pipe for +Standard Input and Output. Example: + +<pre> +<kbd> +ppmbrighten -v 100 | pamdepth 255 | pamscale .5 +</kbd> +</pre> + +<b>pm_system()</b> creates a child process to run the shell and waits +for that process to terminate (and accepts its completion status) +before returning. + + +<h2>Applications</h2> + +<p>The point of <b>pm_system()</b> is to allow you write a C program that +uses other programs internally, as a shell script would. This is particularly +desirable with Netpbm, because Netpbm consists of a lot of programs that +perform basic graphic manipulations and you'd like to be able to build a +program that does a more sophisticated graphic manipulation by calling the +more basic Netpbm programs. These building block programs typically take +input from Standard Input and write output to Standard Output. + +<p>The obvious alternative is to use a higher level language -- Bourne Shell +or Perl, for example. But often you want your program to do manipulations +of your graphical data that are easier and more efficient in C. Or you want +to use the Netpbm subroutine library in your program. The Netpbm subroutine +library is a C-linkage library; the subroutines in it are not usable from a +Bourne Shell or Perl program. + +<p>A typical use of <b>pm_system()</b> is to place the contents of +some graphical image file in memory, run a Netpbm program against it, +and have what would ordinarily go into an output file in memory too, +for further processing. To do that, you can use the memory buffer +Standard Input feeder and Standard Output accepter described below. + +<p>If your program uses the Netpbm subroutine library to read, write, and +manipulate images, you may have an image in an array of PAM tuples. If you +want to manipulate that image with a Netpbm program (perhaps remap the +colors using <b>pnmremap</b>), you can use the pamtuple Standard Input +feeder and Standard Output acceptor described below. + +<h2>Broken Pipe Behavior</h2> + +<p>When you set up a shell command to take input from a pipe, as +you do with <b>pm_system()</b>, you need to understand how pipes work with +respect to the programs at either end of the pipe agreeing to how much +data is to be transferred. Here are some notes on that. + +<p>It is normal to read a pipe before the process on the other end has +written the data you hope to read, and it is normal to write to a pipe +before the process on the other end has tried to read your data. +Writes to a pipe can be buffered until the reading end requests the +data. A process reading or writing a pipe can block until the other +end is ready. Or a read or write can complete with an indication that +the other end is not ready at the moment and therefore no data, or +less data than was requested, was transferred. + +<p>The pipe is normally controlled by the writing end. When you read +from a pipe, you keep reading until the program on the other end of +the pipe closes it, and then you get an end-of-file indication. You then +normally close the reading end of the pipe, since it is no longer useful. + +<p>When you close the reading end of a pipe before getting the +end-of-file indication and the writer subsequently tries to write to +the pipe, that is an error condition for the writer. In a typical +default Unix environment, that error causes the writer to receive a +SIGPIP signal and that signal causes the writer process to terminate +abnormally. But if, alternatively, the writer has ordered that SIGPIPE +be blocked, ignored, or handled, the signal does not cause the death of +the writer. Instead, the write operation simply completes with an error +indication. + + +<h2>Standard Feeders And Acceptors</h2> + +<p>You can supply anything you like as a Standard Input feeder or +Standard Output acceptor, but the Netpbm subroutine library comes with +a few that perform commonly needed functions. + +<h3>Memory Buffer</h3> + +<p>These routines are for when you just want to treat an area of +memory as a file. If the shell command would ordinarily read a 513 +byte regular file from its Standard Input, you want it to take 513 bytes +from a certain address in your process' memory. Whatever bytes the +shell command wants to write to its output file you want it to store at +another address in your process' memory. + +<p>The Standard Input feeder for this is called <b>pm_feed_from_memory</b>. +The Standard Output accepter is <b>pm_accept_to_memory</b>. + +<p>For both of these, the argument is the address of a <b>struct +bufferDesc</b>, which is defined as follows: + +<pre> +struct bufferDesc { + unsigned int size; + unsigned char * buffer; + unsigned int * bytesTransferredP; +}; +</pre> + +<i>size</i> is the size of the memory buffer and <i>buffer</i> is its +location in memory (address). The Standard Input feeder will attempt +to feed the entire buffer to the shell command's Standard Input; the +Standard Output accepter will not accept any more data from the shell +command's Standard Output than will fit in the buffer. Both return +the actual amount of data read or written, in bytes, at the location +identified by <i>bytesTransferredP</i>. Unless +<b>bytesTransferredP</b> is NULL. + +<p>Because a process typically terminates abnormally when it is not +able to write everything to a pipe that it wanted to, +<i>bytesTransferredP</i> is not usually useful in the Standard Input feeder +case. + + +<h3>Pamtuple</h3> + +<p>These routines are for when you have images in memory in the data +structures used by the PAM family of subroutines in the Netpbm library -- +i.e. struct PAM and an array of struct tuple. With these routines, you +can run a Netpbm program against such an image just as you would against +the same image in a regular file. + +<p>The Standard Input feeder for this is called +<b>pm_feed_from_pamtuples</b>. The Standard Output accepter is +<b>pm_accept_to_pamtuples</b>. + +<p>For both of these, the argument is the address of a <b>struct +pamtuples</b>, which is defined as follows: + +<pre> +struct pamtuples { + struct pam * pamP; + tuple *** tuplesP; +}; +</pre> + +<p>For the Standard Input feeder, you supply a struct pam, valid up +through the <i>tuple_type</i> member (except it doesn't matter what +the <i>file</i> member is) and array of tuples. + +<p>For the Standard Output Accepter, you supply only space in memory +for the struct pam and the address of the tuple array. The routine +fills in the struct pam up through the <i>tuple_type</i> member +(except leaves the <i>file</i> member undefined) and allocates space +for the tuple array with malloc(). You are responsible for freeing +that memory. + +<h2>HISTORY</h2> +<b>pm_system()</b> was introduced in Netpbm 10.13 (January 2003). + +</body> +</html> diff --git a/libtmpfile.html b/libtmpfile.html new file mode 100644 index 00000000..39671b1f --- /dev/null +++ b/libtmpfile.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> <head> +<title>Netpbm subroutine library: pm_tmpfile() function</title> +<meta name="manual_section" content="3"> +</head> + +<body> +<h1>pm_tmpfile()</h1> +Updated: 22 July 2004 +<br> +<h2>NAME</h2> +pm_tmpfile() - tempfile creation routine using TMPFILE +<h2>SYNOPSIS</h2> + +<pre> +#include <netpbm/pm.h> + +FILE * +pm_tmpfile(void); +</pre> + +<h2>EXAMPLE</h2> + +<p>This simple example creates a temporary file, writes "hello world" +to it, then reads back and prints those contents. + +<pre> +#include <netpbm/pm.h> + +FILE * myfile; + +myfile = pm_tmpfile(); + +fprintf(myfile, "hello world\n"); + +fseek(myfile, 0, SEEK_SET); + +fread(buffer, sizeof(buffer), 1, myfile); + +fprintf(STDOUT, "temp file contains '%s'\n", buffer); + +fclose(myfile); + +</pre> + +<h2>DESCRIPTION</H2> + +<p>This library function is part of <a href="index.html">Netpbm</a>. + +<p><b>pm_tmpfile()</b> creates and opens an unnamed temporary file. +It is basically the same thing as the standard C library +<b>tmpfile()</b> function, except that it uses the <b>TMPFILE</B> +environment variable to decide where to create the temporary file. +If <b>TMPFILE</b> is not set or is set to something unusable (e.g. +too long), <b>pm_tmpfile()</b> falls back to the value of the +standard C library symbol <b>P_tmpdir</b>, just like <b>tmpfile()</b>. + +<p>Unlike <b>tmpfile()</b>, <b>pm_tmpfile()</b> never returns NULL. +If it fails, it issues a message to Standard Error and aborts the +program, like most libnetpbm routines do. + +<h2>HISTORY</h2> +<b>pm_tmpfile()</b> was introduced in Netpbm 10.20 (January 2004). + +</body> +</html> diff --git a/lispmtopgm.html b/lispmtopgm.html new file mode 100644 index 00000000..aa3875e9 --- /dev/null +++ b/lispmtopgm.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Lispmtopgm User Manual</TITLE></HEAD> +<BODY> +<H1>lispmtopgm</H1> +Updated: 06 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +lispmtopgm - convert a Lisp Machine bitmap file to PGM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>lispmtopgm</B> +[<I>lispmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>listpmfile</b> reads a Lisp Machine bitmap as input and +produces a PGM image as output. + +<P>This is the file format written by the tv:write-bit-array-file +function on TI Explorer and Symbolics lisp machines. + +<P>Multi-plane bitmaps on lisp machines are color; but the Lispm image +file format does not include a color map, so we must treat it as a +monochrome instead and produce PGM. This is unfortunate. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmtolispm.html">pgmtolispm</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +The Lispm bitmap file format is a bit quirky; Usually the image in the file +has its width rounded up to the next higher multiple of 32, but not always. +If the width is not a multiple of 32, we don't deal with it properly, but +because of the Lispm microcode, such arrays are probably not image data +anyway. + +<P>Also, the Lispm code for saving bitmaps has a bug, in that if you +are writing a bitmap which is not mod32 across, the file may be up to +7 bits too short! They round down instead of up, and we don't handle +this bug gracefully. + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<P>Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. + + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/macptopbm.html b/macptopbm.html new file mode 100644 index 00000000..9ddd7868 --- /dev/null +++ b/macptopbm.html @@ -0,0 +1,75 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Macptopbm User Manual</TITLE></HEAD> +<BODY> +<H1>macptopbm</H1> +Updated: 29 March 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +macptopbm - convert a MacPaint file into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>macptopbm</B> +[<B>-extraskip</B> <I>N</I>] +[<I>macpfile</I>] + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>macptopbm</b>reads a MacPaint file as input and produces a PBM +image as output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-extraskip</B> + +<DD>This option is to get around a problem with some methods of +transferring files from the Mac world to the Unix world. Most of +these methods leave the Mac files alone, but a few of them add the +"finderinfo" data onto the front of the Unix file. This +means an extra 128 bytes to skip over when reading the file. The +symptom to watch for is that the resulting PBM file looks shifted to +one side. If you get this, try <B>-extraskip</B> 128, and if that +still doesn't look right try another value. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="picttoppm.html">picttoppm</A>, +<A HREF="pbmtomacp.html">pbmtomacp</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +The MacPaint-reading code is copyright (c) 1987 by Patrick J. Naughton +(<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/manweb.html b/manweb.html new file mode 100644 index 00000000..f498ed08 --- /dev/null +++ b/manweb.html @@ -0,0 +1,244 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> <head> +<title>Manweb Reference Documentation</title> +</head> + +<body> + +<h1>SYNOPSIS</h1> + +<b>manweb</b> <b>-help</b> +<p> +<b>manweb</b> +[<b>-config=<i>configfile</i></b>] +[<i>topic</i> [ <i>subtopic</i> ... ] ] + +<h1>EXAMPLES</h1> + +<pre> +manweb +</pre> +This gets a master index of documentation. +<pre> +manweb netpbm +</pre> +This gets the main documentation page for the Netpbm package, with hyperlinks +to the rest of the documentation. +<pre> +manweb netpbm pngtopnm +</pre> +This goes directly to the documentation page for the Pngtopnm program in +the Netpbm package. +<pre> +manweb pngtopnm +</pre> +This also goes directly to the documentation page for the Pngtopnm program in +the Netpbm package, if that's what would run in response to a <b>pngtopnm</b> +shell command (your <b>PATH</b> environment variable is involved). +<pre> +manweb 3 fopen +</pre> +This gets the traditional man page for the fopen() subroutine using +<b>man</b>. +<pre> +manweb cp +</pre> +This gets the GNU Info manual for the <b>cp</b> program, using <b>info</b>. + + +<h1>DESCRIPTION</h1> + +<p><b>manweb</b> displays reference documentation via quick shell +commands. It is a replacement for the well-known <b>man</b>. + +<h2>Differences Between Man and Manweb</h2> + +<p><b>manweb</b>'s advantages over <b>man</b> are: + +<ul> + <li> + You can access documentation that is on the worldwide web instead of + having locally installed copies. This saves installation work and gets + you more current documentation. + </li> + <li> + Documentation can be in HTML, which is more widely known, more widely + useful, and more expressive than the nroff/troff format used by + <b>man</b>. + </li> + <li> + <b>manweb</b> puts your topics in a tree for multilevel documentation. + <b>man</b> is intended for a single level of documentation. For + example, you can have a man page for each shell command, but not for + the subcommands of a shell command. And you cannot properly have + man pages for the members of multiple subroutine libraries. + </li> + <li> + Documentation can be hyperlinked. +</ul> + +<p>Web servers need not be involved -- the documentation can be in local +files. Graphics need not be involved -- the <b>lynx</b> browser works fine +in the same kind of terminals in which <b>man</b> works. + +<p><b>manweb</b> finds the documentation you specify and calls a web +browser of your choice to display it. The documentation <b>manweb</b> +finds can be either an HTML file on your system, in which case, +<b>manweb</b> gives a <b>file:</b> URL to your browser, or an explicit +URL. That explicit URL might be an <b>http:</b> URL referring to an +HTML file on a web server somewhere, or anything else your browser +understands. + +<p>If <b>manweb</b> finds neither an HTML file nor a URL, but your parameters +look like they could mean something to <b>man</b>, <b>manweb</b> calls +<b>man</b>. Therefore, you can use a single command to access the vast +body of traditional man pages, plus any newer <b>manweb</b> documentation. +You can make "man" a shell alias of "manweb". + +<p><b>manweb</b> finds Info documentation as well. It looks for the +topic you specify as an Info topic after looking for HTML and URL +documentation and before running <b>man</b>. If <b>manweb</b> finds a +corresponding Info topic, it runs the program <b>info</b> on it. Info +is the documentation system that the GNU project invented to, among +other things, replace traditional Unix man pages. However, HTML and the +Worldwide Web were invented shortly afterward, so Info fizzled. But there +is still a lot of GNU software that is documented as Info topics. + +<h2>How Manweb Finds Documentation</h2> + +<p><b>manweb</b> passes a URL to a web browser. This section tells +how your <b>manweb</b> invocation parameters turn into that URL. + +<p><b>manweb</b>'s search starts in the "web directory" directory. +That's either the value of the <b>webdir</b> keyword in your +<b>manweb</b> configuration file, or the default <b>/usr/man/web</b>. + +<p>Your invocation parameters form a "topic chain." Going from left to right, +the first parameter is the main topic, the 2nd is a subtopic of the main +topic, and so on. + +<p>Let's look at the simple case where you specify exactly one parameter -- +a main topic. We'll call it <i>maintopic</i> and look at 4 ways +<b>manweb</b> might find it: + +<ol> + <li> + <p>If <b>manweb</b> finds a file named <i>maintopic</i><b>.html</b> + in the web directory, the URL <b>manweb</b> passes to the + browser is just a <b>file:</b> URL that specifies that .html + file. + </li> + <li> + <p>If there's no .html file, but there is a file named + <i>maintopic</i><b>.url</b>, the contents of the first line of + that .url file is what <b>manweb</b> passes to the browser. It + doesn't interpret the contents at all. If it's garbage, the + browser chokes on it. + </li> + <li> + <p>If there's neither a .html nor a .url file, but there is a + directory named <i>maintopic</i>, <b>manweb</b> looks in the + directory for a file named <i>index.html</i>. If there is one, + <b>manweb</b> passes a <b>file:</b> URL specifying that + index.html file to the browser. If there's no + <i>index.html</i>, <b>manweb</b> uses a <b>file:</b> URL that + specifies the directory itself. + </li> + <li> + <p>If <b>manweb</b> doesn't find documentation in any of the + above ways, it searches your executable search path (as defined + by your <b>PATH</b> environment variable) for a program named + <i>maintopic</i>. If it finds one, it looks in the directory + that contains the program for a file named <b>doc.url</b>. If + it finds one, it appends <i>maintopic</i><b>.html</b> to the + first line of the file and passes that to the browser. Unless + the first line does <em>not</em> end with a slash -- in that + case, <b>manweb</b> passes the first line of the file unmodified + to the browser. + </ol> + +<p>It gets a little more interesting when you have subtopics. Looking +at each of the 4 cases above: + +<ol> + <li> + Where <i>maintopic</i><b>.html</b> exists, subtopics are invalid. + You get a warning message and the subtopics are ignored. + </li> + <li> + Where there's no .html file but <i>maintopic</i><b>.url</b> exists, + <b>manweb</b> appends the subtopic chain to the URL it gets from the + .url file as in the following example: .url file contains + <b>http://acme.com/productxyz/</b> and subtopics are + <b>create</b> and + <b>database</b>. The URL <b>manweb</b> passes to the browser is + <b>http://acme.com/productxyz/create/database.html</b>. + + <p><b>manweb</b> doesn't check that this kind of appendage makes + any sense for the URL in question, except that if the URL in the + .url file doesn't end with a slash (<b>/</b>), <b>manweb</b> + issues a warning and doesn't append anything (ignores the subtopics). + <li> + Where there's neither a .html file nor a .url file, but there's a + <i>maintopic</i> directory, <b>manweb</b> recurses into that + directory and begins a whole new search using the first subtopic + as the main topic and the rest of the subtopics as subtopics of that. + <li> + When there are subtopics, the <b>PATH</b> thing doesn't make sense, + so <b>manweb</b> doesn't do it. +</ol> + +If you give subtopics, the <b>PATH</b> thing described above for one +topic doesn't apply. + +<p>If you give no parameters at all, <b>manweb</b> generates a URL for the +web directory itself as described above for subdirectories. + +<p>The above is simplified by the assumption of a single web +directory. In reality, the <b>webdir</b> keyword in the configuration +file can specify a chain of web directories. <b>manweb</b> searches +each one in turn, doing all the kinds of searches in each web directory +before moving on to the next one. + +<h2>The Configuration File</h2> + +<p>The default location of the <b>manweb</b> configuration file is +<b>/etc/manweb.conf</b>. But you can override this with the environment +variable <b>MANWEB_CONF_FILE</b>, and override that with the +<b>-config</b> invocation option. + +<p>Lines starting with "#" are comments and are ignored, as are blank lines. + +<p>All other lines have the format <i>keyword</i>=<i>value</i>. The +keywords defined are: +<dl> + <dt>webdir + <dd> + A colon-delimited sequence of directories to search for + documentation as described above. If you + don't specify this, the default is <b>/usr/man/web</b> alone. + <dt>browser + <dd> + The file specification <b>manweb</b> of the web browser <b>manweb</b> + is to invoke + to display documentation (except when it uses <b>man</b> to display + a conventional man page). + If the file specification does not include a slash, <b>manweb</b> + searches for the file in the PATH search path. + + <p>If you don't specify this, the default is the value of the + <b>BROWSER</b> environment variable, and if that is not set, + <b>lynx</b>. +</dl> + +Example: +<pre> +# Configuration file for Manweb + +webdir=/usr/share/manweb +browser=netscape +</pre> + + +</body> </html> + diff --git a/mdatopbm.html b/mdatopbm.html new file mode 100644 index 00000000..efef800d --- /dev/null +++ b/mdatopbm.html @@ -0,0 +1,81 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Mdatopbm User Manual</TITLE></HEAD> +<BODY> +<H1>mdatopbm</H1> +Updated: 3 December 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +mdatopbm - convert a Microdesign .mda or .mdp file into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>mdatopbm</B> +[<B>-a</B>] +[<B>-d</B>] +[<B>-i</B>] +[<B>--</B>] +[<I>mdafile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>mdatopbm</b> reads a MicroDesign file as input and Produces a +PBM image as output. + +<p>If you don't specify <i>mdafile</i>, <b>mdatopbm</b> takes its input +from Standard Input. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-a</B> + +<DD>Generate Plain PBM output instead of Raw PBM + +<DT><B>-d</B> + +<DD>Double the height of the output file, to compensate for the aspect +ratio used in MicroDesign files. + +<DT><B>-i</B> + +<DD>Invert the colors used. + +<DT><B>--</B> + +<DD>End of options (use this if the filename starts with "-") + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtomda.html">pbmtomda</A>, +<A HREF="pbm.html">pbm</A> +<A NAME="lbAG"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1999 John Elliott <<A +HREF="mailto:jce@seasip.demon.co.uk">jce@seasip.demon.co.uk</A>>. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/mgrtopbm.html b/mgrtopbm.html new file mode 100644 index 00000000..d28ee360 --- /dev/null +++ b/mgrtopbm.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Mgrtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>mgrtopbm</H1> +Updated: 06 November 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +mgrtopbm - convert a MGR bitmap into a PBM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>mgrtopbm</B> +[<I>mgrfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>mgrtopbm</b> reads a MGR bitmap as input and produces a PBM +image as output. + +<p><a +href="ftp://sunsite.unc.edu/pub/Linux/apps/MGR/!INDEX.html">MGR</a> is +a window manager that is a smaller alternative to the X Windows +System. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pbmtomgr.html">pbmtomgr</A>, +<A HREF="pbm.html">pbm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> + +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/mrf.html b/mrf.html new file mode 100644 index 00000000..fe7bdd70 --- /dev/null +++ b/mrf.html @@ -0,0 +1,134 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>MRF image format specification</TITLE></HEAD> +<BODY> +<A HREF="#index">Table Of Contents</A> + +<H1>MRF format</H1> +Updated: 1991 +<BR> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +MRF - monochrome recursive format (compressed bitmaps) + +<A NAME="lbAC"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>MRF is a compressed format for bilevel (1-bit mono) images. It +achieves better compression for some such images than either GIF or +PNG. (It's also very easy to implement (about the same difficulty as +RLE, I'd say) and an MRF reader needs no tables/buffers, which may +make it useful for tiny machines). + +<P>In case the above hasn't made it sufficiently clear, I'll make this +next point explicitly: <em>MRF cannot represent color at all.</em> Nor +can it represent grayscale. It's a specifically mono format. (If you +want to compress a color or grayscale image, my advice is to use +JPEG2000). + +<P>First, here's what goes where in an MRF file. I'll explain how the +compression works afterward. + +<DL COMPACT> +<DT>Offset<DD> +Description +<DT>0 +<DD> +magic number - "MRF1" (in ASCII) + +<DT>4 +<DD> +width (32-bit, MSB first (i.e. big-endian)) + +<DT>8 +<DD> +height (same) + +<DT>12 +<DD> +reserved (single byte, must be zero) + +<DT>13 +<DD> +compressed data + +</DL> + +<P>Note that there is no end-of-file marker in the file itself - the +compressed data carries on right up to EOF. + +<P>The way the picture is compressed is essentially very simple, but +as they say, the devil is in the detail. So don't be put off if it +sounds confusing. + +<P>The image is treated as a number of 64x64 squares, forming a grid +large enough to encompass it. (If an image is (say) 129x65, it'll be +treated in the same way as a 192x128 one. On decompression, the extra +area which was encoded (the contents of this area is undefined) should +be ignored.) Each of these squares in turn (in left-to-right, +top-to-bottom order) is recursively subdivided until the smallest +completely black or white squares are found. Some pseudocode (eek!) +for the recursive subdivision routine should make things clearer: + +<PRE> + if square size > 1x1 and square is all one color, output 1 bit + if whole square is black, output a 0 bit and return + if whole square is white, output a 1 bit and return + output a 0 bit + divide the square into four quarters, calling routine for + each in this order: top-left, top-right, bottom-left, bottom-right +</PRE> + +<P>(Note that the "output a 0 bit" stage is not reached for squares +of size 1x1, which is what stops it recursing infinitely. I mention +this as it may not be immediately obvious.) + +<P>The whole of the compressed data is made up of the bits output by +the above routine. The bits are packed into bytes MSB first, so for +example outputting the bits 1,0,0,0,0,0,0,0 would result in a 80h byte +being output. Any `unused' bits in the last byte output are undefined; +these are effectively after EOF and their value is unimportant. + +<P>If writing that sounds too much like hard work :-), you could +always adapt <b>pbmtomrf</b> and/or <b>mrftopbm</b>. That's the main +reason their source code is public domain, after all. + +<P>Above, I said the contents of any extra area encoded (when a bitmap +smaller than the grid of squares is compressed) is undefined. This is +deliberate so that the MRF compressor can make these unseen areas +anything it wants so as to maximize compression, rather than simply +leaving it blank. <b>pbmtomrf</b> does a little in this respect but +could definitely be improved upon. + +<P><b>mrftopbm</b>'s <b>-1</b> option causes it to include the edges, if +any, in the output PBM. This may help when debugging a compressor's +edge optimization. + +<p>Note that the "F" in the name "MRF" comes from "format," which is redundant +because it is the name of a format. That sort of makes "MRF format" sound +as stupid as "PIN number," but it's not really that bad. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="mrftopbm.html">mrftopbm</A></B>, +<B><A HREF="pbmtomrf.html">pbmtomrf</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Russell Marks. + +<HR> +<A NAME="index"> </A><H2>Index</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/mrftopbm.html b/mrftopbm.html new file mode 100644 index 00000000..626b4da5 --- /dev/null +++ b/mrftopbm.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Mrftopbm User Manual</TITLE></HEAD> +<BODY> +<H1>mrftopbm</H1> +<BR> +Updated: 10 August 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +mrftopbm - convert an MRF image to PBM format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>mrftopbm</B> +[ <b>-a</b> ] +[ <I>input.mrf</I> ] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>mrftopbm</b> converts an MRF image to PBM format. + +<p><b>mrftopbm</b> takes the MRF image from the file named by the +<i>input.mrf</i> argument, or Standard Input if you don't specify +<i>input.mrf</i>. The output goes to Standard Output. + +<P>For more information about mrf, see <A HREF="mrf.html">the MRF +specification</A>. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<dl compact> +<dt><b>-a</b> +<dd> +causes <b>mrftopbm</b> to include the edges, if any, in the output +PBM. This may help when debugging a compressor's edge optimization. +</dl> + +<A NAME="lbAF"> </A> + + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Russell Marks. + + + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtomrf.html">pbmtomrf</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="mrf.html">mrf</A></B> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/mtvtoppm.html b/mtvtoppm.html new file mode 100644 index 00000000..33acadb9 --- /dev/null +++ b/mtvtoppm.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Mtvtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>mtvtoppm</H1> +Updated: 02 February 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +mtvtoppm - convert output from an MTV or PRT ray tracer into a PPM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>mtvtoppm</B> +[<I>mtvfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>mtvtoppm</b> reads an input file from Mark VanDeWettering's MTV +ray tracer and produces a PPM image as output. + +<p>The PRT raytracer also produces this format. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/neotoppm.html b/neotoppm.html new file mode 100644 index 00000000..2991ac8f --- /dev/null +++ b/neotoppm.html @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Neotoppm User Manual</TITLE></HEAD> +<BODY> +<H1>neotoppm</H1> +Updated: 24 April 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +neotoppm - convert an Atari Neochrome .neo into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>neotoppm</B> +[<I>neofile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>neotoppm</b> reads an Atari Neochrome .neo file as input and +produces a portable pixmap as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtoneo.html">ppmtoneo</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2001 by Teemu Hukkanen <<A +HREF="mailto:tjhukkan@iki.fi">tjhukkan@iki.fi</A>>, based on +pi1toppm by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/palmtopnm.html b/palmtopnm.html new file mode 100644 index 00000000..b4ea250b --- /dev/null +++ b/palmtopnm.html @@ -0,0 +1,157 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Palmtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>palmtopnm</H1> +Updated: 26 January 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +palmtopnm - convert a Palm Bitmap to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>palmtopnm</B> + +[<B>-verbose</B>] + +[<B>-rendition</B> <I>N</I>] + +[<B>-showhist</B>] + +<BR> + +[<I>palmfile</I>] + +<BR> + +<B>palmtopnm</B> + +<B>-transparent</B> + +[<B>-verbose</B>] + +[<I>palmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>palmtopnm</b> reads a Palm Bitmap as input, from Standard Input or +<I>palmfile</I> and produces a PPM image as output. + +<p>Alternatively (when you specify <b>-transparent</b>), +<b>palmtopnm</b> writes the value of the transparent color in the Palm +Bitmap to Standard Output. + + +<p><b>Palmtopnm</b> can convert Palm Bitmaps with the following features. +This does not mean that it doesn't handle other features. These are just +the ones we found worth mentioning. +<ul> +<li>Version 0 +<li>Version 1 +<li>Version 2 +<li>Version 3 (new in Netpbm 10.27 (March 2005)) +<li>Scanline compression +<li>RLE compression +<li>Packbits compression (new in Netpbm 10.27 (March 2005)) +</ul> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-verbose</B> + +<DD> +Display various interesting information about the input file and process. + +<DT><B>-transparent</B> + +<DD> +If the Palm Bitmap has a transparent color set, +<b>palmtopnm</b> writes the value for that +color to Standard Output in the form #RRGGBB, where +RR, GG, and BB are two-digit hexadecimal numbers +indicating a value in the range 0 through 255. If no transparent color is set +in the Bitmap, <b>palmtopnm</b> writes nothing. <b>palmtopnm</b> does not +generate any output image when you specify <b>-transparent</b>. + +<DT><B>-rendition N</B> + +<DD> +Palm Bitmaps may contain several different renditions of the same +image, with different depths. By default, <B>palmtopnm </B> operates +on the first rendition (rendition number 1) in the image. This +switch allows you to operate on a different rendition. The value must +be between 1 and the number of renditions in the image, inclusive. + +<DT><B>-showhist</B> + +<DD> +This option causes <b>palmtopnm</b> to +write a histogram of colors in the input file to Standard Error. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmtopalm.html">pnmtopalm</A></B>, + +<A HREF="pnm.html">pnm</A>, + +<a +href="http://www.palmos.com/dev/support/docs/palmos/PalmOSReference/Bitmap.html">PalmOS +Reference</a>, + +<a +href="http://www.palmos.com/dev/support/docs/palmos/PalmOSCompanion/UserInterface.html#1010236">PalmOS +Companion</a>. + +<H2 id="limitations">LIMITATIONS</H2> + +<P>You cannot generate an alpha mask if the Palm Bitmap has a +transparent color. However, you can still do this with +<B>ppmcolormask</B> with a Netpbm pipe similar to: + +<P> +<B>palmtopnm bitmap.palm | +ppmcolormask `palmtopnm -transparent bitmap.palm`</B> + +<A name="history"></A> +<h2>HISTORY</h2> + +<p>Before Netpbm 10.23 (July 2004), there was a <b>-forceplain</b> +option. But that had been redundant for a long time, since the Netpbm +common option <b>-plain</b> does the same thing. + +<A NAME="lbAH"> </A> +<H2>AUTHORS</H2> + +This program was originally written as Tbmptopnm.c, by Ian Goldberg. +It was heavily modified by Bill Janssen to add color, compression, and +transparency function. + +<p>Copyright 1995-2001 by Ian Goldberg and Bill Janssen. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#limitations">LIMITATIONS</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAH">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pam.html b/pam.html new file mode 100644 index 00000000..27a48d26 --- /dev/null +++ b/pam.html @@ -0,0 +1,317 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>PAM format specification</TITLE> +<META NAME="manual_section" CONTENT="5"> +</HEAD> +<BODY> +<A HREF="#index">Table Of Contents</A> + +<H1>pam</H1> +Updated: 09 October 2005 +<BR> +<?makeman .SH NAME ?> +<?makeman pam - Netpbm common 2-dimensional bitmap format ?> + +<H2 id="general">GENERAL</H2> + +<p>The PAM image format is a lowest common denominator 2 dimensional map +format. + +<P>It is designed to be used for any of myriad kinds of graphics, but can +theoretically be used for any kind of data that is arranged as a two +dimensional rectangular array. Actually, from another perspective it +can be seen as a format for data arranged as a three dimensional +array. + +<P>The name "PAM" is an acronym derived from "Portable +Arbitrary Map." This derivation makes more sense if you consider +it in the context of the other Netpbm format names: PBM, PGM, and PPM. + +<P>This format does not define the meaning of the data at any particular +point in the array. It could be red, green, and blue light +intensities such that the array represents a visual image, or it could +be the same red, green, and blue components plus a transparency +component, or it could contain annual rainfalls for places on the +surface of the Earth. Any process that uses the PAM format must +further define the format to specify the meanings of the data. + +<P>A PAM image describes a two dimensional grid of tuples. The tuples +are arranged in rows and columns. The width of the image is the +number of columns. The height of the image is the number of rows. +All rows are the same width and all columns are the same height. The +tuples may have any degree, but all tuples have the same degree. The +degree of the tuples is called the depth of the image. Each member of +a tuple is called a sample. A sample is an unsigned integer which +represents a locus along a scale which starts at zero and ends at a +certain maximum value greater than zero called the maxval. The maxval +is the same for every sample in the image. The two dimensional array +of all the Nth samples of each tuple is called the Nth plane or Nth +channel of the image. + +<P>Though the basic format does not assign any meaning to the tuple values, it +does include an optional string that describes that meaning. The +contents of this string, called the tuple type, are arbitrary from the +point of view of the basic PAM format, but users of the format may assign +meaning to it by convention so they can identify their particular +implementations of the PAM format. Some tuple types are defined as +official subformats of PAM. See <a href="#tupletype">Defined Tuple Types</a>. + +<H2 id="format_universe">The Confusing Universe of Netpbm Formats</H2> + +<P>It is easy to get confused about the relationship between the PAM +format and PBM, PGM, PPM, and PNM. Here is a little enlightenment: + +<P>"PNM" is not really a format. It is a shorthand for the PBM, PGM, +and PPM formats collectively. It is also the name of a group of +library functions that can each handle all three of those formats. + +<P>"PAM" is in fact a fourth format. But it is so general +that you can represent the same information in a PAM image as you can +in a PBM, PGM, or PPM image. And in fact a program that is designed +to read PBM, PGM, or PPM and does so with a recent version of the +Netpbm library, will read an equivalent PAM image just fine and the +program will never know the difference. + +<P>To confuse things more, there is a collection of library routines +called the "pam" functions that read and write the PAM +format, but also read and write the PBM, PGM, and PPM formats. They +do this because the latter formats are much older and more popular, so +even a new program must work with them. Having the library handle all +the formats makes it convenient to write programs that use the newer +PAM format as well. + +<H2 id="layout">THE LAYOUT</H2> + +<P>A convenient way to read and write the PAM format accurately is via the +<a href="libnetpbm.html">libnetpbm</a> C subroutine library. + +<P>A PAM file consists of a sequence of one or more PAM images. There are +no data, delimiters, or padding before, after, or between images. + +<P> +Each PAM image consists of a header followed immediately by a raster. +<P> +Here is an example header: +<P> +<B>P7</B> + +<BR> + +<B>WIDTH 227</B> + +<BR> + +<B>HEIGHT 149</B> + +<BR> + +<B>DEPTH 3</B> + +<BR> + +<B>MAXVAL 255</B> + +<BR> + +<B>TUPLTYPE RGB</B> + +<BR> + +<B>ENDHDR</B> + +<P>The header begins with the ASCII characters "P7" followed +by newline. This is the magic number. + +<P>Note: <b>xv</b> thumbnail images also start with the "P7" magic number. +(This and PAM were independent extensions to the Netpbm formats). The rest +of the format makes it easy to distinguish PAM from that format, though). + +<P>The header continues with an arbitrary number of lines of ASCII +text. Each line ends with and is delimited by a newline character. + +<P>Each header line consists of zero or more whitespace-delimited +tokens or begins with "#". If it begins with "#" +it is a comment and the rest of this specification does not apply to +it. + +<P>A header line which has zero tokens is valid but has no meaning. + +<P>The type of header line is identified by its first token, which is +8 characters or less: + +<DL COMPACT> +<DT><B>ENDHDR </B> + +<DD>This is the last line in the header. The header must contain +exactly one of these header lines. + +<DT><B>HEIGHT </B> + +<DD>The second token is a decimal number representing the height +of the image (number of rows). The header must contain exactly one +of these header lines. + +<DT><B>WIDTH</B> + +<DD>The second token is a decimal number representing the width of the +image (number of columns). The header must contain exactly one of +these header lines. + +<DT><B>DEPTH</B> + +<DD>The second token is a decimal number representing the depth of the +image (number of planes or channels). The header must contain exactly +one of these header lines. + +<DT><B>MAXVAL</B> + +<DD>The second token is a decimal number representing the maxval of the image. +The header must contain exactly one of these header lines. + +<DT><B>TUPLTYPE</B> + +<DD>The header may contain any number of these header lines, including +zero. The rest of the line is part of the tuple type. The rest of +the line is not tokenized, but the tuple type does not include any +white space immediately following <B>TUPLTYPE </B> or at the very end +of the line. It does not include a newline. If there are multiple +<B>TUPLTYPE</B> header lines, the tuple type is the concatenation of +the values from each of them, separated by a single blank, in the +order in which they appear in the header. If there are no +<B>TUPLTYPE</B> header lines the tuple type is the null string. + +</DL> + +<P> +The raster consists of each row of the image, in order from top to bottom, +consecutive with no delimiter of any kind between, before, or after, rows. +<P> +Each row consists of every tuple in the row, in order from left to +right, consecutive with no delimiter of any kind between, before, or +after, tuples. +<P> +Each tuple consists of every sample in the tuple, in order, +consecutive with no delimiter of any kind between, before, or after, +samples. +<P> +Each sample consists of an unsigned integer in pure binary format, +with the most significant byte first. The number of bytes is the +minimum number of bytes required to represent the maxval of the image. + +<H2 id="limitations">LIMITATIONS</H2> + +<P>The maxval of an image is never greater than 65535. (The reason it is +limited is to make it easier to build an image processor, in which +intermediate arithmetic values often have to fit within 31 or 32 bits). +There was no specified limitation before October, 2005, but essentially +all implementations have always observed it. + +<p>Height and width are at least 1. + +<p>Height and width have no defined maximum, but processors and generators +of images usually have their own limitations. + +<H2 id="tupletype">DEFINED TUPLE TYPES</h2> + +<p>Some tuple types are defined in this specification to specify +official subformats of PAM for especially popular applications of the +format. Users of the format may also define their own tuple types, +and thus their own subformats. + +<A NAME="visual"> </A> +<H3>PAM Used For Visual Images</H3> + +<P>A common use of PAM images is to represent visual images such +as are typically represented by images in the older and more concrete +PBM, PGM, and PPM formats. + +<h4>Black And White (PBM)</h4> + +<P>A black and white image, such as would be represented by a PBM +image, has a tuple type of "BLACKANDWHITE". Such a PAM image +has a depth of 1 and maxval 1 where the one sample in each tuple is 0 +to represent a black pixel and 1 to represent a white one. The +height, width, and raster bear the obvious relationship to those of +the equivalent PBM image. + +<P>Note that in the PBM format, a zero value means white, but in PAM, +zero means black. + +<h4>Grayscale (PGM)</h4> + +<P>A grayscale image, such as would be represented by a PGM image, has +a tuple type of "GRAYSCALE". Such a PAM image has a depth of 1. The +maxval, height, width, and raster bear the obvious relationship to +those of the equivalent PGM image. + +<h4>Color (PPM)</h4> + +<P>A color image, such as would be represented by a PPM image, has a +typle type of "RGB". Such a PAM image has a depth of 3. The maxval, +height, width, and raster bear the obvious relationship to those of +the PPM image. The first plane represents red, the second blue, and +the third green. + +<h4>Transparent</h4> + +<p>Each of the visual image formats mentioned above has a variation that +contains transparency information. In that variation, the tuple type +has "_ALPHA" added to it (e.g. "RGB_ALPHA") and one +more plane. The highest numbered plane is the opacity plane (sometimes +called an alpha plane or transparency plane). + +<p>In this kind of image, the color represented by a pixel is actually +a combination of an explicitly specified foreground color and a background +color to be identified later. + +<p>The planes other than the opacity plane describe the foreground +color. A sample in the opacity plane tells how opaque the pixel is, by +telling what fraction of the pixel's light comes from the foreground +color. The rest of the pixel's light comes from the (unspecified) +background color. + +<p>For example, in a GRAYSCALE_ALPHA image, assume Plane 0 indicates +a gray tone 60% of white and Plane 1 indicates opacity 25%. The +foreground color is the 60% gray, and 25% of that contributes to the +ultimate color of the pixel. The other 75% comes from some background +color. So let's assume further that the background color of the pixel +is full white. Then the color of the pixel is 90% of white: 25% of +the foreground 60%, plus 75% of the background 100%. + +<p>The sample value is the opacity fraction just described, as a fraction +of the maxval. Note that it is <em>not</em> gamma-adjusted like the +foreground color samples. + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="index.html">Netpbm</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="libnetpbm.html">libnetpbm</A></B> + + +<HR> +<H2 id="contents">Table Of Contents</H2> +<UL> + <LI><A HREF="#general">GENERAL</A> + <LI><A HREF="#layout">THE LAYOUT</A> + <LI><A HREF="#limitations">LIMITATIONS</A> + <LI><A HREF="#format_universe">The Confusing Universe of Netpbm Formats</A> + <LI><A HREF="#tupletype">DEFINED TUPLE TYPES</A> + <UL> + <LI><A HREF="#visual">PAM Used For Visual Images</A> + <UL> + <LI>Black And White + <LI>Grayscale + <LI>Color + </UL> + </UL> + <LI><A HREF="#seealso">SEE ALSO</A> +</UL> + +</BODY> +</HTML> diff --git a/pamaddnoise.html b/pamaddnoise.html new file mode 100644 index 00000000..6e9057c5 --- /dev/null +++ b/pamaddnoise.html @@ -0,0 +1,197 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamaddnoise User Manual</TITLE></HEAD> +<BODY> +<H1>pamaddnoise</H1> +Updated: 14 November 1995 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamaddnoise - add noise to a Netpbm image + + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamaddnoise</B> + +[<B>-type</B> <I>noise_type</I>] + +[<B>-seed</B> <I>int</I>] + +<BR> + +<B>pamaddnoise</B> <B>-type</B> <B>gaussian</B> + +[<B>-sigma1</B> <I>value</I>] + +[<B>-sigma2</B> <I>value</I>] + +<BR> + +[<B>-seed</B> <I>int</I>] + +[<I>netpbmfile</I>] + +<BR> + +<B>pamaddnoise</B> <B>-type </B> <B>multiplicative_gaussian</B> + +[<B>-msigma</B> <I>value</I>] + +<BR> + +[<B>-seed</B> <I>int</I>] + +[<I>netpbmfile</I>] + +<BR> + +<B>pamaddnoise</B> <B>-type</B> <B>impulse</B> + +[<B>-tolerance</B> <i>ratio</I>] + +[<B>-seed</B> <I>int</I>] + +<BR> + +[<I>netpbmfile</I>] + +<BR> + +<B>pamaddnoise</B> <B>-type </B> <B>laplacian</B> + +[<B>-lsigma</B> <I>value</I>] + +[<B>-seed</B> <I>int</I>] + +<BR> + +[<I>netpbmfile</I>] + +<BR> + +<B>pamaddnoise</B> <B>-type </B> <B>poisson</B> + +[<B>-lambda</B> <I>value</I>] + +[<B>-seed</B> <I>int</I>] + +<BR> + +[<I>netpbmfile</I>] + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamaddnoise</b> adds the specified noise type to a Netpbm image. +<b>pamaddnoise</b> treats a PPM image as 3 independent planes, not as +a plane of colors in a color space. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-lambda</b> <i>value</i> + +<DD>Used for poisson noise only. The default value is 0.05. + +<DT><B>-lsigma</b> <i>value</i> + +<DD>Used for laplacian noise only. The default value is 10.0. + +<DT><B>-msigma</b> <i>value</i> + +<DD>Used for mutliplicative gaussian noise only. The default value is +0.5. + +<DT><B>-seed</b> <i>int</i> + +<DD>Used for all noise types. Set the initial random number generator +seed value. + +<DT><B>-sigma1</b> <i>value</i> + +<DD>Used for gaussian noise only. The default value is 4.0. + +<DT><B>-sigma2</b> <i>value</i> + +<DD>Used for gaussian noise only. The default value is 20.0. + +<DT><B>-tolerance</b> <i>ratio</i> + +<DD> +Used for impulse noise only. The default value is 0.10. This means +that 5% of all pixel values will be set to 0 and 5% will be set to +the maxval + +<DT><B>-type</b> <i>noise_type</i> + +<DD> +Select type of noise by name. The following noise types are +available: gaussian, multiplicative_gaussian, impulse, laplacian, +poisson. Only enough letters to be unique are required for the noise +type option. The default noise type is <b>gaussian</b>. + +<ul> +<li><b>gaussian</b> +<li><b>mulitiplicative_gaussian</b> +<li><b>impulse</b> +<li><b>laplacian</b> +<li><b>poisson</b> +</ul> + +</DL> + +<H2 id="references">REFERENCES</H2> + +<UL> +<LI>"Adaptive Image Restoration in Signal-Dependent Noise" +by R. Kasturi Institute for Electronic Science, Texas Tech University, +1982 + +<LI>"Digital Image Processing Algorithms" by Ioannis Pitas, +Prentice Hall, 1993 ISBN 0-13-145814-0 + +</UL> + + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pgmnoise.html">pgmnoise</A>, +<A HREF="pgmmedian.html">pgmmedian</A>, +<A HREF="pnm.html">pnm</A>, +<A HREF="pam.html">pam</A>, + +<h2 id="history">HISTORY</h2> + +<P><b>pamaddnoise</b> was added to Netpbm in Version 10.29 (August 2005). +It had been distributed by Mike Burns via his own web site before that +(and continued to be so). + +<p>Burns' version, and the one in Netpbm 10.29, was called <b>pnmaddnoise</b> +and worked only on PNM images. In Netpbm 10.30, it was converted to handle +PAM images and renamed to <b>pamaddnoise</b>. + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1995 by Mike Burns <<A +HREF="mailto:burns@cac.psu.edu">burns@cac.psu.edu</A>> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#references">REFERENCES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamarith.html b/pamarith.html new file mode 100644 index 00000000..d2fa2c0b --- /dev/null +++ b/pamarith.html @@ -0,0 +1,253 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamarith User Manual</TITLE></HEAD> +<BODY> +<H1>pamarith</H1> +Updated: 08 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamarith - perform arithmetic on two Netpbm images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamarith</B> +<B>-add</B> | <B>-subtract</B> | <B>-multiply</B> | <b>-divide</b> | +<B>-difference</B> | +<B>-minimum</B> | <B>-maximum</B> | <B>-mean</B> | <B>-compare</B> | +<B>-and</B> | <B>-or</B> | <B>-nand</B> | <B>-nor</B> | <B>-xor</B> | +<B>-shiftleft</B> | <B>-shiftright</B> +<I>pamfile1</I> <I>pamfile2</I> + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamarith</b> reads two PBM, PGM, PPM, or PAM images as input. +It performs the specified binary arithmetic operation on their sample +values and produces an output of a format which is the more general of +the two input formats. The two input images must be of the same width +and height. The arithmetic is performed on each pair of identically +located tuples to generate the identically located tuple of the +output. + +<P>For the purpose of the calculation, it assumes any PBM, PGM, or PPM +input image is the equivalent PAM image of tuple type +<B>BLACKANDWHITE</B>, <B>GRAYSCALE</B>, or <B>RGB</B>, respectively, +and if it produces a PBM, PGM, or PPM output, produces the equivalent +of the PAM image which is the result of the calculation. + +<p>The first <i>pamfile</i> argument identifies the "left" +argument image; the second <i>pamfile</i> argument identifies the +"right" one. + +<p>If the output is PAM, the tuple type is the same as the tuple type of +the left input image. + +<P><b>pamarith</b> performs the arithmetic on each pair of identically +located tuples in the two input images. + +<p>The arithmetic operation is in all cases fundamentally a function +from two integers to an integer. The operation is performed on two +tuples as follows. The two input images must have the same depth, or +one of them must have depth one. <b>pamarith</b> fails if one of +these is not the case. + +<p>If they have the same depth, <b>pamarith</b> simply carries out the +arithmetic one sample at a time. I.e. if at a particular position the +left input image contains the tuple (s1,s2,...,sN) and the right +input image contains the tuple (t1,t2,...tN), and the function is f, +then the output image contains the tuple +(f(s1,t1),f(s2,t2),...,f(sN,tN)). + +<p>If one of the images has depth 1, the arithmetic is performed +between the one sample in that image and each of the samples in the +other. I.e. if at a particular position the left input image +contains the tuple (s) and the right input image contains the tuple +(t1,t2,...tN), and the function is f, then the output image contains +the tuple (f(s,t1),f(s,t2),...,f(s,tN)). + +<h3 id="maxval">Maxval</h3> + +<p>The meanings of the samples with respect to the maxval varies +according to the function you select. + +<p>In PAM images in general, the most usual meaning of a sample (the +one that applies when a PAM image represents a visual image), is that +it represents a fraction of some maximum. The maxval of the image +corresponds to some maximum value (in the case of a visual image, it +corresponds to "full intensity."), and a sample value +divided by the maxval gives the fraction. + +<p>For <b>pamarith</b>, this interpretation applies to the regular +arithmetic functions: <B>-add</B>, <B>-subtract</B>, <B>-multiply</B>, +<b>-divide</b>, +<B>-difference</B>, <B>-minimum</B>, <B>-maximum</B>, <B>-mean</B>, +and <B>-compare</B>. For those, you should think of the arguments and +result as numbers in the range [0,1). For example, if the maxval of +the left argument image is 100 and the maxval of the right argument +image is 200 and the maxval of the output image is 200, and the left +sample value in an <b>-add</b> calculation is 50 and the right sample +is 60, the actual calculation is 50/100 + 60/200 = 160/200, and +the output sample value is 160. + +<P>For these functions, <b>pamarith</b> makes the output image's +maxval the maximum of the two input maxvals, except with +<b>-compare</b>, where <b>pamarith</b> uses an output maxval of 2. + +<p>If the result of a calculation falls outside the range [0, 1), +<b>pamarith</b> clips it -- i.e. considers it to be zero or 1-. + +<p>In many cases, where both your input maxvals are the same, you can +just think of the operation as taking place between the sample values +directly, with no consideration of the maxval except for the clipping. +E.g. an <b>-add</b> of sample value 5 to sample value 8 yields sample +value 13. + +<p>But with <b>-multiply</b>, this doesn't work. Say your two input +images have maxval 255, which means the output image also has maxval +255. Consider a location in the image where the input sample values +are 5 and 10. You might think the multiplicative product of those +would yield 50 in the output. But <b>pamarith</b> carries out the +arithmetic on the fractions 5/255 and 10/255. It multiplies those +together and then rescales to the output maxval, giving a sample value +in the output PAM of 50/255 rounded to the nearest integer: 0. + +<P>With the bit string operations, the maxval has a whole different +meaning. The operations in question are: <B>-and</B>, <B>-or</B>, +<B>-nand</B>, <B>-nor</B>, <B>-xor</B>, and <B>-shiftleft</B>, +<B>-shiftright</B>. + +<p>With these, each sample value in one or both input images, and in +the output image, represents a bit string, not a number. The maxval +tells how wide the bit string is. The maxval must be a full binary +count (a power of two minus one, such as 0xff) and the number of ones +in it is the width of the bit string. For the dyadic bit string +operations (that's everything but the shift functions), the maxvals of +the input images must be the same and <b>pamarith</b> makes the maxval +of the output image the same. + +<p>For the bit shift operations, the output maxval is the same as the +left input maxval. The right input image (which contains the shift +counts) can have any maxval and the maxval is irrelevant to the +interpretation of the samples. The sample value is the actual shift +count. But it's still required that no sample value exceed the +maxval. + +<h3 id="operations">The Operations</h3> + +<p>Most of the operations are obvious from the option name. + +<P><B>-subtract</B> subtracts a value in the right input image from a +value in the left input image. + +<P><B>-difference</B> calculates the absolute value of +the difference. + +<p><b>-multiply</b> does an ordinary arithmetic multiplication, but +tends to produce nonobvious results because of the way <b>pamarith</b> +interprets sample values. See <a href="#maxval">Maxval</a>. + +<P><b>-divide</b> divides a value in the left input image by the value +in the left input image. But like <b>-multiply</b>, it tends to +produce nonobvious results. Note that <b>pamarith</b> clipping +behavior makes this of little use when the left argument (dividend) is +greater than the right argument (divisor) -- the result in that case +is always the maxval. If the divisor is 0, the result is the maxval. +This option was new in Netpbm 10.30 (October 2005). + +<P><B>-compare</B> produces the value <b>0</b> when the value in the +left input image is less than the value in the right input image, +<b>1</b> when the values are equal, and <b>2</b> when the left is +greater than the right. + +<p>If the maxvals of the input images are not identical, <b>pamarith</b> +may claim two values are not equal when in fact they are, due to +the precision with which it does the arithmetic. However, it will never +say A is greater than B if A is less than B. + +<p><b>-compare</b> was new in Netpbm 10.13 (December 2002). + +<p><b>-and</b>, <b>-nand</b>, <b>-or</b>, <b>-nor</b>, and <b>-xor</b> +consider the input and output images to contain bit strings; they compute +bitwise logic operations. + +<p><b>-shiftleft</b> and <b>-shiftright</b> consider the left input +image and output image to contain bit strings. They compute a bit +shift operation, with bits falling off the left or right end and +zeroes shifting in, as opposed to bits off one end to the other. The +right input image sample value is the number of bit positions to +shift. + +<p>Note that the maxval (see <a href="#maxval">Maxval</a>) determines +the width of the frame within which you are shifting. + +<h3 id="notes">Notes</h3> + +<P>If you want to apply a unary function, e.g. "halve", to a single +image, use <b>pamfunc</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamfunc.html"><b>pamfunc</b></A>, +<A HREF="pamsummcol.html"><b>pamsummcol</b></A>, +<A HREF="pamsumm.html"><b>pamsumm</b></A>, +<A HREF="pnminvert.html"><b>pnminvert</b></A>, +<A HREF="ppmbrighten.html"><b>ppmbrighten</b></A>, +<A HREF="ppmdim.html"><b>ppmdim</b></A>, +<A HREF="pnmconvol.html"><b>pnmconvol</b></A>, +<A HREF="pamdepth.html"><b>pamdepth</b></A>, +<A HREF="pnmpsnr.html"><b>pnmpsnr</b></A>, +<A HREF="pnm.html">pnm</A>, +<A HREF="pam.html">pam</A> + + +<A NAME="history"></A> +<H2>HISTORY</h2> + +<p><b>pamarith</b> replaced <b>pnmarith</b> in Netpbm 10.3 (June 2002). + +<p>In Netpbm 10.3 through 10.8, though, <b>pamarith</b> was not +backward compatible because it required the input images to be of the +same depth, so you could not multiply a PBM by a PPM as is often done +for masking. (It was not intended at the time that <b>pnmarith</b> +would be removed from Netpbm -- the plan was just to rewrite it to use +<b>pamarith</b>; it was removed by mistake). + +<p>But starting with Netpbm 10.9 (September 2002), <b>pamarith</b> allows +the images to have different depths as long as one of them has depth 1, and +that made it backward compatible with <b>pnmarith</b>. + +<P>The original <b>pnmarith</b> did not have the <b>-mean</b> option. + +<P>The <b>-compare</b> option was added in Netpbm 10.13 (December 2002). + +<p>The bit string operations were added in Netpbm 10.27 (March 2005). + +<P>The <b>-divide</b> option was added in Netpbm 10.30 (October 2005). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#maxval">MAXVAL</A> +<LI><A HREF="#operations">THE OPERATIONS</A> +<LI><A HREF="#notes">NOTES</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pambackground.html b/pambackground.html new file mode 100644 index 00000000..0da0ef40 --- /dev/null +++ b/pambackground.html @@ -0,0 +1,128 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pambackground User Manual</TITLE></HEAD> +<BODY> +<H1>pambackground</H1> +Updated: 24 December 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pambackground - create a mask of the background area of an image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pambackground</B> + +[<I>netpbmfile</I> + +[<b>-verbose=</b>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pambackground</b> reads a PNM or PAM image as input. +It generates as output a PAM image that identifies the background area +of the image (a mask). + +<p>To identify the background, <b>pambackground</b> assumes the image +is a foreground image, smaller than the total image size, placed over +a single-color background. It assumes that foreground image is solid +-- it does not have holes through which the background can be seen. +So in specific, <b>pambackground</b> first identifies the background +color, then finds all contiguous pixels of that color in regions +touching any edge of the image. Think of it as starting at each of +the four edges and moving inward as far as possible until it hits +pixels of another color (the foreground image). + +<p><b>pambackground</b> identifies the background color as follows: +If any 3 corners of the image are the same color, that's the background +color. If not, but 2 corners are the same color, the background color +is the color of a pair of identically colored corners in this priority +order: top, right, left, bottom. If no two corners have the same color, +the background color is the color of the upper left corner. + +<p>In a typical photograph, the area that you would consider the +background is many shades of a color, so to <b>pambackground</b> it is +multiple colors and <b>pambackground</b> will not meaningfully +identify the background of your image. To use <b>pambackground</b> in +this case, you might use <b>ppmchange</b> to change all similar colors +to a single one first. For example, if the photograph is a building +against a blue sky, where nothing remotely sky-blue appears in the +building, you could use <b>ppmchange</b> to change all pixels within +20% of "SkyBlue" to SkyBlue, then run <b>pambackground</b> +on it. + +<p>As currently implemented, <b>pambackground</b> does not really +do what is promised above. It can't see places where the background +appears in the middle of a row (think of the sky between two buildings). +It will take a considerably more sophisticated algorithm to fix that; +feel free to write the code and submit it for inclusion in Netpbm. + +<p>The PAM that <b>pambackground</b> creates has a single plane, with +a maxval of 1. The sample value 1 means background; 0 means +foreground. There is no tuple type. Some older programs (but none +that are part of Netpbm) don't know what a PAM is and expect a mask to +be in the form of a PGM or PBM image. To convert +<b>pambackground</b>'s output to PBM, use <b>pamtopnm -assume</b>. To +convert to PGM, use <b>pgmtopgm</b>. + +<P><I>netpbmfile</I> is the file specification of the input file, or +<B>-</B> to indicate Standard Input. The default is Standard Input. + +<p>A common use for a background mask is with <b>pamcomp</b>. You +could replace the entire background (or foreground) of your +image with something else. + +<p>Another common use is to make an image with the background +transparent (in some image format that has a concept of transparency; +not Netpbm formats) so that image can be overlaid onto another image +later. Netpbm's converters to image formats that have transparency +(e.g. PNG) let you use the mask that <b>pambackground</b> generates +to identify the transparent areas for the output. + +<p>To simply make a mask of all the areas of a specified color, use +<b>ppmcolormask</b>. If you have a unique background color (one that +doesn't occur in the foreground) and know what it is, this can create +a background mask in cases that <b>pambackground</b> cannot: where there +are see-through holes in the foreground image. + +<H2 id="options">OPTIONS</H2> + +<dl> + +<dt><b>-verbose</b> + +<dd>Tell interesting facts about the process. + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pgmtopgm.html">pgmtopgm</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<h2 id="history">HISTORY</h2> + +<P><B>pambackground</B> was new in Netpbm 10.37 (December 2006). + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pambayer.html b/pambayer.html new file mode 100644 index 00000000..87417751 --- /dev/null +++ b/pambayer.html @@ -0,0 +1,103 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pambayer User Manual</TITLE></HEAD> +<BODY> +<H1>pambayer</H1> +Updated: 18 August 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pambayer - interpret Bayer patterns + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pambayer</B> +<b>-type=</b>{<b>1</b>, <b>2</b>, <b>3</b>, <b>4</b>} +[<I>pamfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pambayer</b> reads a Bayer pattern in a 1-deep Netpbm image and +produces a color image in PAM RGB format as output. + +<p>A Bayer pattern is what you get from the optical sensor in some +digital cameras. Such a camera doesn't have a red, green, and blue +sensor in the exact same place for an individual pixel. Instead, it +has red, green, and blue sensors laid out in a two dimensional array. +The pattern in which they are laid out is the Bayer pattern. The +input to <b>pambayer</b> is one sample value for each of those +sensors, so some samples are red, some are green, and some are blue. + + +<p>The input image is a PNM image or PAM image of arbitrary tuple type. +<b>pambayer</b> looks at only the first plane of the input. + +<p>The output image is a PAM image of tuple type "RGB", i.e. +a standard color image. You can convert this to PPM with +<a href="pamtopnm.html"><b>pamtopnm</b></a>. + +<p>If you're interested in just one of the primary colors, use +<b>pamchannel</b> on the output of <b>pambayer</b> to extract it. + + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<dt><b>type=</b><i>n</i> + +<dd>This tells which Bayer pattern the input is: + +<dl> +<dt>1 +<dd>GBG/RGR/GBG matrix +<dt>2 +<dd>RGR/GBG/RGR matrix +<dt>3 +<dd>BGB/GRG/BGB matrix +<dt>4 +<dd>GRG/BGB/GRG matrix +</dl> + +This option is mandatory. + +</DL> + + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="cameratopam.html">cameratopam</A></B> +<B><A HREF="pam.html">pam</A></B> + +<H2 id="history">HISTORY</H2> + +<p><b>pambayer</b> was new in Netpbm 10.30 (October 2005). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamchannel.html b/pamchannel.html new file mode 100644 index 00000000..2ced2807 --- /dev/null +++ b/pamchannel.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamchannel User Manual</TITLE></HEAD> +<BODY> +<H1>pamchannel</H1> +Updated: 10 January 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pamchannel - extract channels from a PAM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamchannel</B> +[<B>-infile </B><I>infile</I>] +[<B>-tupletype </B><I>tupletype</I>] +[<I>channum</I> ...] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamchannel</b> reads a PAM or PNM image as input and produces a +PAM image as output, consisting of the indicated channels (planes) of +the input. + +<P>The output is the same dimensions as the input, except that the depth +is the number of <I>channum</I> arguments you supply. The tuple type +is a null string unless you specify the <B>-tupletype</B> option. + +<p>This program works on multi-image streams, producing a +corresponding output stream. But before Netpbm 10.32 (February 2006), +it ignored every image after the first. + +<P><B>pamstack</B> does the opposite of <B>pamchannel</B>: It takes multiple +PAM or PNM images as input and stacks their planes (channels) on top of +one another to yield a single PAM. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-infile</B> <I>infile</I> +<DD> +This specifies the input file, which defaults to Standard Input. You +may specify <B>-</B> to select Standard Input explicitly. +<P> +This is a little unconventional for Netpbm programs, which usually +have the input file specification as an argument. For <B>pamchannel</B>, +the arguments are channel numbers. + +<DT><B>-tupletype</B> <I>tupletype</I> +<DD> +This specified the tuple type name to be recorded in the output. You may +use any string up to 255 characters. Some programs recognize some names. +If you omit this option, the default tuple type name is null. +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pam.html">pam</A></B> +<B><A HREF="pamstack.html">pamstack</A></B> + +<h2 id="history">HISTORY</h2> + +<p><b>pamchannel</b> was new, along with the PAM format, in Netpbm +9.7 (August 2000). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> + diff --git a/pamcomp.html b/pamcomp.html new file mode 100644 index 00000000..b0c2f67b --- /dev/null +++ b/pamcomp.html @@ -0,0 +1,310 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamcomp User Manual</TITLE></HEAD> +<BODY> +<H1>pamcomp</H1> +Updated: 17 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pamcomp - composite (overlay) two Netpbm images together + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamcomp</B> + +[<B>-align=</B>{<B>left</B>|<B>center</B>|<B>right</B>| +<B>beyondleft</b>|<b>beyondright</b>}] +<BR> +[<B>-valign=</B>{<B>top</B>|<B>middle</B>|<B>bottom</B>| +<b>above</b>|<b>below</b>}] +<BR> +[<B>-xoff=</B><I>X</I>] +[<B>-yoff=</B><I>Y</I>] +<BR> +[<B>-alpha=</B><I>alpha-pgmfile</I>] +[<B>-invert</B>] +[<B>-opacity=<i>opacity</i></B>] +[<b>-linear</b>] +<BR> +<I>overlay_file</I> +[<I>underlying_file</I> [<I>output_file</I>]] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pamcomp</B> reads two images and produces a composite image with +one of the images overlayed on top of the other, possible +translucently. The images need not be the same size. The input and +outputs are Netpbm format image files. + +<P>In its simplest use, <B>pamcomp</B> simply places the image in the +file <I>overlay_file</I> on top of the image in the file +<I>underlying_file</I>, blocking out the part of <I>underlying_file</I> +beneath it. + +<P>If you add the <B>-alpha</B> option, then <B>pamcomp</B> uses the +image in file <I>alpha-pgmfile</I> as an alpha mask, which means it +determines the level of transparency of each point in the overlay +image. The alpha mask must have the same dimensions as the overlay +image. In places where the alpha mask defines the overlay image to be +opaque, the composite output contains only the contents of the overlay +image; the underlying image is totally blocked out. In places where +the alpha mask defines the overlay image to be transparent, the +composite output contains none of the overlay image; the underlying +image shows through completely. In places where the alpha mask shows +a value in between opaque and transparent (translucence), the +composite image contains a mixture of the overlay image and the +underlying image and the level of translucence determines how much of +each. + +<P>The alpha mask is a PGM file in which a white pixel represents +opaqueness and a black pixel transparency. Anything in between is +translucent. (Like any Netpbm program, <B>pamcomp</B> will see a PBM +file as if it is PGM). + +<p>If the overlay image is a PAM image of tuple type RGB_ALPHA or +GRAYSCALE_ALPHA, then the overlay image contains transparency +information itself and <b>pamcomp</b> uses it the same way as the +alpha mask described above. If you supply both an overlay image that +has transparency information and an alpha mask, <b>pamcomp</b> +multiplies the two opacities to get the opacity of the overlay pixel. + +<p>Before Netpbm 10.25 (October 2004), <b>pamcomp</b> did not +recognize the transparency information in a PAM image -- it just +ignored it. So people had to make appropriate alpha masks in order to +have a non-opaque overlay. Some Netpbm programs that convert from +image formats such as PNG that contain transparency information are +not able to create RGB_ALPHA or GRAYSCALE_ALPHA PAM output, so you +have to use the old method -- extract the transparency information from +the original into a separate alpha mask and use that as input to +<b>pamcomp</b>. + +<P>The output image is always of the same dimensions as the underlying +image. <B>pamcomp</B> uses only parts of the overlay image that fit +within the underlying image. + +<P>To specify where on the underlying image to place the overlay +image, use the <B>-align</B>, <B>-valign</B>, <B>-xoff</B>, and +<B>-yoff</B> options. Without these options, the default horizontal +position is flush left and the default vertical position is flush top. + +<p>The overlay image, in the position you specify, need not fit entirely +within the underlying image. <b>pamcomp</b> uses only the parts of the +overlay image that appear above the underlying image. It is possible to +specify positioning such that <em>none</em> of the overlay image is +over the underlying image -- i.e. the overlay is out of frame. If you +do that, <b>pamcomp</b> issues a warning. + +<P> The overlay and underlying images may be of different formats +(e.g. overlaying a PBM text image over a full color PPM image) and +have different maxvals. The output image has the more general of the +two input formats and a maxval that is the least common multiple the +two maxvals (or the maximum maxval allowable by the format, if the LCM +is more than that). + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-align=</b><i>alignment</i> +<DD> +This option selects the basic horizontal position of the overlay image +with respect to the underlying image, in syntax reminiscent of HTML. +<b>left</b> means flush left, <b>center</b> means centered, and <b>right</b> +means flush right. + +<p>The <b>-xoff</b> option modifies this position. + +<b>beyondleft</b> means just out of frame to the left -- the right edge of +the overlay is flush with the left edge of the underlying image. +<b>beyondright</b> means just out of frame to the right. These alignments +are useful only if you add a <b>-xoff</b> option. These two values were +added in Netpbm 10.10 (October 2002). + +<p>The default is <b>left</b>. + +<DT><B>-valign=</b><i>alignment</i> +<DD> + +This option selects the basic vertical position of the overlay image +with respect to the underlying image, in syntax reminiscent of HTML. +<b>top</b> means flush top, <b>middle</b> means centered, and <b>bottom</b> +means flush bottom. + +<p>The <b>-yoff</b> option modifies this position. + +<b>above</b> means just out of frame to the top -- the bottom edge of +the overlay is flush with the top edge of the underlying image. +<b>below</b> means just out of frame to the bottom. These alignments +are useful only if you add a <b>-yoff</b> option. These two values were +added in Netpbm 10.10 (October 2002). + +<p>The default is <b>top</b>. + +<DT><B>-xoff=</B><I>x</I> + +<DD>This option modifies the horizontal positioning of the overlay +image with respect to the underlying image as selected by the +<b>-align</b> option. <b>pamcomp</b> shifts the overlay image from +that basic position <i>x</i> pixels to the right. <i>x</i> can be +negative to indicate shifting to the left. + +<p>The overlay need not fit entirely (or at all) on the underlying image. +<B>pamcomp</B> uses only the parts that lie over the underlying image. + +<P>Before Netpbm 10.10 (October 2002), <b>-xoff</b> was mutually +exclusive with <b>-align</b> and always measured from the left edge. + +<DT><B>-yoff=</B><I>y</I> + +<DD>This option modifies the vertical positioning of the overlay +image with respect to the underlying image as selected by the +<b>-valign</b> option. <b>pamcomp</b> shifts the overlay image from +that basic position <i>y</i> pixels downward. <i>y</i> can be +negative to indicate shifting upward. + +<p>The overlay need not fit entirely (or at all) on the underlying image. +<B>pamcomp</B> uses only the parts that lie over the underlying image. + +<P>Before Netpbm 10.10 (October 2002), <b>-xoff</b> was mutually +exclusive with <b>-valign</b> and always measured from the top edge. + +<DT><B>-alpha=</B><i>alpha-pgmfile</i> +<DD> +This option names a file that contains the alpha mask. If you don't +specify this option, there is no alpha mask, which is equivalent to +having an alpha mask specify total opaqueness everywhere. +<p> +You can specify <b>-</b> as the value of this option and the alpha +mask will come from Standard Input. If you do this, don't specify +Standard Input as the source of any other input image. + +<DT><B>-invert</B> +<DD> +This option inverts the sense of the values in the alpha mask, which +effectively switches the roles of the overlay image and the underlying +image in places where the two intersect. + +<DT><B>-opacity=</B><i>opacity</i> +<DD> +This option tells how opaque the overlay image is to be, i.e. how much +of the composite image should be from the overlay image, as opposed to +the underlying image. <i>opacity</i> is a floating point number, with +1.0 meaning the overlay image is totally opaque and 0.0 meaning it is +totally transparent. The default is 1.0. + +<p>If you specify an alpha mask (the <b>-alpha</b> option), +<b>pamcomp</b> uses the product of the opacity indicated by the alpha +mask (as modified by the <b>-invert</b> option, as a fraction, and +this opacity value. The <b>-invert</b> option does not apply to this +opacity value. + +<p>As a simple opacity value, the value makes sense only if it is +between 0 and 1, inclusive. However, <b>pamcomp</b> accepts all +values and performs the same arithmetic computation using whatever +value you provide. An opacity value less than zero means the underlay +image is intensified and then the overlay image is "subtracted" from +it. An opacity value greater than unity means the overlay image is +intensified and the underlaying image subtracted from it. In either +case, <b>pamcomp</b> clips the resulting color component intensities +so they are nonnegative and don't exceed the output image's maxval. + +<p>This may seem like a strange thing to do, but it has uses. You +can use it to brighten or darken or saturate or desaturate areas of the +underlaying image. See <a href="extendedopacity.html"> +this description</a> of the technique. + +<p>This option was added in Netpbm 10.6 (July 2002). Before Netpbm 10.15 +(April 2003), values less than zero or greater than unity were not allowed. + +<dt><b>-linear</b> + +<dd>This option indicates that the inputs are not true Netpbm images +but rather a non-gamma-adjusted variation. This is relevant only when +you mix pixels, using the <b>-opacity</b> option or an alpha mask +(the <b>-alpha</b> option). + +<p>The alpha mask and <b>-opacity</b> values indicate a fraction of +the light intensity of a pixel. But the PNM and PNM-equivalent PAM +image formats represent intensities with gamma-adjusted numbers that +are not linearly proportional to intensity. So <b>pamcomp</b>, by +default, performs a calculation on each sample read from its input and +each sample written to its output to convert between these +gamma-adjusted numbers and internal intensity-proportional numbers. + +<p>Sometimes you are not working with true PNM or PAM images, but +rather a variation in which the sample values are in fact directly +proportional to intensity. If so, use the <b>-linear</b> option to +tell <b>pamcomp</b> this. <b>pamcomp</B> then will skip the +conversions. + +<p>The conversion takes time. And the difference between +intensity-proportional values and gamma-adjusted values may be small +enough that you would barely see a difference in the result if you +just pretended that the gamma-adjusted values were in fact +intensity-proportional. So just to save time, at the expense of some +image quality, you can specify <b>-linear</b> even when you have true +PPM input and expect true PPM output. + +<p>For the first 13 years of Netpbm's life, until Netpbm 10.20 +(January 2004), <b>pamcomp</b>'s predecessor <b>pnmcomp</b> always +treated the PPM samples as intensity-proportional even though they +were not, and drew few complaints. So using <b>-linear</b> as a lie +is a reasonable thing to do if speed is important to you. + +<p>Another technique to consider is to convert your PNM image to the +linear variation with <b>pnmgamma</b>, run <b>pamcomp</b> on it and +other transformations that like linear PNM, and then convert it back +to true PNM with <b>pnmgamma -ungamma</b>. <b>pnmgamma</b> is often +faster than <b>pamcomp</b> in doing the conversion. + +</DL> + + +<H2 id="seealso">SEE ALSO</H2> + +<p><B><A HREF="ppmmix.html">ppmmix</A></B> and <B><A +HREF="pnmpaste.html">pnmpaste</A></B> are simpler, less general +versions of the same tool. + +<p><B><A HREF="ppmcolormask.html">ppmcolormask</A></B> and <B><A +HREF="pbmmask.html">pbmmask</A></B>, and <a +href="pambackground.html"><b>pambackground</b></a> can help with +generating an alpha mask. + +<p><B><A HREF="pnmcomp.html">pnmcomp</A></B> is an older program that +runs faster, but has less function. + +<P><B><A HREF="pnm.html">pnm</A></B> + + +<H2 id="history">HISTORY</H2> + +<p><b>pamcomp</b> was new in Netpbm 10.21 (March 2004). Its predecessor, +<b>pnmcomp</b>, was one of the first programs added to Netpbm when the +project went global in 1993. + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1992 by David Koblas (<A +HREF="mailto:koblas@mips.com">koblas@mips.com</A>). + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamcut.html b/pamcut.html new file mode 100644 index 00000000..6eea7845 --- /dev/null +++ b/pamcut.html @@ -0,0 +1,204 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamcut User Manual</TITLE></HEAD> +<BODY> +<H1>pamcut</H1> +Updated: 05 April 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamcut - cut a rectangle out of a PAM, PBM, PGM, or PPM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamcut</B> + +[<B>-left </B><I>colnum</I>] + +[<B>-right </B><I>colnum</I>] + +[<B>-top </B><I>rownum</I>] + +[<B>-bottom </B><I>rownum</I>] + +[<B>-width </B><I>cols</I>] + +[<B>-height </B><I>rows</I>] + +[<B>-pad</B>] + +[<B>-verbose</B>] + +[<I>left</i> <i>top</i> <i>width</i> <i>height</I>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pamcut</b> reads a PAM, PBM, PGM, or PPM image as input and +extracts the specified rectangle, and produces the same kind of image +as output. + +<P>There are two ways to specify the rectangle to cut: arguments and +options. Options are easier to remember and read, more expressive, +and allow you to use defaults. Arguments were the only way available +before July 2000. + +<P>If you use both options and arguments, the two specifications get +mixed in an unspecified way. + +<p>In any case, remember that you are specifying the rectangle to +keep, not the bits to discard. Otherwise, you'll be tempted to +believe that <b>-right=9</b> means to delete the 9 rightmost columns. +(It really means keep the stuff up to Column 9 and delete the rest). + +<P>To use options, just code any mixture of the <B>-left</B>, +<B>-right</B>, <B>-top</B>, <B>-bottom</B>, <B>-width</B>, and +<B>-height</B> options. What you don't specify defaults. Those +defaults are in favor of minimal cutting and in favor of cutting the +right and bottom edges off. It is an error to overspecify, i.e. to +specify all three of <B>-left</B>, <B>-right</B>, and <B>-width</B> or +<B>-top</B>, <B>-bottom</B>, and <B>-height</B>. + +<P>To use arguments, specify all four of the <I>left</I>, +<I>top</I>, <I>width</I>, and <I>height</I> arguments. <I>left</I> +and <I>top</I> have the same effect as specifying them as the argument +of a <B>-left</B> or <B>-top</B> option, respectively. <I>width</I> +and <I>height</I> have the same effect as specifying them as the +argument of a <B>-width</B> or <B>-height</B> option, respectively, +where they are positive. Where they are not positive, they have the +same effect as specifying one less than the value as the argument to a +<B>-right</B> or <B>-bottom</B> option, respectively. (E.g. +<I>width</I> = 0 makes the cut go all the way to the right edge). +Before July 2000, negative numbers were not allowed for <I>width</I> +and <I>height</I>. + +<P>Input is from Standard Input if you don't specify the input file +<I>pnmfile</I>. + +<P>Output is to Standard Output. + +<p><b>pamcut</b> works on a multi-image stream. It cuts each image in the +stream independently and produces a multi-image stream output. Before +Netpbm 10.32 (March 2006), it ignored all but the first image in the stream. + +<P>If you are splitting a single image into multiple same-size images, +<B>pamdice</B> is faster than running <B>pamcut</B> multiple times. + +<p><b>pamcomp</b> is also useful for cutting and padding an image to a +certain size. You create a background image of the desired frame +dimensions and overlay the subject image on it. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-left=</B><i>colnum</i> + +<DD>The column number of the leftmost column to be in the output. +Columns left of this get cut out. If a nonnegative number, it refers +to columns numbered from 0 at the left, increasing to the right. If +negative, it refers to columns numbered -1 at the right, decreasing to +the left. + +<p>To delete <i>N</i> columns at the left edge, specify +<b>-left=</b><i>N</i>. + +<p>To delete <i>N</i> columns at the right edge, specify +<b>-left=-</b><i>-(N+1)</i>. + +<DT><B>-right=</B><i>colnum</i> + +<DD>The column number of the rightmost column to be in the output, +numbered the same as for <B>-left.</B> Columns to the right of this +get cut out. + +<DT><B>-top=</B><i>rownum</i> + +<DD>The row number of the topmost row to be in the output. Rows above +this get cut out. If a nonnegative number it refers to rows numbered +from 0 at the top, increasing downward. If negative, it refers to +columns numbered -1 at the bottom, decreasing upward. + +<p>To delete <i>N</i> rows at the top, specify <b>-top=</b><i>N</i>. + +<p>To delete <i>N</i> rows at the bottom, specify <b>-bottom=</b><i>-(N+1)</i>. + +<DT><B>-bottom=</B><i>rownum</i> + +<DD>The row number of the bottom-most row to be in the output, +numbered the same as for <B>-top</B>. Rows below this get cut out. + +<DT><B>-width=</B><i>cols</i> + +<DD>The number of columns to be in the output. Must be positive. + +<DT><B>-height=</B><i>rows</i> + +<DD>The number of rows to be in the output. Must be positive. + +<DT><B>-pad</B> + +<DD>If the rectangle you specify is not entirely within the input +image, <B>pamcut</B> fails unless you also specify <B>-pad</B>. In +that case, it pads the output with black up to the edges you specify. +You can use this option if you need to have an image of certain +dimensions and have an image of arbitrary dimensions. + +<P><B>pnmpad</B> also adds borders to an image, but you specify their +width directly. + +<p><b>pamcomp</b> does a more general form of this padding. Create a +background image of the frame dimensions and overlay the subject image +on it. You can use options to have the subject image in the center of +the frame or against any edge and make the padding any color (the padding +color is the color of the background image). + +<DT><B>-verbose</B> + +<DD> +Print information about the processing to Standard Error. + +</DL> +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmcrop.html">pnmcrop</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pnmpad.html">pnmpad</A></B>, +<B><A HREF="pnmcat.html">pnmcat</A></B>, +<B><A HREF="pgmslice.html">pgmslice</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<h2 id="history">HISTORY</h2> + +<P><B>pamcut</b> was derived from <b>pnmcut</b> in Netpbm 9.20 (May 2001). +It was the first Netpbm program adapted to the new PAM format and programming +library. + +<p>The predecessor <b>pnmcut</b> was one of the oldest tools in the Netpbm +package. + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamdeinterlace.html b/pamdeinterlace.html new file mode 100644 index 00000000..62991a95 --- /dev/null +++ b/pamdeinterlace.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamdeinterlace User Manual</TITLE></HEAD> +<BODY> +<H1>pamdeinterlace</H1> +Updated: 11 November 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamdeinterlace - remove every other row from a PAM/PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamdeinterlace</B> + +[<B>-takeodd</B>] + +[<B>-takeeven</B>] + +[<I>infile</I>] + +<P>You can use the minimum unique abbreviation of the options. You +can use two hyphens instead of one. You can separate an option name +from its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pamdeinterlace</B> removes all the even-numbered or odd-numbered +rows from the input PNM or PAM image. Specify which with the +<B>-takeeven</B> and <B>-takeodd</B> options. + +<P>This can be useful if the image is a video capture from an +interlaced video source. In that case, each row shows the subject +1/60 second before or after the two rows that surround it. If the +subject is moving, this can detract from the quality of the image. + +<P>Because the resulting image is half the height of the input image, +you will then want to use <B>pamstretch</B> or <B>pamscale</B> to +restore it to its normal height: + +<pre> +<kbd> +pamdeinterlace myimage.ppm | pamstretch -yscale=2 >newimage.ppm +</kbd> +</pre> + +<p>Another, usually better, way to deinterlace an image is with +<b>pammixinterlace</b>. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-takeodd</B> + +<DD>Take the odd-numbered rows from the input and put them in the +output. The rows are numbered starting at zero, so the first row in +the output is the second row from the input. You cannot specify both +<B>-takeeven</B> and <B>-takeodd</B>. + +<DT><B>-takeeven</B> + +<DD>Take the even-numbered rows from the input and put them in the +output. The rows are numbered starting at zero, so the first row in +the output is the first row from the input. This is the default. You +cannot specify both <B>-takeeven</B> and <B>-takeodd</B>. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + + +<B><A HREF="pammixinterlace.html">pammixinterlace</A></B>, +<B><A HREF="pam.html">pam</A></B> +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamdepth.html b/pamdepth.html new file mode 100644 index 00000000..885edd9e --- /dev/null +++ b/pamdepth.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamdepth User Manual</TITLE></HEAD> +<BODY> +<H1>pamdepth</H1> +Updated: 08 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamdepth - change the maxval in a Netpbm image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamdepth</B> + +<I>newmaxval</I> + +[<I>netpbmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamdepth</b> reads a Netpbm image as input, scales all the pixel +values, and writes out the image with the new maxval. Scaling the +colors down to a smaller maxval will result in some loss of +information. + +<p>This program works on multi-image streams. + +<P>Be careful of off-by-one errors when choosing the new maxval. For +instance, if you want the color values to be five bits wide, use a +maxval of 31, not 32. + +<P>One important use of <B>pamdepth</B> is to convert a new format +2-byte-per-sample PNM file to the older 1-byte-per-sample format. +Before April 2000, essentially all raw (binary) format PNM files had a +maxval less than 256 and one byte per sample, and many programs may +rely on that. If you specify a <I>newmaxval</I> less than 256, the +resulting file should be readable by any program that worked with PNM +files before April 2000. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A>, +<A HREF="pam.html">pam</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="ppmdither.html">ppmdither</A> +<A HREF="ppmbrighten.html">ppmbrighten</A> +<A HREF="pamfunc.html">pamfunc</A> + +<h2 id="history">HISTORY</h2> + +<p><b>pamdepth</b> was new in Netpbm 10.32 (February 2006). It replaced +<b>pnmdepth</b>, by Jef Poskanzer. <b>pamdepth</b> is backward compatible +with <b>pamdepth</b> and adds the ability to process arbitrary PAM images +and the ability to process multi-image input streams. <b>pnmdepth</b> +handled only PNM images and ignored all but the the first in any stream. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamdice.html b/pamdice.html new file mode 100644 index 00000000..1495cc80 --- /dev/null +++ b/pamdice.html @@ -0,0 +1,141 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamdice User Manual</TITLE></HEAD> +<BODY> +<H1>pamdice</H1> +Updated: 29 July 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamdice - slice a Netpbm image into many horizontally and/or vertically + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamdice</B> + +<B>-outstem=</B><I>filenamestem</I> + +[<B>-width=</B><I>width</I>] + +[<B>-height=</B><I>height</I>] + +[<B>-hoverlap=</B><I>hoverlap</I>] + +[<B>-voverlap=</B><I>voverlap</I>] + +[<B>-verbose</B>] + +[<I>filename</I>] + +<P>You can use the minimum unique abbreviation of the options. You can use +two hyphens instead of one. You can separate an option name from its value +with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamdice</b> reads a PAM, PBM, PGM, or PPM image as input and +splits it horizontally and/or vertically into equal size pieces and +writes them into separate files as the same kind of image. You can +optionally make the pieces overlap. + +<P>See the <B>-outstem</B> option for information on naming of the +output files. + +<P>The <B>-width</B> and <B>-height</B> options determine the size of +the output pieces. + +<P><B>pnmcat</B> can rejoin the images. + +<p>One use for this is to make pieces that take less computer resources +than the whole image to process. For example, you might have an image +so large that an image editor can't read it all into memory or processes +it very slowly. With <b>pamdice</b>, you can split it into smaller pieces, +edit one a time, and then reassemble them. + +<p>Another use for this is to print a large image in small printer-sized +pieces that you can glue together. <b>ppmglobe</b> does a similar thing; +it lets you glue the pieces together into a sphere. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-outstem=</B>filenamestem + +<DD>This option determines the names of the output files. Each output +file is named +<I>filenamestem</I><B>_</B><I>y</I><B>_</B><I>x</I><B>.</B><I>type</I> +where <I>filenamestem</I> is the value of the <B>-outstem</B> option, +<I>x</I> and y are the horizontal and vertical locations, +respectively, in the input image of the output image, zero being the +leftmost and top, and <I>type</I> is <B>.pbm</B>, <B>.pgm</B>, +<B>.ppm</B>, or <B>.pam</B>, depending on the type of image. + +<DT><B>-width=</B><I>width</I> + +<DD>gives the width in pixels of the output images. The rightmost +pieces are smaller than this if the input image is not a multiple of +<I>width</I> pixels wide. + +<DT><B>-height=</B><I>height</I> + +<DD>gives the height in pixels of the output images. The bottom +pieces are smaller than this if the input image is not a multiple of +<I>height</I> pixels high. + +<DT><B>-hoverlap=</B><I>hoverlap</I> + +<DD>gives the horizontal overlap in pixels between output images. +Each image in a row will overlap the previous one by <I>hoverlap</I> +pixels. By default, there is no overlap. + +<p>This option was new in Netpbm 10.23 (July 2004). + +<DT><B>-voverlap=</B><I>voverlap</I> + +<DD>gives the vertical overlap in pixels between output images. +Each row of images will overlap the previous row by <I>voverlap</I> +pixels. By default, there is no overlap. + +<p>This option was new in Netpbm 10.23 (July 2004). + +<DT><B>-verbose</B> + +<DD>Print information about the processing to Standard Error. + +</DL> + +<H2 id="history">HISTORY</H2> + +<p>Before Netpbm 10.29 (August 2005), there was a limit of 100 slices +in each direction. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmcat.html">pnmcat</A></B>, +<B><A HREF="pgmslice.html">pgmslice</A></B>, +<B><A HREF="ppmglobe.html">ppmglobe</A></B> +<B><A HREF="pnm.html">pnm</A></B> +<B><A HREF="pam.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamditherbw.html b/pamditherbw.html new file mode 100644 index 00000000..e6d2cd9e --- /dev/null +++ b/pamditherbw.html @@ -0,0 +1,155 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamditherbw User Manual</TITLE></HEAD> +<BODY> +<H1>pamditherbw</H1> +Updated: 20 June 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamditherbw - dither grayscale image to black and white + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamditherbw</B> + +[<B>-floyd</B> | <B>-fs</B> | <B>-threshold</B> +| <B>-hilbert</B> +| <B>-dither8</B> | <B>-d8</B> | <B>-cluster3</B> +| <B>-c3</B> | <B>-cluster4</B> | <B>-c4</B> +| <B>-cluster8</B> | <B>-c8</B>] + +[<B>-value</B> <I>val</I>] + +[<B>-clump</B> <I>size</I>] + +[<I>pamfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pamditherbw</b> dithers a grayscale image. Dithering means turning +each shade of gray into a pattern of black and white pixels that, from +a distance, look the same as the gray. + +<p>The input should be a PGM image or a PAM image of tuple type +GRAYSCALE. However, <b>pamditherbw</b> doesn't check, so if you feed +it e.g. a PPM image, it will produce arbitrary results (actually, it +just takes the first channel of whatever you give it and treats it as +if it represented gray levels). + +<p>The output is a PAM with tuple type BLACKANDWHITE. You can turn +this into a PBM (if you need to use it with an older program doesn't +understand PAM) with <b>pamtopnm</b>. + +<P>To do the opposite of dithering, you can usually just scale the image +down and then back up again with <b>pamscale</b>, possibly smoothing or +blurring the result with <b>pnmsmooth</b> or <b>pnmconvol</b>. Or use +the special case program <b>pbmtopgm</b>. + +<p>To dither a color image (to reduce the number of pixel colors), +use <b>ppmdither</b>. + +<p>Another way to convert a grayscale image to a black and white image +is thresholding. Thresholding is simply replacing each grayscale pixel +with a black or white pixel depending on wether its brightness is above or +below a threshold. That threshold might vary. Simple thresholding is a +degenerate case of dithering, so <b>pamditherbw</b> does very simple +thresholding with its <b>-threshold</b> option. But <b>pamthreshold</b> +does more sophisticated thresholding. + + +<H2 id="options">OPTIONS</H2> + +<P>The default quantization method is boustrophedonic Floyd-Steinberg +error diffusion (<B>-floyd</B> or <B>-fs</B>). + +<p>Also available are simple thresholding (<B>-threshold</B>); Bayer's +ordered dither (<B>-dither8</B>) with a 16x16 matrix; and three +different sizes of 45-degree clustered-dot dither (<B>-cluster3</B>, +<B>-cluster4</B>, <B>-cluster8</B>). + +<p>A space filling curve halftoning method using the Hilbert curve is +also available (<B>-hilbert</B>). + +<P>Floyd-Steinberg will almost always give the best looking results; +however, looking good is not always what you want. For instance, +thresholding can be used in a pipeline with the <b>pnmconvol</b> tool, +for tasks like edge and peak detection. And clustered-dot dithering +gives a newspaper-ish look, a useful special effect. + +<P>The <B>-value</B> option alters the thresholding value for +Floyd-Steinberg and simple thresholding. It should be a real number +between 0 and 1. Above 0.5 means darker images; below 0.5 means +lighter. + +<P>The Hilbert curve method is useful for processing images before +display on devices that do not render individual pixels distinctly +(like laser printers). This dithering method can give better results +than the dithering usually done by the laser printers themselves. The +<B>-clump</B> option alters the number of pixels in a clump. This is +usually an integer between 2 and 100 (default 5). Smaller clump sizes +smear the image less and are less grainy, but seem to loose some grey +scale linearity. Typically a PGM image will have to be scaled to fit +on a laser printer page (2400 x 3000 pixels for an A4 300 dpi page), +and then dithered to a PBM image before being converted to a +postscript file. A printing pipeline might look something like: + +<pre> + pamscale -xysize 2400 3000 image.pgm | pamditherbw -hilbert | \ + pamtopnm | pnmtops -scale 0.25 > image.ps +</pre> + +<P>All options can be abbreviated to their shortest unique prefix. + +<H2 id="references">REFERENCES</H2> + +<p>The only reference you need for this stuff is "Digital +Halftoning" by Robert Ulichney, MIT Press, ISBN 0-262-21009-6. + +<P>The Hilbert curve space filling method is taken from "Digital +Halftoning with Space Filling Curves" by Luiz Velho, Computer +Graphics Volume 25, Number 4, proceedings of SIGRAPH '91, page +81. ISBN 0-89791-436-8 + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pamtopnm.html">pamtopnm</A>, +<A HREF="pgmtopgm.html">pgmtopgm</A>, +<A HREF="pbmtopgm.html">pbmtopgm</A>, +<A HREF="pamthreshold.html">pamthreshold</A>, +<A HREF="pbmreduce.html">pbmreduce</A>, +<A HREF="pnmconvol.html">pnmconvol</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="pam.html">pam</A>, +<A HREF="pnm.html">pnm</A>, + +<H2 id="history">HISTORY</H2> + +<p><b>pamditherbw</b> was new in Netpbm 10.23 (July 2004), but is +essentially the same program as <b>pgmtopbm</b> that has existed +practically since the beginning. <b>pamditherbw</b> differs from its +predecessor in that it properly deals with gamma adjustment and that +it accepts PAM input in addition to PGM and PBM and produces PAM +output. + +<p><b>pamditherbw</b> obsoletes <b>pgmtopbm</b>. + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#references">REFERENCES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamedge.html b/pamedge.html new file mode 100644 index 00000000..94fe3dce --- /dev/null +++ b/pamedge.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamedge User Manual</TITLE></HEAD> +<BODY> +<H1>pamedge</H1> +Updated: 11 January 2003 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamedge - edge-detect an image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamedge</B> [<I>imagefile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamedge</b> reads a Netpbm image (PNM or PAM) and produces +an image that outlines the edges. + +<p>The output image is of the same type as the input, except that the +maxval of the output is at least 255 and if the input is PBM, the output +is PGM. + +<p>You can pipe the result through <tt>pamditherbw -threshold</tt> and play +with the threshold value to get a PBM (bilevel image) of the edges. + +The edge detection technique used is to take the Pythagorean sum of +two Sobel gradient operators at 90 degrees to each other. For more +details see "Digital Image Processing" by Gonzalez and +Wintz, chapter 7. + +<P>The maxval of the output is the same as the maxval of the input +The effect is better with larger maxvals, so you may want to increase +the maxval of the input by running it through <B>pamdepth</B> first. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmenhance.html">pgmenhance</A></B>, +<B><A HREF="pamditherbw.html">pamditherbw</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>, +<B><A HREF="pamsharpness.html">pamsharpness</A></B>, +<B><A HREF="pamsharpmap.html">pamsharpmap</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="history"></a> +<h2>HISTORY</h2> + +<p><b>pamedge</b> was added to Netpbm in Release 10.14 (March 2003). +It replaced <b>pgmedge</b>, which was the same thing, but worked only on +PGM and PBM images. + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. Adapted to <b>pnmedge</b> Peter +Kichgessner in 1995, and then to <b>pamedge</b> by Bryan Henderson in +2003. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF=#history>HISTORY</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamendian.html b/pamendian.html new file mode 100644 index 00000000..772ec293 --- /dev/null +++ b/pamendian.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamendian User Manual</TITLE></HEAD> +<BODY> +<H1>pamendian</H1> +Updated: 16 March 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamendian - reverse endianness of a Netpbm image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamendian</B> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>All Netpbm formats that have samples in pure binary format with multiple +bytes are defined to have them in big endian (most significant byte first) +order. However, there exist variations on these formats, primarily developed +before official multibyte Netpbm formats existed, that are identical to +Netpbm formats in every respect except that samples are in little endian +(least signficant byte first) order. + +<P><B>pamendian</B> reverses the byte order of the sample to convert +between the two formats. If the input is true PAM, PGM, or PPM, the +output is the little endian variation on that format, and vice versa. + +<P>Programs that come with the Independent Jpeg Group's JPEG library +are known to use the little endian variation of PGM and PPM. + +<P>This program takes input only on Standard Input. Its output is +always on Standard Output. + +<P>You should never have to use this program with images generated by +programs in the Netpbm package or programs that use the Netpbm +libraries. If you do, that probably means something needs to be fixed +in those programs. The Netpbm converter for any graphics format that +represents numbers in little endian form should properly reverse the +bytes to create correct Netpbm output. + +<P>If you create a Netpbm image from a generic stream of samples, +using <B>rawtopgm</B> or <B>rawtoppm</B>, use options on those +programs to declare the endianness of your input, thus creating +correct endianness in your PGM or PPM output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="rawtopgm.html">rawtopgm</A></B>, +<B><A HREF="rawtoppm.html">rawtoppm</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="Table Of Contents"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> + diff --git a/pamenlarge.html b/pamenlarge.html new file mode 100644 index 00000000..f4cf6181 --- /dev/null +++ b/pamenlarge.html @@ -0,0 +1,81 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamenlarge User Manual</TITLE></HEAD> +<BODY> +<H1>pamenlarge</H1> +Updated: 26 September 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamenlarge - Enlarge a Netpbm image N times + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamenlarge</B> + +<I>N</I> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamenlarge</b> reads a Netpbm image as input, replicates its pixels +<I>N</I> times, and produces a Netpbm image as output. The output is +the same type of image as the input. + +<P>If you enlarge by a factor of 3 or more, you should probably add a +<b>pnmsmooth</b> step; otherwise, you can see the original pixels in +the resulting image. + +<P><b>pamenlarge</b> can enlarge only by integer factors. The slower +but more general <b>pamscale</B> can enlarge or reduce by arbitrary +factors. <b>pamscale</b> allows you to enlarge by resampling, which +gives you smoother enlargements. But it is much slower. + +<p><b>pamstretch</b> is another enlarging program that enlarges by +integer factors. It does a simple kind of resampling that gives you a +smoothed enlargement with less computational cost. + +<p><b>pbmreduce</b> can reduce by integer factors, but only for PBM +images. + +<h2 id="history">HISTORY</h2> + +<p><b>pamenlarge</b> was new in Netpbm 10.25 (October 2004). It is +designed as a replacement for <b>pnmenlarge</b> by Jef Poskanzer, +which was in Pbmplus as far back as 1989. The major difference is that +<b>pamenlarge</b> can enlarge PAM format images in addition to PNM. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmreduce.html">pbmreduce</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="pamstretch.html">pamstretch</A>, +<A HREF="pnmsmooth.html">pnmsmooth</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamfile.html b/pamfile.html new file mode 100644 index 00000000..f78ba740 --- /dev/null +++ b/pamfile.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamfile User Manual</TITLE></HEAD> +<BODY> +<H1>pamfile</H1> +Updated: 11 July 2006; +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamfile - describe a Netpbm (PAM or PNM) file + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamfile</B> + +[<B>-allimages</B>] +[<B>-count</B>] +[<B>-comments</B>] + +[<I>file</i> ...] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pamfile</b> reads one or more Netpbm files as input and writes +out short descriptions of the image type, size, etc. This is partly +for use in shell scripts, so the format is not particularly pretty. + +<p>By default, <b>pamfile</b> reads only the header of the input file. +If that file is a pipe, that might cause problems for the process that is +feeding the pipe. In that case, see the <b>-allimages</b> option. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-allimages</B> + +<DD>This option causes <b>pamfile</b> to describe every image in each +input file. Without this option, <B>pamfile</B> describes only the +first image in each input file. + +<p>This option also causes <b>pamfile</b> to read all the images from +the input stream, whereas without it, <b>pamfile</b> reads only the header +of the first one. If the input stream is from a pipe, the process that is +feeding the pipe might require the entire stream to be consumed. In +that case, use this option even if the stream contains only one image. + +<p>This option has no effect if you also specify <b>-count</b>. + +<p>Note that before July 2000, a file could not contain more than one +image and many programs ignore all but the first. + +<p>This option was new in Netpbm 9.5 (July 2000). + +<dt><b>-comments</b> + +<dd>This option causes <b>pamfile</b> to include for each PAM image +a report of the comments from the header of the image. + +<p>For a PBM, PGM, or PPM image, <b>pamfile</b> reports there are no +comments, even if there are. + +<p>This option was new in Netpbm 10.35 (August 2006). + +<dt><b>-count</b> + +<dd>This option causes <b>pamfile</b> to display only a count of how many +images are in each input file. + +<p>As with <b>-allimages</b>, this causes <b>pamfile</b> to read all the +images. + +<p>This option was new with Netpbm 10.31 (December 2005). + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="ppmhist.html">ppmhist</A></B>, +<B>file</B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/pamflip.html b/pamflip.html new file mode 100644 index 00000000..15f0e5b4 --- /dev/null +++ b/pamflip.html @@ -0,0 +1,213 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamflip User Manual</TITLE></HEAD> +<BODY> +<H1>pamflip</H1> +Updated: 18 February 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamflip - flip or rotate a PAM or PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamflip</B> +{ +<B>-leftright</B> | <B>-lr</B> | +<B>-topbottom</B> | <B>-tb</B> | +<B>-transpose</B> | <B>-xy</B> | +<B>-rotate90</B> | <B>-r90</B> | <B>-cw</B> | +<B>-rotate270</B> | <B>-r270</B> | <B>-ccw</B> | +<B>-rotate180</B> | <B>-r180</B> +<B>-null</B> | +<B>-xform=</b><i>xform1</i><b>,</b><i>xform2</i>... +} +[<B>-memsize=</b><i>mebibytes</i>] +[<B>-pagesize=</b><i>bytes</i>] +[<I>pamfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and +its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamflip</b> flips a PAM or PNM image top for bottom or left for right, +or transposes it horizontal for vertical, or rotates it 1, 2, or 3 +quarter turns. + +<p>To rotate at other angles, use <b>pnmrotate</b>. It is much slower, +though. + +<p>The input image is <i>pamfile</i>, or Standard Input if <i>pamfile</i> +is not specified. + +<p>To flip/rotate a JFIF (JPEG) image losslessly, use <b>jpegtran</b>. +<b>jpegtran</b> is part of the Independent Jpeg Group's compression +library package, not part of Netpbm. The normal Netpbm way to flip a +JFIF file would be to convert it to PNM, use <b>pamflip</b>, and convert +back to JFIF. But since JPEG compression is lossy, the resulting image +would have less quality than the original. <b>jpegtran</b>, on the other +hand, can do this particular transformation directly on the compressed +data without loss. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p>You must supply exactly one of the following options: + +<p><b>pamflip</b>'s predecessor (before Netpbm 10.7 - August 2002) +<b>pnmflip</b> did not have the <b>-xform</b> option and instead +allowed you to specify any number of the other options, including +zero. It applied all the indicated transformations, in the order +given, just like with <b>pamflip</b>'s <b>-xform</b> option. (Reason +for the change: this kind of interpretation of options is inconsistent +with the rest of Netpbm and most of the Unix world, and thus hard to +understand and to implement). + +<DL> +<DT><B>-leftright</B> +<DT><B>-lr</B> +<DD>Flip left for right. + +<DT><B>-topbottom</B> +<DT><B>-tb</B> +<DD>Flip top for bottom. + +<DT><B>-transpose</B> +<DT><B>-xy</B> +<DD>Transpose horizontal for vertical. I.e. make the pixel at (x,y) be +at (y,x). + +<DT><B>-rotate90</B> +<DT><B>-r90</B> +<DT><B>-ccw</B> +<DD>Rotate counterclockwise 90 degrees. + +<DT><B>-rotate180</B> +<DT><B>-r180</B> +<DD>Rotate 180 degrees. + +<DT><B>-rotate270</B> +<DT><B>-r270</B> +<DT><B>-cw</B> +<DD>Rotate counterclockwise 270 degrees (clockwise 90 degrees) + +<DT><B>-null</b> +<DD>No change. (The purpose of this option is the +convenience of programs that invoke <b>pamflip</b> after computing the +kind of transformation desired, including none at all). + +<P>This option was new in Netpbm 10.13 (December 2002). + +<DT><B>-xform=</b><i>xform1</i><b>,</b><i>xform2</i>... + +<DD>Apply all the transforms listed, in order. The valid values for +the transforms are as follows and have the same meanings as the +identically named options above. +<UL> +<LI>leftright +<LI>topbottom +<LI>transpose +</UL> + +<P>This option was new in Netpbm 10.13 (December 2002). + +</DL> + +<p>The following options help <b>pamflip</b> use memory efficiently. +Some flipping operations on very large images can cause <b>pamflip</b> +to have a very large working set, which means if you don't have enough +real memory, the program can page thrash, which means it takes a +ridiculous amount time to run. If your entire image fits in real +memory, you don't have a problem. If you're just flipping top for +bottom or left for right, you don't have a problem. Otherwise, pay +attention. If you're interested in the details of the thrashing +problem and how <b>pamflip</b> approaches it, you're invited to read +a complete explanation in comments in the source code. + +<dl> +<dt><b>-memsize=</b><i>mebibytes</i> + +<dd><i>mebibytes</i> is the size in mebibytes (aka megabytes) of +<em>real</em> memory (not virtual) available for <b>pamflip</b>. +<b>pamflip</b> does nothing special to allocate real memory or control +it's allocation -- it gets whatever it gets just by referencing +virtual memory normally. This is the maximum amount that +<b>pamflip</b> can be expected to end up with by doing that. This is +just about impossible for you to know, of course, but you can +estimate. The total real memory in your system should be a major +factor in your estimate. + +<p>When you specify <b>-memsize</b> and are doing a row for column type +of transformation, <b>pamflip</b> does the transformation in multiple +passes, each one with a working set size less than the specified value. + +<p>If your estimate is even slightly too large, it's the same as +infinity. If you estimate too small, <b>pamflip</b> will use more +passes than it needs to, and thus will slow down proportional to the +underestimate. + +<p>If you do not specify <b>-memsize</b>, <b>pamflip</b> assumes infinite +real memory and does the entire transformation in one pass. + +<p>This option did not exist before Netpbm 10.7 (August 2002). + +<dt><b>-pagesize=</b><i>bytes</i> +<dd><i>bytes</i> is the size in bytes of a paging unit -- the amount of +memory that gets paged in or out as an indivisible unit -- in your system. +The default is 4KiB. + +<p>This option did not exist before Netpbm 10.7 (August 2002). + +</dl> + +Miscellaneous options: +<dl> +<dt><b>-verbose</b> +<dd>This option causes <b>pamflip</b> to issue messages to Standard Error +about its progress. +</dl> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmrotate.html">pnmrotate</A>, +<A HREF="pnm.html">pnm</A>, +<b>jpegtran</b> manual +<A NAME="lbAG"> </A> + +<A NAME="history"></A> +<H2>HISTORY</H2> + +<P><b>pamflip</b> replaced <b>pnmflip</b> in Netpbm 10.13 (December 2002). +<b>pamflip</b> is backward compatible, but also works on PAM images. + + +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<li><A HREF="#lbAB">NAME</A> +<li><A HREF="#lbAC">SYNOPSIS</A> +<li><A HREF="#lbAD">DESCRIPTION</A> +<li><A HREF="#lbAE">OPTIONS</A> +<li><A HREF="#lbAF">SEE ALSO</A> +<li><A HREF="#history">HISTORY</A> +<li><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamfunc.html b/pamfunc.html new file mode 100644 index 00000000..478863a2 --- /dev/null +++ b/pamfunc.html @@ -0,0 +1,166 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamfunc User Manual</TITLE></HEAD> + +<BODY> +<H1>pamfunc</H1> +Updated: June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamfunc - Apply simple arithmetic functions to a Netpbm image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamfunc</B> +{ +<b>-multiplier=</b><i>realnum</i> | +<b>-divisor=</b><i>realnum</i> | +<b>-adder=</b><i>integer</i> | +<b>-subtractor=</b><i>integer</i> | +<b>-min=</b><i>wholenum</i> | +<b>-max=</b><i>wholenum</i> +} +[<I>filespec</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamfunc</b> reads a Netpbm image as input and produces a Netpbm +image as output, with the same format, maxval, and dimensions as the +input. <b>pamfunc</b> applies a simple transfer function to each +sample in the input to generate the corresponding sample in the +output. The options determine what function. + +<P><b>pamarith</b> is the same thing, except only for PNM images, for +binary functions -- it takes two PNM images as input and applies a +specified simple arithmetic function (e.g. addition) on pairs of +samples from the two to produce the single output image. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-multiplier=<i>realnum</i></B> + +<DD> + <P>This option makes the transfer function that of multiplying by + <i>realnum</i>. <i>realnum</i> must be nonnegative. If the result + is greater than the image maxval, it is clipped to the maxval. + + <P>Where the input is a PGM or PPM image, this has the effect of + dimming or brightening it. For a different kind of brightening, + see <a href="ppmbrighten.html"><b>ppmbrighten</b></a> and + <a href="ppmflash.html"><b>ppmflash</b></a> + + <P>Also, see <a href="ppmdim.html"><b>ppmdim</b></a>, which does the + same thing as <b>pamfunc -multiplier</b> on a PPM image with a + multiplier between 0 and 1, + except it uses integer arithmetic, so it may be faster. + + <P>And <a href="ppmfade.html"><b>ppmfade</b></a> can generate a whole + sequence of images of brightness declining to black or increasing to + white, if that's what you want. + +<DT><B>-divisor=<i>realnum</i></B> + +<DD> + <P>This option makes the transfer function that of dividing by + <i>realnum</i>. <i>realnum</i> must be nonnegative. If the result + is greater than the image maxval, it is clipped to the maxval. + + <P>This is the same function as you would get with <b>-multiplier</b>, + specifying the multiplicative inverse of <i>realnum</i>. + +<DT><B>-adder=<i>integer</i></B> + +<DD> + <P>This option makes the transfer function that of adding + <i>wholenum</i>. If the result is greater than the image maxval, + it is clipped to the maxval. If it is less than zero, it is + clipped to zero. + + <p>Note that in mathematics, this entity is called an "addend," + and an "adder" is a snake. We use "adder" because + it makes more sense. + +<DT><B>-subtractor=<i>integer</i></B> + +<DD> + <P>This option makes the transfer function that of subtracting + <i>wholenum</i>. If the result is greater than the image maxval, + it is clipped to the maxval. If it is less than zero, it is + clipped to zero. + + <p>Note that in mathematics, this entity is called a + "subtrahend" rather than a "subtractor." We + use "subtractor" because it makes more sense. + + <P>This is the same function as you would get with <b>-multiplier</b>, + specifying the negative of <i>integer</i>. + +<DT><B>-min=<i>wholenum</i></B> + +<DD> + <P>This option makes the transfer function that of taking the + maximum of the argument and <i>wholenum</i>. I.e the minimum + value in the output will be <i>wholenum</i>. + + If <i>wholenum</i> is greater than the maxval, though, every sample + in the output will be maxval. + +<DT><B>-max=<i>wholenum</i></B> + +<DD> + <P>This option makes the transfer function that of taking the + minimum of the argument and <i>wholenum</i>. I.e the maximum + value in the output will be <i>wholenum</i>. + + If <i>wholenum</i> is greater than the maxval, the function is + idempotent -- the output is identical to the input. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmdim.html">ppmdim</A></B>, +<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="pamarith.html">pamarith</A></B>, +<b><A HREF="pamsummcol.html">pamsummcol</A></b>, +<b><A HREF="pamsumm.html">pamsumm</A></b>, +<B><A HREF="ppmfade.html">ppmfade</A></B>, + +<B><A HREF="pam.html">pam</A></B>, + +<B><A HREF="pnm.html">pnm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p>This program was added to Netpbm in Release 10.3 (June 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamgauss.html b/pamgauss.html new file mode 100644 index 00000000..cef20227 --- /dev/null +++ b/pamgauss.html @@ -0,0 +1,128 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamgauss User Manual</TITLE></HEAD> +<BODY> +<H1>pamgauss</H1> +Updated: 8 May 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="name"> </A> +<H2>NAME</H2> + +pamgauss - create a two dimensional gaussian function as a PAM image + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>pamgauss</B> +<i>width</i> +<i>height</i> +<b>-sigma=</b><i>number</i> +[<b>-maxval=</b><i>number</i>] +[<b>-tupletype=</b><i>string</i>] + + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + + +<A NAME="examples"> </A> +<H2>EXAMPLES</H2> + +<pre> + pamgauss 3 3 -sigma=.5 -tupletype=GRAYSCALE | pamtopnm >gauss.pgm + pnmconvol -nooffset gauss.pgm myimage.ppm >blurred.ppm +</pre> + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamgauss</b> generates a one-plane PAM image whose samples are a +gaussian function of their distance from the center of the image. I.e. +the sample value is highest in the center and goes down, in a bell curve +shape, as you move away from the center. + +<p>The values are scaled so that the area under the surface of the +two-dimensional Gaussian function is the maxval of the image. + +<p>You can use this image, converted to PGM, as a convolution kernel +with <b>pnmconvol</b> to blur an image. (This technique is known as +Gaussian blurring). + +<i>width</i> and <i>height</i> are the dimensions of the image that +<b>pamgauss</b> generates. Mathematically speaking, they are the domain +of the two dimensional gaussian function. + +<p>The sum of all the samples is equal to the image's maxval (within +rounding error). This is true even if you clip the Gaussian function +by making the image too small. If you want to be sure you get a whole +Gaussian function, make sure that you choose a sigma and image +dimensions so that if you made it any larger, the sample values at the +edges would be zero. + +<p>The output image is PAM. To turn it into a PGM that you can use +with <b>pnmconvol</b>, specify <b>-tupletype=GRAYSCALE</b> and pass +the output through <b>pamtopnm</b>. You must use the <b>-nooffset</b> +option on <b>pnmconvol</b> because zero means zero in the PAM that +<b>pamgauss</b> generates. + +<A NAME="options"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<dl> +<dt><b>-sigma=</b><i>number</i> + +<dd>This is the sigma parameter of the Gaussian function (if it were a +Gaussian probability function, this would be its standard deviation). +The higher the number, the more spread out the function is. Normally, +you want to make this number low enough that the function reaches zero +value before the edge of your image. + +<p><i>number</i> is in units of pixels. + +<p>This option is required. There is no default. + +<dt><b>-maxval=</b><i>number</i> +<dd>This is the maxval for the output image. It defaults to 255. + +<dt><b>-tupletype=</b><i>string</i> +<dd> +This is the value of the "tuple_type" attribute of the created PAM image. +It can be any string up to 255 characters. If you don't specify this, +<b>pamgauss</b> generates a PAM with unspecified tuple type. + +</dl> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmconvol.html">pnmconvol</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pgmkernel.html">pgmkernel</A></B>, +<B><A HREF="pamseq.html">pamseq</A></B>, +<B><A HREF="pam.html">pam</A></B> + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>pamgauss</b> was new in Netpbm 10.23 (July 2004). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#examples">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pamgradient.html b/pamgradient.html new file mode 100644 index 00000000..b6369536 --- /dev/null +++ b/pamgradient.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> +<HEAD> + <TITLE>Pamgradient User Manual</TITLE> +</HEAD> +<BODY> + +<H1>pamgradient</H1>Updated: 21 October 2005 +<BR> +<A href="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> +pamgradient - create a four-corner gradient PAM or PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamgradient</B> +[<B>-maxval=</B><I>maxval</I>] +<I>color-tl</i> <i>color-tr</i> <i>color-bl</i> <i>color-br</i> +<br> +<i>width</i> <i>height</I> + + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<P>This program is part of <A href="index.html">Netpbm</A>. + +<P><B>pamgradient</B> creates an image of the specified +dimensions <I>width</I> by <I>height</I> which contains a smooth, +two-dimensional gradient between the specified colors of the four +corners (from top left to bottom right). + +<P>Specify the colors as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + + +<P>If all four colors are gray values, <B>pamgradient</B> creates a +grayscale image (PAM tuple type GRAYSCALE). Otherwise, it creates +a color image (PAM tuple type RGB). + +<H2 id="options">OPTIONS</H2> + +<DL compact> + <DT><B>-maxval=</B><I>maxval</I> + + <DD>maxval of the generated image. (See <a href="pam.html">PAM</a> and + <a href="pnm.html">PNM</a> specifications). +</DL> + +<H2 id="see_also">SEE ALSO</H2> + +<A href="ppmmake.html"><b>ppmmake</b></A>, +<A href="ppmrainbow.html"><b>ppmrainbow</b></A>, +<A href="pgmramp.html"><b>pgmramp</b></A>, +<A href="ppmpat.html"><b>ppmpat</b></A>, +<A href="pam.html">pam</A>, +<A href="pnm.html">pnm</A> + +<H2 id="note">NOTE</H2> + +<P>Only the top left corner of the generated image has exactly +the specified color. The color of the top right corner is a bit +shifted to the left, the bottom left corner a bit up, and the +bottom right corner left and up. This ensures nice transitions +when combining adjacent (very narrow) gradients, and doesn't play +a role when the gradient butts against a solid surface. + +<P>This effect is created by the integer arithmetic used for the +interpolation of the color values, and since it doesn't make a +difference for all practical purposes I might as well sell it as a +feature. + +<h2 id="history">HISTORY</h2> + +<p><b>pamgradient</b> was new in Netpbm 10.31 (December 2005). + +<H2 id="author">AUTHOR</H2> + +<P>pamgradient was written by Daniel Haude in October 2005. +<HR> + +<H2 id="index">Table Of Contents</H2> + +<UL> + <LI><A href="#name">NAME</A> + + <LI><A href="#synopsis">SYNOPSIS</A> + + <LI><A href="#description">DESCRIPTION</A> + + <LI><A href="#options">OPTIONS</A> + + <LI><A href="#see_also">SEE ALSO</A> + + <LI><A href="#note">NOTE</A> + + <LI><A href="#history">HISTORY</A> + + <LI><A href="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamlookup.html b/pamlookup.html new file mode 100644 index 00000000..fb938a88 --- /dev/null +++ b/pamlookup.html @@ -0,0 +1,294 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pamlookup User Manual</title></HEAD> +<BODY> +<H1>pamlookup</H1> +Updated: 10 November 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamlookup - map an image to a new image by using it as indices into a table + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamlookup</B> +<B>-lookupfile=</B><i>lookupfile</i> +<B>-missingcolor=</B><i>color</i> +[<B>-fit</B>] +<I>indexfile</I> + + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamlookup</b> takes a two dimensional array of indices and a lookup +table as input. For each position in the index array, it looks up the index +in the lookup table and places the result of the lookup in the output image. +The output thus has the same width and height as the index image, and tuple +types determined by the lookup table. + +<p>An index is either a whole number or an ordered pair of whole +numbers. If the index image has a depth of one, each index in it is a +whole number: the value of the one sample. If the index image has a +depth greater than one, each index in it is an ordered pair of the first +and second samples in the relevant tuple. + +<p>The lookup table is a PAM or PNM image. If the index image +contains whole number indices, the lookup image is a single row and +the index is a column number. The lookup result is the value of the +tuple or pixel at the indicated column in the one row in the lookup +table. If the index image contains ordered pair indices, the first +element of the ordered pair is a row number and the second element of +the ordered pair is a column number. The lookup result is the value +of the tuple or pixel at the indicated row and column in the lookup +table. + +<p>For example: Consider an index image consisting of a 3x2x1 PAM +as follows: + +<table summary="3x2x1 index image"> +<?makeman l l l. ?> +<tr> <td>0</td> <td>1</td> <td>0</td> </tr> +<tr> <td>2</td> <td>2</td> <td>2</td> </tr> +</table> + +and a lookup table consisting of a 3x1 PPM image as follows: + +<table summary="3x1 lookup table"> +<?makeman l l l. ?> +<tr> <td>red</td> <td>yellow</td> <td>beige</td> </tr> +</table> + +The lookup table above says Index 0 corresponds to the color red, +Index 1 corresponds to yellow, and Index 2 corresponds to beige. The output +of <b>pamlookup</b> is the following PPM image: + +<table summary="output image"> +<?makeman l l l. ?> +<tr> <td>red</td> <td>yellow</td> <td>red</td> </tr> +<tr> <td>beige</td> <td>beige</td> <td>beige</td> </tr> +</table> + +<p>Now let's look at an example of the more complex case where the +indices are ordered pairs of whole numbers instead of whole numbers. +Our index image will be this 3x2x2 PAM image: + +<table summary="3x2x2 index image"> +<?makeman l l l. ?> +<tr> <td>(0,0)</td> <td>(0,1)</td> <td>(0,0)</td> </tr> +<tr> <td>(1,1)</td> <td>(1,0)</td> <td>(0,0)</td> </tr> +</table> + +Our lookup table for the example will be this two dimensional PPM: + +<table summary="2x2 lookup table"> +<?makeman l l l. ?> +<tr> <td>red</td> <td>yellow</td> </tr> +<tr> <td>green</td> <td>black</td> </tr> +</table> + +This lookup table says Index (0,0) corresponds to the color red, +Index (0,1) corresponds to yellow, Index (1,0) corresponds to green, +and Index (1,1) corresponds to black. The output of <b>pamlookup</b> +is the following PPM image: + +<table summary="output image"> +<?makeman l l l. ?> +<tr> <td>red</td> <td>yellow</td> <td>red</td> </tr> +<tr> <td>black</td> <td>green</td> <td>red</td> </tr> +</table> + +<p>If an index specifies a row or column that exceeds the dimensions of +the lookup table image, <b>pamlookup</b> uses the value from the top left +corner of the lookup image, or the value you specify with the +<b>-missingcolor</b> option. + +<p>The <i>indexfile</i> argument identifies the file containing the index +PAM or PNM image. <b>-</b> means Standard Input. The mandatory +<b>-lookupfile</b> option identifies the file containing the lookup table +image. Again, <b>-</b> means Standard Input. It won't work if both the +index image file and lookup table file are Standard Input. The output image +goes to Standard Output. + +<p>You can use <b>ppmmake</b> and <b>pnmcat</b> to create a lookup table file. + +<p>If you want to use two separate 1-plane images as indices (so that your +output reflects the combination of both inputs), use <b>pamstack</b> to combine +the two into one two-plane image (and use a 2-dimensional lookup table image). + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-lookupfile=</B><i>lookupfile</i> + +<DD><i>lookupfile</i> names the file that contains the PAM or PNM +image that is the lookup table. This option is mandatory. + +<DT><B>-missingcolor=</B><i>color</i> + +<DD>This option is meaningful only if the lookup image (and therefore the +output) is a PNM image. <i>color</i> specifies the color that +is to go in the output wherever the index from the input is not present +in the lookup table (not present means the index exceeds the dimensions +of the lookup image -- e.g. index is 100 but the lookup image is a 50 x 1 +PPM). + +<p>If you don't specify this option of <b>-fit</b>, <b>pamlookup</b> +uses the value from the top left corner of the lookup image whenever +an index exceeds the dimensions of the lookup image. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<P>Another way to deal with a too-small lookup image is to use the +<b>-fit</b> option. + +<DT><B>-fit</B> + +<DD>This option says to shrink or expand the lookup image as necessary +to fit the indices present in the index image, per the index image's +maxval. For example, if your index image has a single plane and a +maxval of 255 and your lookup image is 1 row of 10 columns, +<b>pamlookup</b> stretches your lookup image to 255 columns before +doing the lookups. <b>pamlookup</b> does the stretching (or +shrinking) with the <a href="pamscale.html"><b>pamscale</b></a> +program. + +<p>When you use <b>-fit</b>, <b>pamlookup</b> never fails or warns you +due to invalid lookup image dimensions, and the <b>-missingcolor</b> +option has no effect. + +</DL> + +<A NAME="examples"> </a> +<H2>EXAMPLES</H2> + +<h3>Example: rainfall map</h3> + +<p>Say you have a set of rainfall data in a single plane PAM image. +The rows and columns of the PAM indicate lattitude and longitude. The +sample values are the annual rainfall in (whole) centimeters. The highest +rainfall value in the image is 199 centimeters. The image is in the file +rainfall.pam. + +<p>You want to produce a PPM rainfall map with green for the wettest places, +red for the driest, and other colors in between. + +<p>First, compose a lookup table image, probably with a graphical editor +and the image blown way up so you can work with individual pixels. The +image must have a single row and 200 columns. Make the leftmost pixel +red and the rightmost pixel green and choose appropriate colors in between. +Call it colorkey.ppm. + +<pre> +<kbd> + pamlookup rainfall.ppm -lookupfile=colorkey.ppm >rainfallmap.ppm +</kbd> +</pre> + +<p>Now lets say you're too lazy to type in 200 color values and nobody really +cares about the places that have more than 99 centimeters of annual +rainfall. In that case, just make colorkey.ppm 100 columns wide and do +this: + +<pre> +<kbd> + pamlookup rainfall.ppm -lookupfile=colorkey.ppm -missingcolor=black \ + >rainfallmap.ppm +</kbd> +</pre> + +Now if there are areas that get more than 100 centimeters of rainfall, they +will just show up black in the output. + +<h3>Example: graphical diff</h3> +<P> +Say you want to compare two PBM (black and white) images visually. Each +consists of black foreground pixels on a white background. You want to +create an image that contains background where both images contain background +and foreground where both images contain foreground. But where Image 1 +has a foreground pixel and Image 2 does not, you want red in the output; +where Image 2 has a foreground pixel and Image 1 does not, you want green. + +<p>First, we create a single image that contains the information from both +input PBMs: + +<pre> +<kbd> + pamstack image1.pbm image2.pbm >bothimages.pam +</kbd> +</pre> + +Note that this image has 1 of 4 possible tuple values at each location: +(0,0), (0,1), (1,0), or (1,1). + +<p> +Now, we create a lookup table that we can index with those 4 values: + +<pre> +<kbd> + ppmmake white 1 1 >white.ppm + ppmmake black 1 1 >black.ppm + ppmmake red 1 1 >red.ppm + ppmmake green 1 1 >green.ppm + pnmcat -leftright black.ppm red.ppm >blackred.ppm + pnmcat -leftright green.ppm white.ppm >greenwhite.ppm + pnmcat -topbottom blackred.ppm greenwhite.ppm >lookup.ppm +</kbd> +</pre> + +<p>Finally, we look up the indices from our index in our lookup table and +produce the output: + +<pre> +<kbd> + pamlookup bothimages.ppm -lookupfile=lookup.ppm >imagediff.ppm +</kbd> +</pre> + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmremap.html">pnmremap</A>, +<A HREF="ppmmake.html">ppmmake</A>, +<A HREF="pnmcat.html">pnmcat</A>, +<A HREF="pamstack.html">pamstack</A>, +<A HREF="pnm.html">pnm</A>, +<A HREF="pam.html">pam</A> + + +<A NAME="history"></A> +<H2>HISTORY</h2> + +<p><b>pamlookup</b> was new in Netpbm 10.13 (December 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL COMPACT> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> + + + diff --git a/pammasksharpen.html b/pammasksharpen.html new file mode 100644 index 00000000..8fc14e3f --- /dev/null +++ b/pammasksharpen.html @@ -0,0 +1,142 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pammasksharpen User Manual</TITLE></HEAD> +<BODY> +<H1>pammasksharpen</H1> +Updated: 14 June 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pammasksharpen - Sharpen an image via an unsharp mask + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pammasksharpen</B> +[<b>-sharpness=</b><i>realnum</i> +[<b>-threshold=</b><i>realnum</i> +<I>maskfile</I> +[<I>inputfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + + +<H2 id="examples">EXAMPLES</H2> + +<pre> + pamgauss 5 5 -sigma=.7 -tupletype=GRAYSCALE | pamtopnm >gauss.pgm + pnmconvol gauss.pgm myimage.ppm >blurred.ppm + pammasksharpen blurred.ppm myimage.ppm >sharpened.ppm +</pre> + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pammasksharpen</b> reads a Netpbm image as input and produces a +sharpened version of it, in the same format, as output. It does this +via an unsharp mask, which you supply as another Netpbm image. + +<p>An unsharp mask is generally a blurred version of the original +image. The sharpening computation is this: Calculate the +"edgeness" of a sample in the input image as the signed +difference between the sample value and the corresponding sample in +the unsharp mask. This tells how different the pixel is from its +neighbors. Add a multiple of the edgeness to the original sample to +get the corresponding output sample. Clip as necessary. This causes +pixels that are brighter than their neighbors to get even brighter, +while pixels that are dimmer than their neighbors get even dimmer. +This makes edges -- places where pixel values change quickly in space +-- stand out more. + +<p>The unsharp mask must be the same dimensions and have the same maxval +as the input image. + +<h3>The Unsharp Mask</h3> + +<p>You usually create the unsharp mask as a gaussian blur of the +original image, which you can do using <b>pamgauss</b> and +<b>pnmconvol</b> as in the example above. The convolution kernel you +use with <b>pnmconvol</b> is normally a square with side length an odd +number of pixels. + +<p>When you create an unsharp mask like this, you will have to choose +the side length of the convolution kernel. That length implements the +parameter of unsharp mask sharpening usually known as +"radius." In particular, a radius of R pixels corresponds to a +convolution kernel 2R+1 pixels on a side. + +<p>Radius is a very important parameter; you can ruin an image with a +radius too large. You can safely use the highest radius with an +inanimate object, while a human face demands the least. Landscapes +fall in between. But it really depends on the size of the details. +Fine detail needs a smaller radius, or else you may obliterate tiny +detail of the same size as the Radius width. A large image often has +larger detail (more pixels involved), so can use a larger radius. +Radius and sharpness (see <b>-sharpness</b> option) interact: reducing +one allows you to increase the other. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-sharpness=</B><I>realnum</I> + +<DD>This specifies the magnitude of the sharpening. It is the multiple +of edgeness that gets added to each sample as described above. + +<p><i>realnum</i> is a nonnegative real decimal number. Zero means +no sharpening at all. + +<p>This parameter is known as "amount" in ImageMagick. + +<p>The default is 1.0. + +<p>This option was new in Netpbm 10.30 (October 2005). Before that, +the sharpness was always 1.0. + +<DT><B>-threshold=</B><I>realnum</I> + +<dd>This minimum amount of edgeness that will be considered edgeness +at all. i.e. if the magnitude of the edgeness is less than this, +<b>pammasksharpen</b> will treat the edgeness as zero. + +<p>A nonzero value may be necessary here to avoid speckling in smooth +areas. + +<p>This is a fraction of the maxval (so it is in the range [0, 1.0]). + +<p>The default is 0. + +<p>This option was new in Netpbm 10.34 (June 2006). + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnmconvol.html">pnmconvol</A>, +<A HREF="pamedge.html">pamedge</A>, +<A HREF="pamsharpness.html">pamsharpness</A>, +<A HREF="pamsharpmap.html">pamsharpmap</A>, +<A HREF="pamarith.html">pamarith</A>, +<A HREF="pnm.html">pnm</A>, +<A HREF="pam.html">pam</A> + + +<H2 id="history">HISTORY</h2> + +<p><b>pammasksharpen</b> was new in Netpbm 10.23 (July 2004). + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pammixinterlace.html b/pammixinterlace.html new file mode 100644 index 00000000..a431be2c --- /dev/null +++ b/pammixinterlace.html @@ -0,0 +1,75 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pammixinterlace User Manual</TITLE></HEAD> +<BODY> +<H1>pammixinterlace</H1> +Updated: 02 July 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pammixinterlace - mix adjacent lines to merge interlaced images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pammixinterlace</B> + +[<I>infile</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pammixinterlace</B> is meant to operate on an image which is the +interlacing of two images, where raster rows 0, 2, 4, etc. are from +one image and rows 1, 3, 5, etc. are from another. (See below for +why you might expect to encounter such an image). + +<p><b>pammixinterlace</b> makes each row of the output a mixture +of the corresponding row of the input and its two neighbors. It uses +half of the main row and a quarter each of the two neighbor rows. + +<P>This can be useful if the image is a video capture from an +interlaced video source. In that case, each row shows the subject +1/60 second before or after the two rows that surround it. If the +subject is moving, this can detract from the quality of the image. + +<p>In video data streams, you often find each frame contains only half +the rows of the image -- the odd half or the even half. The displayer +of the stream displays the rows in their proper positions on a CRT as +they come in. When you display the rows in this order, the CRT has +less flicker because a particular area of the screen gets refreshed +twice as often. In the process of capturing such a stream, computers +often generate the interlaced image of the type that +<b>pammixinterlace</b> works with. But this interlaced image, when +displayed on a CRT, does not look the same as if a displayer were +rendering the stream directly on a CRT as it arrived, because of the +timing of when the various pixels get drawn and subsequently fade. +That's why you need something like <b>pammixinterlace</b>. + +<p>You may prefer the effect of simply extracting one of two images. +You can do that with <b>pamdeinterlace</b>. + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamdeinterlace.html">pamdeinterlace</A></B>, +<B><A HREF="pam.html">pam</A></B> +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamoil.html b/pamoil.html new file mode 100644 index 00000000..8bae9fa1 --- /dev/null +++ b/pamoil.html @@ -0,0 +1,94 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamoil User Manual</TITLE> +</HEAD><BODY> +<H1>pamoil</H1> +Updated: 25 June 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamoil - turn a PAM image into an oil painting + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamoil</B> + +[<B>-n</B> <I>N</I>] + +[<I>pamfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamoil</b> reads a Netpbm image as input and does an "oil +transfer", and writes the same type of Netpbm image as output. + +<P>The oil transfer is described in "Beyond Photography" by +Holzmann, chapter 4, photo 7. It's a sort of localized smearing. + +<P>The smearing works like this: First, assume a grayscale image. For +each pixel in the image, <B>pamoil</B> looks at a square neighborhood +around it. <B>pamoil</B> determines what is the most common pixel +intensity in the neighborhood, and puts a pixel of that intensity into +the output in the same position as the input pixel. + +<P>For color images, or any arbitrary multi-channel image, +<B>pamoil</B> computes each channel (e.g. red, green, and blue) +separately the same way as the grayscale case above. + +<P>At the edges of the image, where the regular neighborhood would run +off the edge of the image, <B>pamoil</B> uses a clipped neighborhood. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-n</B> <I>size</I> + +<DD>This is the size of the neighborhood used in the smearing. The +neighborhood is this many pixels in all four directions. + +<P>The default is 3. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmbentley.html">pgmbentley</A></B>, + +<B><A HREF="ppmrelief.html">ppmrelief</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<P> +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p>This program is based on pgmoil Copyright (C) 1990 by Wilson Bent +(<A HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>) + +<P>Modified to ppm by Chris Sheppard, June 25, 2001 + +<P>Modified to pnm, using pam functions, by Bryan Henderson June 28, +2001. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamperspective.html b/pamperspective.html new file mode 100644 index 00000000..e3964ec4 --- /dev/null +++ b/pamperspective.html @@ -0,0 +1,497 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head><title>Pamperspective User Manual</title></head> + +<body> + +<h1>pamperspective</h1> +Updated: 2 September 2004 +<br> +<a href="#index">Table Of Contents</a> + +<a name="name"></a> +<h2>NAME</h2> + +pamperspective - a reverse scanline renderer for Netpbm images + +<a name="synopsis"></a> +<h2>SYNOPSIS</h2> + +<pre> +<b>pamperspective</b> + [<b>--bottom_margin=</b><i>num</i>] + [<b>--detail=</b><i>num</i>] + [<b>--frame_include=</b><i>bool</i>] + [<b>--height=</b><i>num</i>] + [<b>--include=[</b><i>x1</i>,<i>y1</i>;<i>x2</i>,<i>y2</i>; ...]] + [<b>--input_system=</b><i>spec</i>] + [<b>--input_unit=</b><i>spec</i>] + [<b>--interpolation=</b><i>spec</i>] + [<b>--left_margin=</b><i>num</i>] + [<b>--margin=</b><i>num</i>] + [<b>--output_system=</b><i>spec</i>] + [<b>--proportion=</b><i>spec</i>] + [<b>--ratio=</b><i>num</i>] + [<b>--right_margin=</b><i>num</i>] + [<b>--top_margin=</b><i>num</i>] + [<b>--width=</b><i>num</i>] + { + { + <i>upper_left_x</i> <i>upper_left_y</i> <i>upper_right_x</i> <i>upper_right_y</i> + <i>lower_left_x</i> <i>lower_left_y</i> <i>lower_right_x</i> <i>lower_right_y</i> + } + | + { + {<b>--upper_left_x</b>|<b>--ulx</b>}<b>=</b><i>upper_left_x</i> + {<b>--upper_left_y</b>|<b>--uly</b>}<b>=</b><i>upper_left_y</i> + {<b>--upper_right_x</b>|<b>--urx</b>}<b>=</b><i>upper_right_x</i> + {<b>--upper_right_y</b>|<b>--ury</b>}<b>=</b><i>upper_right_y</i> + {<b>--lower_left_x</b>|<b>--llx</b>}<b>=</b><i>lower_left_x</i> + {<b>--lower_left_y</b>|<b>--lly</b>}<b>=</b><i>lower_left_y</i> + {<b>--lower_right_x</b>|<b>--lrx</b>}<b>=</b><i>lower_right_x</i> + {<b>--lower_right_y</b>|<b>--lry</b>}<b>=</b><i>lower_right_y</i> + } + } + [<i>infile</i>] + +</pre> + +<?makeman .SH OPTION USAGE ?> +<p>Minimum unique abbreviation of option is acceptable. (But note +that shortest unique prefixes might be longer in future versions of +the program.) You may use single hyphens instead of double hyphen to +denote options. You may use white space in place of the equals sign +to separate an option name from its value. All options starting with +hyphens may be given in any order. + + +<a name="description"></a> +<h2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pamperspective</b> reads a Netpbm image as input and produces a +Netpbm image of the same format as output. + +<p>The values <i>upper_left_x</i> ... <i>lower_right_y</i>, that are +required on the command line, specify a quadrilateral in the input +image. <b>pamperspective</b> interprets the input image as a +perspective projection of a three dimensional scene, for example a +photograph. <b>pamperspective</b> assumes the specified quadrilateral +represents a parallelogram in that scene. The output image consists +of this parallelogram, sheared to a rectangle. In this way +<b>pamperspective</b> undoes the effect of a raytracer or scanline +renderer. + +<p>The input is from <i>infile</i>, or from Standard Input, if +<i>infile</i> is not specified. The output is to Standard Output. + + +<a name="options"></a> +<h2>OPTIONS</h2> + +<p>For options of the form <b>--name=</b><i>num</i>, You can specify +the value <i>num</i> in any of the traditional ways. Additionally, +you can specify it as <i>num1</i>/<i>num2</i>, where <i>num1</i> and +<i>num2</i> are specified traditionally. This is useful for +specifying a width/height ratio of 4/3, without having to write +infinitely many digits. Where <i>num</i> is supposed to be a natural +number, <b>pamperspective</b> does not allow this format. + +<h3>Quadrilateral specification options</h3> + +<dl> + <dt><b>--upper_left_x=</b><i>num</i></dt> + <dt><b>--ulx=</b><i>num</i></dt> + + <dd>This specifies the horizontal coordinate of the upper left + vertex of the quadrilateral. The meaning of 'upper left' is + relative to the output image. The interpretation of <i>num</i> + depends on the values for <b>--input_system</b> and + <b>--input_unit</b>.</dd> + + <dt><b>--upper_left_y=</b><i>num</i></dt> + <dt><b>--uly=</b><i>num</i></dt> + + <dd>This specifies the vertical coordinate of the upper left vertex + of the quadrilateral. The meaning of 'upper left' is relative to + the output image. The interpretation of <i>num</i> depends on the + values for <b>--input_system</b> and <b>--input_unit</b>.</dd> + + <dt><b>--upper_right_x=</b><i>num</i></dt> + <dt><b>--urx=</b><i>num</i></dt> + + <dd>This specifies the horizontal coordinate of the upper right + vertex of the quadrilateral. The meaning of 'upper right' is + relative to the output image. The interpretation of <i>num</i> + depends on the values for <b>--input_system</b> and + <b>--input_unit</b>.</dd> + + <dt><b>--upper_right_y=</b><i>num</i></dt> + <dt><b>--ury=</b><i>num</i></dt> + + <dd>This specifies the vertical coordinate of the upper right vertex + of the quadrilateral. The meaning of 'upper right' is relative to + the output image. The interpretation of <i>num</i> depends on the + values for <b>--input_system</b> and <b>--input_unit</b>.</dd> + + <dt><b>--lower_left_x=</b><i>num</i></dt> + <dt><b>--llx=</b><i>num</i></dt> + + <dd>This specifies the horizontal coordinate of the lower left + vertex of the quadrilateral. The meaning of 'lower left' is + relative to the output image. The interpretation of <i>num</i> + depends on the values for <b>--input_system</b> and + <b>--input_unit</b>.</dd> + + <dt><b>--lower_left_y=</b><i>num</i></dt> + <dt><b>--lly=</b><i>num</i></dt> + + <dd>This specifies the vertical coordinate of the lower left vertex + of the quadrilateral. The meaning of 'lower left' is relative to + the output image. The interpretation of <i>num</i> depends on the + values for <b>--input_system</b> and <b>--input_unit</b>.</dd> + + <dt><b>--lower_right_x=</b><i>num</i></dt> + <dt><b>--lrx=</b><i>num</i></dt> + + <dd>This specifies the horizontal coordinate of the lower right + vertex of the quadrilateral. The meaning of 'lower right' is + relative to the output image. The interpretation of <i>num</i> + depends on the values for <b>--input_system</b> and + <b>--input_unit</b>.</dd> + + <dt><b>--lower_right_y=</b><i>num</i></dt> + <dt><b>--lry=</b><i>num</i></dt> + + <dd>This specifies the vertical coordinate of the lower right vertex + of the quadrilateral. The meaning of 'lower right' is relative to + the output image. The interpretation of <i>num</i> depends on the + values for <b>--input_system</b> and <b>--input_unit</b>.</dd> + + <dt><b>--input_system=</b><i>system</i></dt> + <dt><b>--input_unit=</b><i>unit</i></dt> + + <dd>The input image consists of pixels, which are, from the point of + view of a scanline renderer, solid squares. These options specify + how the coordinates are interpreted: + + <dl> + <dt><i>system</i>=<b>lattice</b>, <i>unit</i>=<b>image</b></dt> + + <dd>(0,0) refers to the upper left corner of the upper left pixel + and (1,1) refers to the lower right corner of the lower right + pixel.</dd> + + <dt><i>system</i>=<b>lattice</b>, <i>unit</i>=<b>pixel</b></dt> + + <dd>(0,0) refers to the upper left corner of the upper left pixel + and (<i>width</i>,<i>height</i>) refers to the lower right corner + of the lower right pixel. Here <i>width</i> and <i>height</i> are + the width and height of the input image.</dd> + + <dt><i>system</i>=<b>pixel</b>, <i>unit</i>=<b>image</b></dt> + + <dd>(0,0) refers to the centre of the upper left pixel and (1,1) + refers to the centre of the lower right pixel.</dd> + + <dt><i>system</i>=<b>pixel</b>, <i>unit</i>=<b>pixel</b></dt> + + <dd>(0,0) refers to the centre of the upper left pixel and + (<i>width</i>-1,<i>height</i>-1) refers to the centre of the lower + right pixel. Here <i>width</i> and <i>height</i> are the width + and height of the input image.</dd> + + </dl> + + The defaults are <b>--input_system</b>=<b>lattice</b> and + <b>--input_unit</b>=<b>pixel</b>. Point-and-click front ends should + use <b>--input_system</b>=<b>pixel</b>.</dd> + + </dl> + +<h3>Frame options</h3> + +By default <b>pamperspective</b> outputs exactly the above +parallelogram, sheared to a rectangle. With the following options, it +is possible to make <b>pamperspective</b> output a larger or smaller +portion, which we call the "visible part." We refer to the +default rectangle as the "frame." The visible part is always +a rectangle the axes of which are parallel to those of the frame. + +<p>The frame options are additive. All the parts of the image +specified by either margin options, <b>--include_frame</b>, or +<b>--include</b> (or their defaults) are in the visible part. The +visible part is the smallest possible rectangle that contains the +parts specified those three ways. + +<p>The visible part must have nonzero size. That means if you specify +<b>--frame-include=no</b> (overriding the default), you'll need to +specify other frame options in order to have something in the visible +part. + +<dl> + <dt>[<b>--margin=</b><i>num</i>]</dt> + + <dd>This specifies an area surrounding the frame that is to be + included in the visible part. The units of <i>num</i> are the width + of the frame for the horizontal extensions and the height of the + frame for vertical extensions. + + <p>For example, <b>--margin=1</b> makes the visible part 9 times as large, + because it makes the visible part extend one frame's worth to the left + of the frame, one frame's worth to the right, one frame's worth above + the frame, and one frame's worth below the frame, for a total of + 3 frames' worth in both dimensions. + + <p>A negative value has an effect only if you specify + <b>--frame_include=no</b>. The default is no margin. + + <p>The individual margin options below override this common margin + setting. + </dd> + + <dt>[<b>--top_margin=</b><i>num</i>]</dt> + <dt>[<b>--left_margin=</b><i>num</i>]</dt> + <dt>[<b>--right_margin=</b><i>num</i>]</dt> + <dt>[<b>--bottom_margin=</b><i>num</i>]</dt> + + <dd>These are like <b>--margin</b>, but they specify only one of + the 4 sides. The default value for each is the value (or default) of + <b>--margin</b>. + </dd> + + <dt>[<b>--frame_include=</b><i>bool</i>]</dt> + + <dd>Valid values for <i>bool</i> are: + + <dl> + <dt><b>yes</b></dt> + <dt><b>true</b></dt> + <dt><b>on</b></dt> + + <dd>The frame itself is in the visible part.</dd> + + <dt><b>no</b></dt> + <dt><b>false</b></dt> + <dt><b>off</b></dt> + + <dd>The frame itself is not necessarily in the visible part + (but it could be if other options cause it to be). + </dd> + + </dl> + + The default value is <b>yes</b></dd> + + <dt><b>--include=[</b><i>x1</i>,<i>y1</i>;<i>x2</i>,<i>y2</i>; ...] + + <dd>The visible part is made large enough such that every point + (<i>x1</i>,<i>y1</i>), (<i>x2</i>,<i>y2</i>), of the <em>input</em> image is + visible. The meaning of <i>x</i> and <i>y</i> is determined by + <b>--input_system</b> and <b>--input_unit</b>. You can specify any + number of semicolon-delimited points, including zero. + + <p>If you're supplying these options via a Unix command shell, be + sure to use proper quoting, because semicolon (<b>;</b>) is usually + a shell control character. + + </dl> + + <p>The frame options were new in Netpbm 10.25 (October 2004). + +<h3>Output size options</h3> + +<dl> + <dt><b>--width=</b><i>width</i></dt> + <dt><b>--height=</b><i>height</i></dt> + + <dd>These specify the size of the output image in horizontal and + vertical direction. The values are numbers of pixels, so only + natural numbers are valid. These values override the default + means to determine the output size.</dd> + + <dt><b>--detail=</b><i>num</i></dt> + + <dd>If you do not specify <b>--width</b>, <b>pamperspective</b> + determines the width of the output image such that moving <i>num</i> + output pixels horizontally does not change the corresponding pixel + coordinates of the input image by more than 1. + <b>pamperspective</b> determines the height of the output image + analogously. The default value is 1.</dd> + + <dt><b>--proportion=</b><i>prop</i></dt> + <dt><b>--ratio=</b><i>ratio</i></dt> + + <dd>Valid values for <i>prop</i> are: + + <dl> + <dt><b>free</b></dt> + + <dd>In this case <b>--ratio</b> does not have any effect.</dd> + + <dt><b>fixed</b></dt><dd>After the width and height are determined + according to <b>--detail</b>, one of both will be increased, in + order to obtain width/height=<i>ratio</i>.</dd> + + </dl> + + The defaults are <b>--proportion</b>=<b>free</b> and + <b>--ratio</b>=1.</dd> + + </dl> + +<h3>Output options</h3> + +<dl> + <dt><b>--output_system=</b><i>spec</i></dt> + + <dd>The output image consists of pixels, which are, from the point + of view of a scanline renderer, solid squares. This option + specifies how the four vertices of the quadrilateral correspond to + the pixels of the output image. Valid values for <i>spec</i> are: + + <dl> + <dt><b>lattice</b></dt> + + <dd>The upper left vertex corresponds to the upper left corner of + the upper left pixel and The lower right vertex corresponds to the + lower right corner of the lower right + pixel.</dd> + + <dt><b>pixel</b></dt> + + <dd>The upper left vertex corresponds to the centre of the upper + left pixel and The lower right vertex corresponds to the centre of + the lower right pixel.</dd> + + </dl> + + The default value is <b>lattice</b>. Point-and-click front ends + should use <b>pixel</b>.</dd> + + <dt><b>--interpolation=</b><i>spec</i></dt> + + <dd>Usually (centres of) output pixels do not exactly correspond to + (centres of) input pixels. This option determines how the program + will choose the new pixels. Valid values for <i>spec</i> are: + + <dl> + <dt><b>nearest</b></dt> + + <dd>The output pixel will be identical to the nearest input + pixel.</dd> + + <dt><b>linear</b></dt> + + <dd>The output pixel will be a bilinear interpolation of the four + surrounding input pixels.</dd> + + </dl> + + The default value is <b>nearest</b>.</dd> + + </dl> + +<a name="hints"></a> +<h2>HINTS</h2> + +<p>It might be tempting always to use the options +<b>--include 0,0;0,1;1,0;1,1</b> +(assuming <b>--input_system=lattice</b> and <b>--input_unit=image</b>), +so that no part of the input image is missing in the output. +There are problems with that: + +<ul> + <li>If the threedimensional plane defined by the quadrilateral has a + visible horizon in the input image, then the above asks <b>pamperspective</b> + to include points that cannot ever be part of the output. + + <li>If the horizon is not visible, but close to the border of the input + image, this may result in <em>very</em> large output files. Consider a + picture of a road. If you ask a point close to the horizon to be included, + then this point is far away from the viewer. The output will cover many + kilometers of road, while <b>--detail</b> perhaps makes a pixel equal to a + square centimeter. + + </ul> + +<p>When working with large files <b>pamperspective</b>'s memory usage +might be an issue. In order to keep it small, you should minimize each +of the following: + +<ul> + <li>The vertical range that the top output line consumes in the + input image; + + <li>The vertical range that the bottom output line consumes in the + input image; + + <li>The vertical range from the topmost (with respect to the + input image) quadrilateral point to the top (with respect to the output + image) output line. + + </ul> + +For this purpose you can use <b>pamflip</b> before and/or after +<b>pamperspective</b>. Example: Instead of + +<pre> +<b>pamperspective 10 0 100 50 0 20 95 100 infile > outfile</b> +</pre> + +you can use + +<pre> +<b> +pamflip -rotate90 infile | + pamperspective 50 0 100 5 0 90 20 100 | + pamflip -rotate270 > outfile +</b> +</pre> + +<a name="seealso"></a> +<h2>SEE ALSO</h2> + +<a href="http://netpbm.sourceforge.net/doc/index.html"><b>netpbm</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pam.html"><b>pam</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pnm.html"><b>pnm</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pamcut.html"><b>pamcut</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pamflip.html"><b>pamflip</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pnmrotate.html"><b>pnmrotate</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pamscale.html"><b>pamscale</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pnmshear.html"><b>pnmshear</b></a>, +<a href="http://netpbm.sourceforge.net/doc/pnmstitch.html"><b>pnmstitch</b></a> + +<a name="history"></a> +<h2>HISTORY</h2> + +<p>Mark Weyer wrote <b>pamperspective</b> in March 2004. + +<p>It was new in Netpbm 10.22 (April 2004). + + +<a name="author"></a> +</p><h2>AUTHOR</h2> + +This documentation was written by Mark Weyer. Permission is granted +to copy, distribute and/or modify this document under the terms of the +GNU General Public License, Version 2 or any later version published +by the Free Software Foundation. + +<a name="index"></a> +<h2>Table Of Contents</h2> +<ul> + <li><a href="#name">NAME</a> + </li><li><a href="#synopsis">SYNOPSIS</a> + </li><li><a href="#description">DESCRIPTION</a> + </li><li><a href="#options">OPTIONS</a> + </li><li><a href="#hints">HINTS</a> + </li><li><a href="#seealso">SEE ALSO</a> + </li><li><a href="#history">HISTORY</a> + </li><li><a href="#author">AUTHOR</a> + </li></ul> + +</body></html> + + + diff --git a/pampick.html b/pampick.html new file mode 100644 index 00000000..8aeb004c --- /dev/null +++ b/pampick.html @@ -0,0 +1,78 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pampick User Manual</TITLE></HEAD> +<BODY> +<H1>pampick</H1> +Updated: 25 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pampick - pick images out of a multi-image Netpbm image stream + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pampick</B> + +<I>image_sequence_number</I> ... + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pampick</b> reads a PNM or PAM image stream as input. It +picks certain images from the stream and copies them to a new image +stream on Standard Output. + +<p>You identify the images to pick by sequence number within the stream. +Each <i>image_sequence_number</i> is a decimal sequence number, with zero +meaning the first image. + +<p>The arguments must be in increasing order, without duplicates. The +results are undefined if they are not. (There are a number of +enhancements that might be made in future releases that would make +whatever <b>pampick</b> does today when you break this rule change). +<b>pampick</b> outputs the images in the same order as they appear in +the input. If you specify no sequence numbers, <b>pampick</b> outputs +nothing. If you specify a sequence number that is beyond what is in +the input, <b>pampick</b> fails with an error message to that effect. + +<p><b>pampick</b> always reads the entire input stream. (This is helpful +when the input stream is a pipe and whatever is feeding the pipe would be +upset if it filled up or broke). + +<p>To see how many images, and what kind, are in a stream, use +<b>pamfile</b>. + +<p>To extract all the images in a stream into separate named files, +use <b>pamsplit</b>. + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamfile.html">pamfile</A></B>, +<B><A HREF="pamsplit.html">pamsplit</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B>cat</b> man page + +<h2 id="history">HISTORY</h2> + +<p><b>pampick</b> was new in Netpbm 10.31 (December 2005); + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pampop9.html b/pampop9.html new file mode 100644 index 00000000..00f66db9 --- /dev/null +++ b/pampop9.html @@ -0,0 +1,96 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head><title>Pampop9 User Manual</title></head> +<body> + +<h1>pampop9</h1> +Updated: 02 March 2003 +<br> +<a HREF="#index">Table Of Contents</a> + +<a NAME="name"></a> +<h2>NAME</h2> +pampop9 - simulate a multi-lens camera such as the Pop9 + +<a NAME="synopsis"></a> +<h2>SYNOPSIS</h2> + +<b>pampop9</b> +<i>pnmfile|-</i> +<i>xtiles</i> +<i>ytiles</i> +<i>xdelta</i> +<i>ydelta</i> + +<a NAME="description"></a> +<h2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p> +<b>pampop9</b> tiles your starting image <i>xtiles</i> by <i>ytiles</i> +times. +Each of these tiles is taken from a slightly different offset within the +source, as determined by the <i>xdelta</i> and <i>ydelta</i> arguments. +</p> + +<p> +The top line of tiles in the output is taken from the top of the source +image, the second starts with the <i>ydelta</i> row of the source image, +the next with the 2*<i>ydelta</i> row, and so on. +Similarly, the first column of tiles in the output is taken from the left +of the source image, the next starts with the <i>xdelta</i> column, the +next with the 2*<i>xdelta</i> column, and so on. +</p> + +<a name="examples"> </a> +<h2>EXAMPLES</h2> + +<p> +With a 100 x 100 source image, then the output image from +<b>pampop9</b> <i>3 3 10 10</i> will appear to be a three-by-three grid, +each tile being 80 x 80 pixels. +If the origin is taken to be the top-left corner, then the top row of +tiles will take start at (0, 0) (10, 0) (20, 0) within the source image, +the middle row will start at (0, 10) (10, 10) (20, 10), and the bottom +row at (0, 20) (10, 20) (20, 20). +</p> + +<a NAME="history"></a> +<h2>HISTORY</h2> + +<p><b>pampop9</b> was new in Netpbm 10.15 (April 2003). It was +adapted slightly from <b>pampup9</b>, which was distributed by Robert +Tinsley. At that time, it was distributed via +http://www.thepoacher.net/code/#pampup9. By October 2004, that URL +no longer was valid. + +<a NAME="see-also"> </a> +<h2>SEE ALSO</h2> + +<a HREF="pnmtile.html">pnmtile</a> + +<a NAME="author"></a> +<h2>AUTHOR</h2> + +<p>Copyright (C) 2003 by Robert Tinsley. This software is released +under the GPL (<a href="http://www.fsf.org/licensing/licenses/gpl.txt"> +http://www.fsf.org/licenses/gpl.txt</a>). + +<hr> + +<a NAME="index"></a> +<h2>Table Of Contents</h2> + +<UL> +<LI><a HREF="#name">NAME</a> +<LI><a HREF="#synopsis">SYNOPSIS</a> +<LI><a HREF="#description">DESCRIPTION</a> +<LI><a HREF="#examples">EXAMPLES</a> +<LI><a HREF="#see-also">SEE ALSO</a> +<LI><a HREF="#history">HISTORY</a> +<LI><a HREF="#author">AUTHOR</a> +</UL> + +</body> +</html> + diff --git a/pamrgbatopng.html b/pamrgbatopng.html new file mode 100644 index 00000000..7dd0df91 --- /dev/null +++ b/pamrgbatopng.html @@ -0,0 +1,78 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamrgbtopng User Manual</TITLE></HEAD> +<BODY> +<H1>pamrgbatopng</H1> +Updated: 24 July 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pamrgbatopng - convert PAM color/transparency image to PNG + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamrgbatopng</B> +[<i>pamfile</i>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamrgbatopng</b> reads a PAM image with the RGB_ALPHA +tuple type (a color visual image with transparency) and produces an +equivalent PNG image as output. + +<p>The input image if from the file named by the <i>pamfile</i> argument, +or Standard Input if you don't specify <i>pamfile</i>. The output goes +to Standard Output. + +<p>The maxval of the input image must be 255. You can use +<b>pamdepth</b> to change the maxval of an image to 255 if necessary. + +<p><a href="pnmtopng.html"><b>pnmtopng</b></a> is a much more powerful +program for generating PNG images from Netpbm images, but it cannot +take PAM images with transparency as input. To supply transparency +information, you must supply it in a separate PGM image. That makes +it considerably less convenient to use. + +<p>(But note that <b>pnmtopng</b> takes PAM images, even with RGB_ALPHA +tuple type just fine -- it just ignores the alpha plane). + +<p>Netpbm's strategic direction is to add to <b>pnmtopng</b> all the +capabilities of <b>pamrgbatopng</b> and retire <b>pamrtbatopng</b>. +But there's no telling when that will happen. + + +<H2 id="options">OPTIONS</H2> + +<p>None. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pam.html">pam</A></B> +<B><A HREF="pnmtopng.html">pnmtopng</A></B> +<B><A HREF="pngtopnm.html">pngtopnm</A></B> + +<H2 ID="history">HISTORY</H2> + +<p><b>pamrgbatopng</b> was new in Netpbm 10.30 (October 2005). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> + diff --git a/pamscale.html b/pamscale.html new file mode 100644 index 00000000..7fff919f --- /dev/null +++ b/pamscale.html @@ -0,0 +1,573 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamscale User Manual</TITLE></HEAD> +<BODY> +<H1>pamscale</H1> +Updated: 18 February 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamscale - scale a Netpbm image +<H2 id="synopsis">SYNOPSIS</H2> + +<pre> + <B>pamscale</B> + [ + <I>scale_factor</I> + | + {<B>-xyfit</B> | <B>-xyfill</b> | <b>-xysize</b>} <I>cols</i> <i>rows</I> + | + <B>-reduce</B> <I>reduction_factor</I> + | + [<B>-xsize=</B><I>cols</I> | <B>-width=</B><I>cols</I> | <B>-xscale=</B><I>factor</I>] + [<B>-ysize=</B><I>rows</I> | <B>-height=</B><I>rows</I> | <B>-yscale=</B><I>factor</I>] + | + <b>-pixels</B> <I>n</I> + ] + [ + [<B>-verbose</b>] + [ + <b>-nomix</B> + | + <b>-filter=</b><i>functionName</i> [<b>-window=</b>functionName] + ] + [<b>-linear</b>] + } + [<I>pnmfile</I>] + +</pre> +<?makeman .SH OPTION USAGE ?> + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamscale</b> scales a Netpbm image by a specified factor, or +scales individually horizontally and vertically by specified factors. + +<P>You can either enlarge (scale factor > 1) or reduce (scale factor +< 1). + +<h3 id="scalefactor">The Scale Factors</h3> + +<P>When you specify an absolute size or scale factor for both +dimensions, <B>pamscale</B> scales each dimension independently +without consideration of the aspect ratio. + +<P>If you specify one dimension as a pixel size and don't specify the +other dimension, <B>pamscale</B> scales the unspecified dimension to +preserve the aspect ratio. + +<P>If you specify one dimension as a scale factor and don't specify +the other dimension, <B>pamscale</B> leaves the unspecified dimension +unchanged from the input. + +<P>If you specify the <I>scale_factor</I> parameter instead of +dimension options, that is the scale factor for both dimensions. It +is equivalent to <B>-xscale=</B><I>scale_factor</I><B> +-yscale=</B><I>scale_factor</I>. + +<P>Specifying the <B>-reduce</B> <I>reduction_factor</I> option is +equivalent to specifying the <I>scale_factor </I> parameter, where +<I>scale_factor</I> is the reciprocal of <I>reduction_factor</I>. + +<P><B>-xyfit</B> specifies a bounding box. <B>pamscale</B> scales +the input image to the largest size that fits within the box, while +preserving its aspect ratio. <b>-xysize</b> is a synonym for this. +Before Netpbm 10.20 (January 2004), <b>-xyfit</b> did not exist, but +<b>-xysize</b> did. + +<p><b>-xyfill</b> is similar, but <b>pamscale</b> scales the input image +to the smallest size that completely fills the box, while preserving +its aspect ratio. This option has existed since Netpbm 10.20 (January +2004). + +<P><B>-pixels</B> specifies a maximum total number of output pixels. +<B>pamscale</B> scales the image down to that number of pixels. If +the input image is already no more than that many pixels, +<B>pamscale</B> just copies it as output; <B>pamscale</B> does not +scale up with <B>-pixels</B>. + +<P>If you enlarge by a factor of 3 or more, you should probably add a +<I>pnmsmooth</I> step; otherwise, you can see the original pixels in +the resulting image. + + +<h3 id="usage">Usage Notes</h3> + +<P>A useful application of <B>pamscale</B> is to blur an image. Scale +it down (without <B>-nomix</B>) to discard some information, then +scale it back up using <B>pamstretch</B>. + +<P>Or scale it back up with <B>pamscale</B> and create a +"pixelized" image, which is sort of a computer-age version +of blurring. + + +<h3 id="transparency">Transparency</h3> + +<p><b>pamscale</b> understands transparency and properly mixes pixels +considering the pixels' transparency. + +<p>Proper mixing <em>does not</em> mean just mixing the transparency +value and the color component values separately. In a PAM image, a +pixel which is not opaque represents a color that contains light of +the foreground color indicated explicitly in the PAM and light of a +background color to be named later. But the numerical scale of a +color component sample in a PAM is as if the pixel is opaque. So a +pixel that is supposed to contain half-strength red light for the +foreground plus some light from the background has a red color sample +that says <em>full</em> red and a transparency sample that says 50% +opaque. In order to mix pixels, you have to first convert the color +sample values to numbers that represent amount of light directly +(i.e. multiply by the opaqueness) and after mixing, convert back +(divide by the opaqueness). + +<h3 id="imagetype">Input And Output Image Types</h3> + +<p><b>pamscale</b> produces output of the same type (and tuple type if +the type is PAM) as the input, except if the input is PBM. In that +case, the output is PGM with maxval 255. The purpose of this is to +allow meaningful pixel mixing. Note that there is no equivalent +exception when the input is PAM. If the PAM input tuple type is +BLACKANDWHITE, the PAM output tuple type is also BLACKANDWHITE, and +you get no meaningful pixel mixing. + +<P>If you want PBM output with PBM input, use <B>pamditherbw</B> to +convert <B>pamscale</B>'s output to PBM. Also consider +<B>pbmreduce</B>. + +<p><b>pamscale</b>'s function is essentially undefined for PAM input +images that are not of tuple type RGB, GRAYSCALE, BLACKANDWHITE, or +the _ALPHA variations of those. (By standard Netpbm backward compatibility, +this includes PBM, PGM, and PPM images). + +<p>You might think it would have an obvious effect on other tuple +types, but remember that the aforementioned tuple types have +gamma-adjusted sample values, and <b>pamscale</b> uses that fact in +its calculations. And it treats a transparency plane different from any +other plane. + +<p><b>pamscale</b> does not simply reject unrecognized tuple types +because there's a possibility that just by coincidence you can get +useful function out of it with some other tuple type and the right +combination of options (consider <b>-linear</b> in particular). + + +<h3 id="methods">Methods Of Scaling</h3> + +<p>There are numerous ways to scale an image. <b>pamscale</b> implements +a bunch of them; you select among them with invocation options. + +<h4 id="mixing">Pixel Mixing</h4> + +<p>Pamscale's default method is pixel mixing. To understand this, +imagine the source image as composed of square tiles. Each tile is a +pixel and has uniform color. The tiles are all the same size. Now +lay over that a transparent sheet of the same size, marked off in a +square grid. Each cell in the grid stands for a pixel of the target +image. For example, if you are scaling a 100x200 image up by 1.5, the +source image is 100 x 200 tiles, and the transparent sheet is marked +off in 150 x 300 cells. + +<p>Each cell covers parts of multiple tiles. To make the target image, +just color in each cell with the color which is the average of the colors +the cell covers -- weighted by the amount of that color it covers. A +cell in our example might cover 4/9 of a blue tile, 2/9 of a red tile, +2/9 of a green tile, and 1/9 of a white tile. So the target pixel +would be somewhat unsaturated blue. + +<p>When you are scaling up or down by an integer, the results are +simple. When scaling up, pixels get duplicated. When scaling down, +pixels get thrown away. In either case, the colors in the target +image are a subset of those in the source image. + +<p>When the scale factor is weirder than that, the target image can +have colors that didn't exist in the original. For example, a red +pixel next to a white pixel in the source might become a red pixel, +a pink pixel, and a white pixel in the target. + +<p>This method tends to replicate what the human eye does as it moves +closer to or further away from an image. It also tends to replicate +what the human eye sees, when far enough away to make the pixelization +disappear, if an image is not made of pixels and simply stretches +or shrinks. + +<h4 id="sampling">Discrete Sampling</h4> + +<p>Discrete sampling is basically the same thing as pixel mixing except +that, in the model described above, instead of averaging the colors of +the tiles the cell covers, you pick the one color that covers the most +area. + +<p>The result you see is that when you enlarge an image, pixels +get duplicated and when you reduce an image, some pixels get discarded. + +<p>The advantage of this is that you end up with an image made from the +same color palette as the original. Sometimes that's important. + +<p>The disadvantage is that it distorts the picture. If you scale up +by 1.5 horizontally, for example, the even numbered input pixels are +doubled in the output and the odd numbered ones are copied singly. If +you have a bunch of one pixel wide lines in the source, you may find +that some of them stretch to 2 pixels, others remain 1 pixel when you +enlarge. When you reduce, you may find that some of the lines +disappear completely. + +<p>You select discrete sampling with <b>pamscale</b>'s <b>-nomix</b> +option. + +<p>Actually, <B>-nomix</b> doesn't do exactly what I described above. +It does the scaling in two passes - first horizontal, then vertical. +This can produce slightly different results. + +<p>There is one common case in which one often finds it burdensome to +have <b>pamscale</b> make up colors that weren't there originally: +Where one is working with an image format such as GIF that has a +limited number of possible colors per image. If you take a GIF with +256 colors, convert it to PPM, scale by .625, and convert back to GIF, +you will probably find that the reduced image has way more than 256 +colors, and therefore cannot be converted to GIF. One way to solve +this problem is to do the reduction with discrete sampling instead of +pixel mixing. Probably a better way is to do the pixel mixing, but +then color quantize the result with <b>pnmquant</b> before converting +to GIF. + +<P>When the scale factor is an integer (which means you're scaling +up), discrete sampling and pixel mixing are identical -- output pixels +are always just N copies of the input pixels. In this case, though, +consider using <B>pamstretch</B> instead of <B>pamscale</B> to get the +added pixels interpolated instead of just copied and thereby get a +smoother enlargement. + +<P><b>pamscale</b>'s discrete sampling is faster than pixel mixing, +but <B>pamenlarge</B> is faster still. <B>pamenlarge</B> works only +on integer enlargements. + +<p>discrete sampling (<b>-nomix</b>) was new in Netpbm 9.24 (January +2002). + + +<h4 id="resampling">Resampling</h4> + +<p>Resampling assumes that the source image is a discrete sampling of some +original continuous image. That is, it assumes there is some non-pixelized +original image and each pixel of the source image is simply the color of +that image at a particular point. Those points, naturally, are the +intersections of a square grid. + +<p>The idea of resampling is just to compute that original image, then +sample it at a different frequency (a grid of a different scale). + +<p>The problem, of course, is that sampling necessarily throws away the +information you need to rebuild the original image. So we have to make +a bunch of assumptions about the makeup of the original image. + +<p>You tell <b>pamscale</b> to use the resampling method by specifying +the <b>-filter</b> option. The value of this option is the name of a +function, from the set listed below. + +<p><strong>To explain resampling, we are going to talk about a simple +one dimensional scaling</strong> -- scaling a single row of grayscale +pixels horizontally. If you can understand that, you can easily +understand how to do a whole image: Scale each of the rows of the +image, then scale each of the resulting columns. And scale each of the +color component planes separately. + +<p>As a first step in resampling, <b>pamscale</b> converts the source +image, which is a set of discrete pixel values, into a continuous step +function. A step function is a function whose graph is a staircase-y +thing. + +<p>Now, we convolve the step function with a proper scaling of the +filter function that you identified with <b>-filter</b>. If you don't +know what the mathematical concept of convolution (convolving) is, you +are officially lost. You cannot understand this explanation. The +result of this convolution is the imaginary original continuous image +we've been talking about. + +<p>Finally, we make target pixels by picking values from that function. + +<p>To understand what is going on, we use Fourier analysis: + +<p>The idea is that the only difference between our step function and +the original continuous function (remember that we constructed the +step function from the source image, which is itself a sampling of the +original continuous function) is that the step function has a bunch of +high frequency Fourier components added. If we could chop out all the +higher frequency components of the step function, and know that +they're all higher than any frequency in the original function, we'd +have the original function back. + +<p>The resampling method <em>assumes</em> that the original function +was sampled at a high enough frequency to form a perfect sampling. A +perfect sampling is one from which you can recover exactly the +original continuous function. The Nyquist theorem says that as long +as your sample rate is at least twice the highest frequency in your +original function, the sampling is perfect. So we <em>assume</em> +that the image is a sampling of something whose highest frequency is +half the sample rate (pixel resolution) or less. Given that, our +filtering does in fact recover the original continuous image from the +samples (pixels). + +<p>To chop out all the components above a certain frequency, we just +multiply the Fourier transform of the step function by a rectangle +function. + +<p>We could find the Fourier transform of the step function, multiply +it by a rectangle function, and then Fourier transform the result +back, but there's an easier way. Mathematicians tell us that +multiplying in the frequency domain is equivalent to convolving in the +time domain. That means multiplying the Fourier transform of F by a +rectangle function R is the same as convolving F with the Fourier +transform of R. It's a lot better to take the Fourier transform of +R, and build it into <b>pamscale</b> than to have <b>pamscale</b> +take the Fourier transform of the input image dynamically. + +<p>That leaves only one question: What <em>is</em> the Fourier +transform of a rectangle function? Answer: sinc. Recall from +math that sinc is defined as sinc(x) = sin(PI*x)/PI*x. + +<p>Hence, when you specify <b>-filter=sinc</b>, you are effectively +passing the step function of the source image through a low pass +frequency filter and recovering a good approximation of the original +continuous image. + +<h5>Refiltering</h5> + +<p>There's another twist: If you simply sample the reconstructed +original continuous image at the new sample rate, and that new sample +rate isn't at least twice the highest frequency in the original +continuous image, you won't get a perfect sampling. In fact, you'll +get something with ugly aliasing in it. Note that this can't be a +problem when you're scaling up (increasing the sample rate), because +the fact that the old sample rate was above the Nyquist level means so +is the new one. But when scaling down, it's a problem. Obviously, +you have to give up image quality when scaling down, but aliasing is +not the best way to do it. It's better just to remove high frequency +components from the original continuous image before sampling, and +then get a perfect sampling of that. + +<p>Therefore, <b>pamscale</b> filters out frequencies above half the +new sample rate before picking the new samples. + +<h5>Approximations</h5> + +<p>Unfortunately, <b>pamscale</b> doesn't do the convolution +precisely. Instead of evaluating the filter function at every point, +it samples it -- assumes that it doesn't change any more often than +the step function does. <b>pamscale</b> could actually do the true +integration fairly easily. Since the filter functions are built into +the program, the integrals of them could be too. Maybe someday it +will. + +<p>There is one more complication with the Fourier analysis. sinc +has nonzero values on out to infinity and minus infinity. That makes +it hard to compute a convolution with it. So instead, there are +filter functions that approximate sinc but are nonzero only within a +manageable range. To get those, you multiply the sinc function by a +<i>window function</i>, which you select with the <b>-window</b> +option. The same holds for other filter functions that go on forever +like sinc. By default, for a filter that needs a window function, +the window function is the Blackman function. + +<h5>Filter Functions Besides Sinc</h5> + +<p>The math described above works only with sinc as the filter +function. <b>pamscale</b> offers many other filter functions, though. +Some of these approximate sinc and are faster to compute. For most of +them, I have no idea of the mathematical explanation for them, but +people do find they give pleasing results. They may not be based on +resampling at all, but just exploit the fact the convolution that is +coincidentally part of a resampling calculation. + +<p>For some filter functions, you can tell just by looking at the +convolution how they vary the resampling process from the perfect one +based on sinc: + +<p>The impulse filter assumes that the original continuous image is in +fact a step function -- the very one we computed as the first step in +the resampling. This is mathematically equivalent to the discrete +sampling method. + +<p>The box (rectangle) filter assumes the original image is a piecewise +linear function. Its graph just looks like straight lines connecting +the pixel values. This is mathematically equivalent to the pixel mixing +method when scaling down, and interpolation (ala <b>pamstretch</b>) +when scaling up. + +<h5>Gamma</h5> + +<p><b>pamscale</b> assumes the underlying continuous function is a +function of brightness (as opposed to light intensity), and therefore +does all this math using the gamma-adjusted numbers found in a PNM or +PAM image. The <b>-linear</b> option is not available with resampling +(it causes <b>pamscale</b> to fail), because it wouldn't be useful enough +to justify the implementation effort. + +<p>Resampling (<b>-filter</b>) was new in Netpbm 10.20 (January 2004). + +<h5>The filter functions</h5> + +<p>Here is a list of the function names you can specify for the +<b>-filter</b> option. For most of them, you're on your own to figure +out just what the function is and what kind of scaling it does. These +are common functions from mathematics. + +<dl> +<dt>point +<dd>The graph of this is a single point at X=0, Y=1. + +<dt>box + +<dd>The graph of this is a rectangle sitting on the X axis and centered +on the Y axis with height 1 and base 1. + +<dt>triangle + +<dd>The graph of this is an isosceles triangle sitting on the X axis +and centered on the Y axis with height 1 and base 2. + +<dt>quadratic +<dt>cubic +<dt>catrom +<dt>mitchell +<dt>gauss +<dt>sinc +<dt>bessel +<dt>hanning +<dt>hamming +<dt>blackman +<dt>kaiser +<dt>normal +<dt>hermite +<dt>lanczos +</dl> + + +<H3 id="linear">Linear vs Gamma-adjusted</H3> + +<p>The pixel mixing scaling method described above involves intensities +of pixels (more precisely, it involves individual intensities of +primary color components of pixels). But the PNM and PNM-equivalent +PAM image formats represent intensities with gamma-adjusted numbers +that are not linearly proportional to intensity. So <b>pamscale</b>, +by default, performs a calculation on each sample read from its input +and each sample written to its output to convert between these +gamma-adjusted numbers and internal intensity-proportional numbers. + +<p>Sometimes you are not working with true PNM or PAM images, but +rather a variation in which the sample values are in fact directly +proportional to intensity. If so, use the <b>-linear</b> option to +tell <b>pamscale</b> this. <b>pamscale</B> then will skip the +conversions. + +<p>The conversion takes time. In one experiment, it increased the +time required to reduce an image by a factor of 10. And the +difference between intensity-proportional values and gamma-adjusted +values may be small enough that you would barely see a difference in +the result if you just pretended that the gamma-adjusted values were +in fact intensity-proportional. So just to save time, at the expense +of some image quality, you can specify <b>-linear</b> even when you +have true PPM input and expect true PPM output. + +<p>For the first 13 years of Netpbm's life, until Netpbm 10.20 +(January 2004), <b>pamscale</b>'s predecessor <b>pnmscale</b> always +treated the PPM samples as intensity-proportional even though they +were not, and drew few complaints. So using <b>-linear</b> as a lie +is a reasonable thing to do if speed is important to you. But if +speed is important, you also should consider the <b>-nomix</b> option +and <b>pnmscalefixed</b>. + +<p>Another technique to consider is to convert your PNM image to the +linear variation with <b>pnmgamma</b>, run <b>pamscale</b> on it and +other transformations that like linear PNM, and then convert it back +to true PNM with <b>pnmgamma -ungamma</b>. <b>pnmgamma</b> is often +faster than <b>pamscale</b> in doing the conversion. + +<p>With <b>-nomix</b>, <b>-linear</b> has no effect. That's because +<b>pamscale</b> does not concern itself with the meaning of the sample +values in this method; <b>pamscale</b> just copies numbers from its +input to its output. + + +<H3 id="precision">Precision</H3> + +<P><B>pamscale</B> uses floating point arithmetic internally. There +is a speed cost associated with this. For some images, you can get +the acceptable results (in fact, sometimes identical results) faster +with <B>pnmscalefixed</B>, which uses fixed point arithmetic. +<B>pnmscalefixed</B> may, however, distort your image a little. See +the <B>pnmscalefixed</B> user manual for a complete discussion of the +difference. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmscalefixed.html">pnmscalefixed</A></B>, +<B><A HREF="pamstretch.html">pamstretch</A></B>, +<B><A HREF="pamditherbw.html">pamditherbw</A></B>, +<B><A HREF="pbmreduce.html">pbmreduce</A></B>, +<B><A HREF="pbmpscale.html">pbmpscale</A></B>, +<B><A HREF="pamenlarge.html">pamenlarge</A></B>, +<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmgamma.html">pnmgamma</A></B>, +<B><A HREF="pnmscale.html">pnmscale</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pam.html">pam</A></B> + +<H2 id="history">HISTORY</H2> + +<p><b>pamscale</b> was new in Netpbm 10.20 (January 2004). It was +adapted from, and obsoleted, <b>pnmscale</b>. <b>pamscale</b>'s +primary difference from <b>pnmscale</b> is that it handles the PAM +format and uses the "pam" facilities of the Netpbm programming +library. But it also added the resampling class of scaling method. +Furthermore, it properly does its pixel mixing arithmetic (by default) +using intensity-proportional values instead of the gamma-adjusted +values the <b>pnmscale</b> uses. To get the old <b>pnmscale</b> +arithmetic, you can specify the <b>-linear</b> option. + +<p>The intensity proportional stuff came out of suggestions by <a +href="mailto://amc+j5luho+@nicemice.net">Adam M Costello</a> in January +2004. + +<p>The resampling algorithms are mostly taken from code contributed by +<a href="mailto://reinelt@eunet.at">Michael Reinelt</a> in December 2003. + +<p>The version of <b>pnmscale</b> from which <b>pamscale</b> was +derived, itself evolved out of the original Pbmplus version of +<b>pnmscale</b> by Jef Poskanzer (1989, 1991). But none of that +original code remains. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> + <LI><A HREF="#synopsis">SYNOPSIS</A> + <LI><A HREF="#description">DESCRIPTION</A> + <UL> + <LI><A HREF="#scalefactor">The Scale Factors</a> + <LI><A HREF="#usage">Usage Notes</a> + <LI><A HREF="#transparency">Transparency</a> + <LI><A HREF="#imagetype">Input And Output Image Types</a> + <LI><A HREF="#methods">Methods Of Scaling</a> + <UL> + <LI><A HREF="#mixing">Pixel Mixing</a> + <LI><A HREF="#sampling">Discreate Sampling</a> + <LI><A HREF="#resampling">Resampling</a> + </UL> + <LI><A HREF="#linear">Linear vs Gamma-adjusted</a> + <LI><A HREF="#precision">Precision</A> + </UL> + <LI><A HREF="#seealso">SEE ALSO</A> + <LI><A HREF="#history">HISTORY</A> + </UL> + +</BODY> +</HTML> diff --git a/pamseq.html b/pamseq.html new file mode 100644 index 00000000..ba772ae9 --- /dev/null +++ b/pamseq.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pamseq User Manual</title></HEAD> +<BODY> +<H1>pamseq</H1> +<BR> +Updated: 8 May 2002 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamseq - generate PAM image of all possible tuple values, in sequence + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamseq</B> +[<B>-tupletype</B> <I>tupletype</I>] +<I>depth</I> +<I>maxval</I> + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and its +value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pamseq</B> generates a PAM image of a specified depth and specified +maxval that consists of a single row. The row consists of one tuple of +every possible value, in order. + +<P>For a depth of one, the order is simple: From 0 to maxval, going from +left to right. For higher depths, the highest numbered plane goes from +0 to maxval (going left to right) while all the other planes have value 0. +Then the sequence repeats except with the next highest plane set to a value +of 1, then 2, etc. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-tupletype</B> +<DD> +This is the value of the "tuple_type" attribute of the created PAM image. +It can be any string up to 255 characters. +</DL> + + +<A NAME="lbAF"> </A> +<H2>USAGE</H2> + +<p>To create a simple ramp of the values 0..255, for input to various matrix +calculations, try +<pre> +<kbd> + pamseq 1 255 +</kbd> +</pre> +(Before <b>pamseq</b> existed, <b>pgmramp</b> was often pressed into service +for this). + +<P>To create a PPM color map of all the possible colors representable with a +maxval of 5, do +<pre> +<kbd> + pamseq 3 5 -tupletype=RGB | pamtopnm +</kbd> +</pre> + +Again, with a modern program based on the Netpbm library, you don't need +the <b>pamtopnm</b> because a PAM RGB image is equivalent to a PPM image. + +<p>You can use such a color map with <b><a +href="pnmremap.html">pnmremap</a></b> to quantize the colors in an +image. With the maxval of 5 given in the example, you get a color map +of the set of "web safe" colors as defined by Netscape. Most web +browsers guarantee that they can produce at least these 216 colors +(215 plus black). + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pam.html">pam</A></B> + +<A NAME="history"> </A> +<H2>HISTORY</H2> +<b>pamseq</b> was added to Netpbm in June 2002. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">USAGE</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> + + diff --git a/pamsharpmap.html b/pamsharpmap.html new file mode 100644 index 00000000..0cd4c4ed --- /dev/null +++ b/pamsharpmap.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamsharpmap User Manual</TITLE></HEAD> +<BODY> +<H1>pamsharpmap</H1> +Updated: 07 February 2004 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamsharpmap - create map of sharpness in a PNM/PAM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> +<B>pamsharpmap</B> [<I>imagefile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamsharpmap</b> reads a Netpbm image (PNM or PAM) and produces +an image that shows how sharp it is at each location. + +<p>Sharpness is a measure of how suddenly (in space) colors change in +the image. <b>pamsharpmap</b> computes the sharpness of each +component color (R, G, B) separately and produces a pixel whose +intensity of each component color is directly proportional to the +sharpness of that component color at the same location in the input +image. Thus, at a point where the image is very sharp in its red and +green components, but dull in its blue component, you will see a +yellow pixel in the output. + +<p><b>pamsharpmap</b> computes sharpness at a point simply as the +average difference in intensity between the pixel at that point and +the 8 pixels surrounding it. + +<p>At the edges of the image, where there are not 8 pixels surrounding +a pixel, <b>pamsharpmap</b> assumes the image is extended with a black +border. + +<p><b>pamsharpmap</b> assumes that the image is a PNM or PNM +equivalent PAM. If it isn't, the results are not necessarily +meaningful. + +<p>The output image is the same dimensions, depth, and tuple type as +the input, and has maxval 255. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamsharpness.html">pamsharpness</A></B>, +<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>, +<B><A HREF="pamedge.html">pamedge</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="history"></A> +<h2>HISTORY</h2> + +<p><b>pamsharpmap</b> was added to Netpbm in Release 10.21 (March +2004). Bryan Henderson derived it from the program <b>pnmsharp</b> by +B.W. van Schooten and distributed as part of the Photopnmtools +package. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF=#history>HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamsharpness.html b/pamsharpness.html new file mode 100644 index 00000000..0f66cb1b --- /dev/null +++ b/pamsharpness.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamsharpness User Manual</TITLE></HEAD> +<BODY> +<H1>pamsharpness</H1> +Updated: 07 Februrary 2004 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamsharpness - measure the sharpness of a PNM/PAM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> +<B>pamsharpness</B> [<I>imagefile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamsharpness</b>reads a Netpbm image (PNM or PAM) and prints a +number that tells how sharp it is. + +<p>Sharpness is a measure of how suddenly (in space) colors change in +the image. <b>pamsharpness</b> computes the sharpness of the image as +the average difference in intensity between each pixel and its 8 surrounding +pixels, in each of the color components (R, G, B). + +<p><b>pamsharpness</b> does not include the edges of the image, where +there are not 8 pixels surrounding a pixel, in its computation. + +<p><b>pamsharpness</b> assumes that the image is a PNM or PNM +equivalent PAM. If it isn't, the results are not necessarily +meaningful. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamsharpmap.html">pamsharpmap</A></B>, +<B><A HREF="pammasksharpen.html">pammasksharpen</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="history"> </a> +<h2>HISTORY</h2> + +<p><b>pamsharpness</b> was added to Netpbm in Release 10.21 (March +2004). Bryan Henderson derived it from the program <b>pnmsharp</b> by +B.W. van Schooten and distributed as part of the Photopnmtools +package. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF=#history>HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamslice.html b/pamslice.html new file mode 100644 index 00000000..efb42efe --- /dev/null +++ b/pamslice.html @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamslice User Manual</TITLE></HEAD> +<BODY> +<H1>pamslice</H1> +Updated: 22 June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamslice - extract one line of values out of a Netpbm image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamslice</B> +{<B>-row=</B><i>rownumber</i> | <B>-column=</B><i>columnnumber</i>} +[<B>-plane=</b><i>planenumber</i>] +[<I>imagefile</I>] + +<?makeman .SH OPTION USAGE ?> +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamslice</b> extracts one line of tuples (pixels) out of a +Netpbm image and prints their values in a table. A line means a row +or column. It shows you a one-dimensional cross section of a +two-dimensional image. (With the <b>-plane</b> option, it can be +thought of as a one-dimensional cross-section of a three-dimensional +image). + +<p>The table has one line per tuple, consisting of blank-separated +ASCII decimal numbers. The first number is the column number if you +specified a row slice or the row number if you specified a column +slice. The rest of the numbers are the sample values in plane number +order. For a PBM or PGM input, there is only one plane. For a PPM +input, Plane 0 is red, Plane 1 is green, and Plane 2 is blue. See the +specifications of the image formats for details on exactly what these +numbers mean. + +If you want to see all the pixels in a PPM, PGM, or PBM image in ASCII +decimal, <b>pnmtoplainpnm</b> is a good way to do that. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-row=</B><i>rownumber</i> +<DD> + This indicates that the slice is to be horizontal -- i.e. one row of the + image -- and indicates which row. Rows are numbered from the top + starting with 0. + + <P>You cannot specify both <b>-row</b> and <b>-column</b>. + +<DT><B>-column=</B><i>colnumber</i> +<DD> + This indicates that the slice is to be vertical -- i.e. one column of the + image -- and indicates which column. Columns are numbered from the left + starting with 0. + + <P>You cannot specify both <b>-row</b> and <b>-column</b>. + +<DT><B>-plane=</B><i>planenumber</i> +<DD> + This specifies that you are interested in only one plane of the image + and which one. Planes are numbered from 0 and have meanings that vary + on the type of image. In a PPM image, Plane 0 is red, Plane 1 is + green, and Plane 2 is blue. + + <p>If you don't specify <b>-plane</b>, you get all the planes -- each + line of output has multiple numbers in addition to the sequence number. + If you do specify <b>-plane</b>, each line of output contains one + number in addition to the sequence number. + +<DT><B>-xmgr</B> +<DD> + This option causes <b>pamslice</b> to format the output as input for a + <b>xmgr</b> so you can plot it. The only difference this option makes + is that it adds header information to the beginning of the output. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamcut.html">pamcut</A> +<A HREF="pnmtoplainpnm.html">pnmtoplainpnm</A> +<A HREF="pamchannel.html">pnmtoplainpnm</A> +<A HREF="pnm.html">pnm</A> +<A NAME="lbAG"> </A> + +<a name="history"> </a> +<H2>HISTORY</H2> + +<P><b>pamslice</b> replaced <b>pgmslice</b> in Netpbm 10.3 (June 2002). +It was backward compatible, but worked on Netpbm images other than PGM and +PBM and added the <b>-plane</b> and <b>-xmgr</b> options. + +<a name="author"></a> +<H2>AUTHOR</H2> + +<P>Jos Dingjan <<A +HREF="mailto:jos@tuatha.org">jos@tuatha.org</A>> wrote +<b>pgmslice</b> after being unable to find the source code to Marco +Beijersbergen's program with the same name. Bryan Henderson converted it +to <b>pamslice</b>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/pamsplit.html b/pamsplit.html new file mode 100644 index 00000000..ab5dff9b --- /dev/null +++ b/pamsplit.html @@ -0,0 +1,86 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamsplit User Manual</TITLE></HEAD> +<BODY> +<H1>pamsplit</H1> +Updated: 23 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamsplit - split a multi-image PNM/PAM file into single-image files + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamsplit</B> + +[<I>netpbmfile</I> + +[<I> output_file_pattern</I>]] + +[<b>-padname=</b><i>n</i>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamsplit</b> reads a PNM or PAM stream as input. It copies each image +in the input into a separate file, in the same format. + +<P><I>netpbmfile</I> is the file specification of the input file, or +<B>-</B> to indicate Standard Input. The default is Standard Input. + +<P><I>output_file_pattern</I> tells how to name the output files. It +is the file specification of the output file, except that the first +occurence of "%d" in it is replaced by the image sequence +number in unpadded ASCII decimal, with the sequence starting at 0. If +there is no "%d" in the pattern, <B>pamsplit</B> fails. + +<P>The default output file pattern is "image%d". + +<p>The <b>-padname</b> option specifies to how many characters you +want the image sequence number in the output file name padded with +zeroes. <b>pamsplit</b> adds leading zeroes to the image sequence +number to get up to at least that number of characters. This is just +the number of characters in the sequence number part of the name. For +example, <b>pamsplit - outputfile%d.ppm -padname=3</b> would yield +output filenames <b>outputfile000.ppm</b>, <b>outputfile001.ppm</b>, +etc. + +<p>The default is no padding (equivalent to <b>-padname=0</b>. +<P>The <b>-padname</b> option was new in Netpbm 10.23 (July 2004). +Before that, there was never any padding. + + +<P>Note that to do the reverse operation (combining multiple +single-image Netpbm files into a multi-image one), there is no special +Netpbm program. Just use <B>cat</B>. + +<p>If you just want to find out basic information about the images in a +stream, you can use <b>pamfile</b> on the stream. + +<p>To extract images from a stream and generate a single stream containing +them, use <b>pampick</b>. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamfile.html">pamfile</A></B>, +<B><A HREF="pampick.html">pampick</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B>cat</b> man page + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamstack.html b/pamstack.html new file mode 100644 index 00000000..295a01fd --- /dev/null +++ b/pamstack.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamstack User Manual</TITLE></HEAD> +<BODY> + +<H1>pamstack</H1> +Updated: 10 January 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pamstack - stack planes of multiple PAM images into one PAM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamstack</B> +[<B>-tupletype </B><I>tupletype</I>] +[<I>inputfilespec</I> ...] + +<P>All options may be abbreviated to the shortest unique prefix. You +may use two hyphens instead of one. You may separate an option from +its value with a space instead of <B>=</B>. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamstack</b> reads multiple PAM or PNM images as input and +produces a PAM image as output, consisting of all the planes +(channels) of the inputs, stacked in the order specified. + +<P>The output is the same dimensions as the inputs, except that the +depth is the sum of the depths of the inputs. It has the same maxval. +<B>pamstack</B> fails if the inputs are not all the same width, height, +and maxval. The tuple type is a null string unless you specify the +<B>-tupletype</B> option. + +<p><b>pamstack</b> works with multi-image streams. It stacks the 1st +image in all the streams into one output image (the first one in the +output stream), then stacks the 2nd image in all the streams into the +2nd image in the output stream, and so on, until one of the streams +runs dry. It's like a matrix operation. + +<p>Before Netpbm 10.32 (February 2006), <b>pamstack</b> ignored all but +the first image in each input stream. + +<P><B>pamchannel</B> does the opposite of <B>pamstack</B>: It extracts +individual planes from a single PAM. + +<P>Use <a href="pamtopnm.html">pamtopnm</a> to convert a suitable PAM +image to a more traditional PNM (PBM, PGM, or PPM) image. (But there's +no need to do that if you're going to feed it to a modern Netpbm program -- +they all take suitable PAM input directly). + +<P>One example of using <B>pamstack</B> is that some Netpbm programs +accept as input a PAM that represents graphic image with transparency +information. Taking a color image for example, this would be a PAM +with tuple type "RGB_ALPHA". In Netpbm, such images were +traditionally represented as two images - a PPM for the color and a +PGM for the transparency. To convert a PPM/PGM pair into +PAM(RGB_ALPHA) input that newer programs require, do something like +this: + +<pre> +<kbd> +$ pamstack -tupletype=RGB_ALPHA myimage.ppm myalpha.pgm | \ + pamtouil >myimage.uil +</kbd> +</pre> + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-tupletype </B><I>tupletype</I> +<DD> +This specifies the tuple type name to be recorded in the output. You may +use any string up to 255 characters. Some programs recognize some names. +If you omit this option, the default tuple type name is null. +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pam.html">pam</A></B> +<B><A HREF="pamchannel.html">pamchannel</A></B> + +<h2 id="history">HISTORY</h2> + +<p><b>pamstack</b> was new in Netpbm 10.0 (June 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamstereogram.html b/pamstereogram.html new file mode 100644 index 00000000..d367f7ca --- /dev/null +++ b/pamstereogram.html @@ -0,0 +1,286 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + +<head> +<title>Pamstereogram User Manual</title> +<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> +</head> + +<body> + +<h1>pamstereogram</h1> + +<p>Updated: 6 January 2006</p> + +<p><a href="#contents">Table Of Contents</a></p> + + +<h2 id="name">NAME</h2> + +<p>pamstereogram - create a single-image stereogram from a PAM +height map</p> + +<h2 id="synopsis">SYNOPSIS</h2> + +<p> +<b>pamstereogram</b> +[<b>-help</b>] +[<b>-verbose</b>] +[<b>-blackandwhite</b> | <b>-grayscale</b> | <b>-color</b>] +[<b>-maxval=</b><i>value</i>] +[<b>-patfile=</b><i>pamfile</i>] +[<b>-xshift=</b><i>pixels</i>] +[<b>-yshift=</b><i>pixels</i>] +[<b>-magnifypat=</b><i>scale</i>] +[<b>-guidesize=</b><i>pixels</i>] +[<b>-dpi=</b><i>resolution</i>] +[<b>-crosseyed</b>] +[<b>-makemask</b>] +[<b>-eyesep=</b><i>inches</i>] +[<b>-depth=</b><i>fraction</i>] +[<b>-randomseed=</b><i>integer</i> +[<i>infile</i>] +</p> + +<p>You may use either single or double hyphens to denote options. You +may use either whitespace or an equals sign to separate an option name +from its value.</p> + + +<h2 id="description">DESCRIPTION</h2> + +<p>This program is part of <a href="index.html">Netpbm</a>.</p> + +<p><b>pamstereogram</b> inputs a height map (a map of the distances +from your eye of the points in a scene) and outputs a single-image +stereogram (SIS). A SIS is a 2-D image specially designed to appear +three dimensional when viewed with relaxed, slightly unfocused +eyes. What's exciting about single-image stereograms is that they +don't require special glasses to view, although it does require a bit +of practice to train your eyes to unfocus properly. The +<b>pamstereogram</b> program provides a wealth of control over how the +stereogram is generated, including the following:</p> + +<ul> +<li>black and white, grayscale, or color output</li> + +<li>single-image random-dot stereograms (SIRDS) or single-image +stereograms (SIS) using a tiled image</li> + +<li>images targeting a given device resolution and eye +separation</li> + +<li>optional guide boxes to assist in focusing</li> + +<li>the ability to trade off depth levels for easier viewing</li> + +<li>choice of wall-eyed or cross-eyed stereograms</li> + +</ul> +<p>The output is a PAM image on standard output. Options control +the exact format of the PAM. If you want a PNM (PBM, PGM, or PPM) +image, use <b>pamtopnm</b> on the output. There is no need to convert +if you will use the image as input to a current Netpbm program, but +many other programs don't know what a PAM is. + +<p>To make a red/green type of stereogram (that you view with 3-D +glasses) instead, see <b>ppm3d</b>.</p> + + +<h2 id="options">OPTIONS</h2> + +<dl> + +<dt><b>-verbose</b></dt> +<dd>Display messages about image sizes and formats and properties +of the stereogram being generated.</dd> + +<dt><b>-blackandwhite</b></dt> +<dd>Produce a single-image random-dot black-and-white stereogram. +This is the default.</dd> + +<dt><b>-grayscale</b></dt> +<dd>Produce a single-image random-dot grayscale stereogram.</dd> + +<dt><b>-color</b></dt> +<dd>Produce a single-image random-dot color stereogram.</dd> + +<dt><b>-maxval=</b><i>value</i></dt> +<dd>Designate the maximum value of each gray/color component, i.e. +the color resolution. Smaller values make the output image have +smaller numbers of unique grays/colors. If you don't specify +<b>-maxval</b>, <b>pamstereogram</b> uses the maxval of the input +image. This option has no effect with <b>-blackandwhite</b>.</dd> + +<dt><b>-patfile=</b><i>pnmfile</i></dt> +<dd>Specify an image to use as a repeated background pattern for +the stereogram instead of a random-dot pattern. Intricate images +generally produce a crisper 3-D effect that simpler images. The +output file will have the same maxval and format (black and white, +grayscale or color) as the pattern file. You cannot specify the +<b>-patfile</b> option along with <b>-blackandwhite</b>, +<b>-grayscale</b>, <b>-color</b>, or <b>-maxval</b>.</dd> + +<dt><b>-xshift=</b><i>pixels</i></dt> +<dd>Shift the pattern image (designated by <b>-patfile</b>) to the +right by <i>pixels</i> pixels (default: 0). +<!-- <b>-xshift</b> is helpful when creating "true-color" stereograms. --> +This option is valid only along with <b>-patfile</b>.</dd> + +<dt><b>-yshift</b> <i>pixels</i></dt> +<dd>Shift the pattern image (designated by <b>-patfile</b>) +downwards by <i>pixels</i> pixels (default: 0). This option is +valid only along with <b>-patfile</b>.</dd> + +<dt><b>-magnifypat=</b><i>scale</i></dt> +<dd>Magnify each pixel in the pattern file or each random dot by +integral scaling factor <i>scale</i>. Note that +<b>pamstereogram</b> applies the pattern magnification +<em>after</em> pattern shifting (<b>-xshift</b> and +<b>-yshift</b>).</dd> + +<dt><b>-guidesize=</b><i>pixels</i></dt> +<dd>Draw a pair of <i>pixels</i> by <i>pixels</i> black squares on +a white background underneath the stereogram proper. These squares +help you guide your eyes into proper focus to view the 3-D image. +The trick is to focus your eyes some distance behind the image, +causing you to see four black squares, then continue altering your +focus distance until the middle two black squares fuse into a +single black square. At that point, a crisp, 3-D image will appear. +<p>If <i>pixels</i> is negative, <b>pamstereogram</b> will draw the +guide squares above the stereogram instead of below it. If +<i>pixels</i> is zero (the default), <b>pamstereogram</b> will draw +no guide squares.</p> +</dd> + +<dt><b>-dpi=</b><i>resolution</i></dt> +<dd>Specify the resolution of the output device in dots per inch. +The default is 96 DPI, which represents a fairly crisp screen +resolution.</dd> + +<dt><b>-crosseyed</b></dt> +<dd>Invert the gray levels in the height map (input image) so that +the 3-D image pops out of the page where it would otherwise sink +into the page and vice versa. Some people are unable to diverge +their eyes and can only cross them. The <b>-crosseyed</b> option +enables such people to see the 3-D image as intended.</dd> + +<dt><b>-makemask</b></dt> +<dd>Instead of a stereogram, output a PAM mask image showing +coloring constraints. New pixels will be taken from the pattern +file where the mask is black. Copies of existing pixels will be +taken from the pattern file where the mask is white. The +<b>-makemask</b> option can be used to help create more +sophisticated pattern files (to use with <b>-patfile</b>) Note that +<b>-makemask</b> ignores <b>-magnifypat</b>; it always produces +masks that assume a pattern magnification of 1.</dd> + +<dt><b>-eyesep=</b><i>inches</i></dt> +<dd>Specify the separation in inches between your eyes. The +default, 2.5 inches (6.4 cm), should be sufficient for most people +and probably doesn't need to be changed.</dd> + +<dt><b>-depth=</b><i>fraction</i></dt> +<dd>Specify the output image's depth of field. That is, +<i>fraction</i> represents the fractional distance of the near +plane from the far plane. Smaller numbers make the 3-D image easier +to perceive but flatter. Larger numbers make the 3-D image more +difficult to perceive but deeper. The default, 0.3333, generally +works fairly well.</dd> + +<dt><b>-randomseed=</b><i>integer</i> +<dd>Specify a seed to be used for the random number generator. +The default is to use a seed based on the time of day, to one second +granularity. + +<p>It is useful to specify the seed if you want to create reproducible +results. With the same random seed, you should get identical results +every time you run <b>pamstereogram</b>. + +<p>This is irrelevant if you use a pattern file (<b>-patfile</b> +option), because there is no random element to <b>pamstereogram</b>'s +behavior. + +<p>This option was new in Netpbm 10.32 (Februrary 2006). + +</dl> + + +<h2 id="parameters">PARAMETERS</h2> + +<p>The only parameter, <i>infile</i>, is the name of an input file +that is a height map image. If you don't specify <i>infile</i>, the +input is from standard input.</p> + +<p>The input is a PAM image of depth 1. Each sample represents the +distance from the eye that the 3-D image at that location should +be. Higher numbers mean further from the eye.</p> + +<p><b>pamstereogram</b> pays no attention the the image's tuple +type and ignores all planes other than plane 0.</p> + +<p>Like any Netpbm program, <b>pamstereogram</b> will accept PNM +input as if it were the PAM equivalent.</p> + +<p>A good initial test is to input an image consisting of a solid +shape of distance 0 within a large field of maximum distance (e.g., a +black square on a white background).</p> + + + +<h2 id="examples">EXAMPLES</h2> + +<p>Generate a SIRDS out of small, brightly colored squares and +prepare it for display on an 87 DPI monitor:</p> +<pre> + pamstereogram heightmap.pam \ + -dpi 87 -verbose -color -maxval 1 -magnifypat 3 \ + >3d.pam +</pre> +<p>Generate a SIS by tiling a PPM file (a prior run with +<b>-verbose</b> indicates how wide the pattern file should be for +seamless tiling, although any width is acceptable for producing +SISes):</p> +<pre> + pamstereogram myheights.pam -patfile mypattern.ppm >mysis.pam +</pre> + + +<h2 id="seealso">SEE ALSO</h2> +<ul> +<li><a href="pam.html">pam</a></li> + +<li><a href="ppm3d.html">ppm3d</a></li> + +<li>Harold W. Thimbleby, Stuart Inglis, and Ian H. Witten. +<em>Displaying 3D Images: Algorithms for Single Image Random Dot +Stereograms</em>. In IEEE Computer, <strong>27</strong>(10):38-48, +October 1994. DOI <a +href="http://dx.doi.org/10.1109/2.318576">10.1109/2.318576</a>.</li> + +</ul> + + +<h2><a id="history">HISTORY</a></h2> +<p><b>pamstereogram</b> was new in Netpbm 10.22 (April 2004), +but probably broken beyond usability until +Netpbm 10.32 (Februrary 2006) and Netpbm 10.26.23 (January 2006).</p> + + +<h2><a id="author">AUTHOR</a></h2> +<p>Copyright (C) 2006 Scott Pakin, <a href= +"mailto:scott+pbm@pakin.org">scott+pbm@pakin.org</a>.</p> +<h2><a id="contents">Table Of Contents</a></h2> +<ul> +<li><a href="#synopsis">SYNOPSIS</a></li> +<li><a href="#description">DESCRIPTION</a></li> +<li><a href="#options">OPTIONS</a></li> +<li><a href="#parameters">PARAMETERS</a></li> +<li><a href="#examples">EXAMPLES</a></li> +<li><a href="#seealso">SEE ALSO</a></li> +<li><a href="#history">HISTORY</a></li> +<li><a href="#author">AUTHOR</a></li> +</ul> +</body> +</html> diff --git a/pamstretch-gen.html b/pamstretch-gen.html new file mode 100644 index 00000000..306a0f3f --- /dev/null +++ b/pamstretch-gen.html @@ -0,0 +1,68 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamstretch-gen User Manual</TITLE></HEAD> +<BODY> +<H1>pamstretch-gen</H1> +Updated: 10 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamstretch-gen - use pamstretch and pamscale to scale by non-integer values + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamstretch-gen</B> + +<I>N</I> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pamstretch-gen</B> is a program which uses <B><A +HREF="pamstretch.html">pamstretch</A></B>, <B><A +HREF="pnmfile.html">pnmfile</A></B>, and <B><A +HREF="pamscale.html">pamscale</A></B> to smoothly scale up a PNM file +by any ratio; it's like a more general version of pamstretch (hence +the name). But other than the `any ratio' bit, it's much the same as +pamstretch. :-) + + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +The program uses <b>awk</b> just to make some simple floating-point +calculations, which is probably overkill. But using <b>dc</b> makes +my head hurt. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamstretch.html">pamstretch</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Russell Marks (<A +HREF="mailto:russell.marks@ntlworld.com">russell.marks@ntlworld.com</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">BUGS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamstretch.html b/pamstretch.html new file mode 100644 index 00000000..0c4247df --- /dev/null +++ b/pamstretch.html @@ -0,0 +1,131 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamstretch User Manual</TITLE></HEAD> +<BODY> +<H1>pamstretch</H1> +Updated: 11 November 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamstretch - scale up a PNM or PAM image by interpolating between pixels. + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamstretch</B> + +[<B>-xscale=</B><I>X</I>] + +[<B>-yscale=</B><I>Y</I>] + +<BR> + +[<B>-blackedge</B>] + +[<B>-dropedge</B>] + +<I>N</I> + +[<I>infile</I>] + +<P>You can use the minimum unique abbreviation of the options. You can use +two hyphens instead of one. You can separate an option name from its value +with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pamstretch </B> scales up pictures by integer values, either +vertically, horizontally, or both. <B>pamstretch </B> differs from +<B>pamscale</B> and <B>pamenlarge</B> in that when it inserts the +additional rows and columns, instead of making the new row or column a +copy of its neighbor, <B>pamstretch</B> makes the new row or column an +interpolation between its neighbors. In some images, this produces +better looking output. + +<P>To scale up to non-integer pixel sizes, e.g. 2.5, try <B><A +HREF="pamstretch-gen.html">pamstretch-gen</A></B> instead. + +<P>Options let you select alternative methods of dealing with the +right/bottom edges of the picture. Since the interpolation is done +between the top-left corners of the scaled-up pixels, it's not obvious +what to do with the right/bottom edges. The default behaviour is to +scale those up without interpolation (more precisely, the right edge +is only interpolated vertically, and the bottom edge is only +interpolated horizontally), but there are two other possibilities, +selected by the <B>blackedge</B> and <B>dropedge</B> options. + +<A NAME="lbAE"> </A> +<H2>PARAMETERS</H2> + +<P>The <I>N</I> parameter is the scale factor. It is valid only if +you <em>don't</em> specify <B>-xscale</B> or <B>-yscale</B>. In that +case, <B>pamstretch</B> scales in both dimensions and by the scale +factor <I>N</I>. + +<A NAME="lbAF"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-xscale=</B><I>X</I> + +<DD>This is the horizontal scale factor. If you don't specify this, but do +specify a vertical scale factor, the horizontal scale factor is 1. + +<DT><B>-yscale=</B><I>Y</I> + +<DD>This is the vertical scale factor. If you don't specify this, but +do specify a horizontal scale factor, the vertical scale factor is 1. + +<DT><B>-blackedge</B> + +<DD>interpolate to black at right/bottom edges. + +<DT><B>-dropedge</B> + +<DD>drop one (source) pixel at right/bottom edges. This is arguably +more logical than the default behaviour, but it means producing output +which is a slightly odd size. + +</DL> + +<A NAME="lbAG"> </A> +<H2>BUGS</H2> + +<p>Usually produces fairly ugly output for PBMs. For most PBM input +you'll probably want to reduce the `noise' first using something like +<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B>. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamstretch-gen.html">pamstretch-gen</A></B>, +<B><A HREF="pamenlarge.html">pamenlarge</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +<p>Russell Marks (<A +HREF="mailto:russell.marks@ntlworld.com">russell.marks@ntlworld.com</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">PARAMETERS</A> +<LI><A HREF="#lbAF">OPTIONS</A> +<LI><A HREF="#lbAG">BUGS</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamsumm.html b/pamsumm.html new file mode 100644 index 00000000..c47941c7 --- /dev/null +++ b/pamsumm.html @@ -0,0 +1,137 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamsumm User Manual</TITLE></HEAD> +<BODY> +<H1>pamsumm</H1> +Updated: 07 February 2004 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamsumm - Summarize the samples in a Netpbm image arithmetically + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> +<B>pamsumm</B> +{ +<b>-sum</b> | +<b>-mean</b> | +<b>-min</b> | +<b>-max</b> +} +[<b>-normalize</b>] +[<b>-brief</b>] +[<I>imagefile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamsumm</b> reads a Netpbm image (PNM or PAM) and performs a +summary function over all the samples in all the rows, columns, and planes +and prints the result to Standard Output. + +<p><b>pamsumm</b> performs the operation on the actual sample values, +not on the light intensities represented by them in the case that the +image is a PGM or PPM image or PAM equivalent. If you want to do +arithmetic on light intensities of such a visual image, you can use +<b>pnmgamma</b> to convert it to one with samples proportional to +light intensity, and then use <b>pamsumm</b> on the result. + +<p>If you want to summarize by column (e.g. add up the columns +separately), use <b>pamsummcol</b>. If you want to summarize by row, +use a combination of <b>pamsummcol</b> and <b>pamflip</b>. If you +want to summarize a particular plane, use <b>pamchannel</b> to +extract it and then <b>pamsumm</b>. + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<p>You must specify exactly one of <b>-sum</b>, <b>-mean</b>, +<b>-min</b>, or <b>-max</b>. + +<DL COMPACT> +<DT><B>-sum</b> + +<DD> + <P>This option makes the summary function addition. + +<DT><B>-mean</b> + +<DD> + <P>This option makes the summary function arithmetic mean. + +<DT><B>-min</b> + +<DD> + <P>This option makes the summary function arithmetic minimum. + +<DT><B>-max</b> + +<DD> + <P>This option makes the summary function arithmetic maximum. + +<DT><B>-normalize</b> + +<DD> + <P>This option causes each sample to be normalized to a fraction + (in the range 0..1) so the result is independent of the image's + maxval. E.g. if you request the mean of an image which has maxval + 200 and all the samples have value 50, <b>pamsumm</b> will give you + 50 as an answer. But <b>pamsumm -normalize</b> will give you .25. + + <p>If you want a result that is independent of maxval but still in + integers, and your input is PNM, you can use <b>pamdepth</b> to + convert to some standard maxval. For example, if you want the mean + intensity of a PPM image, on a scale of 0 to 99, do + +<pre> +<kbd> + pamdepth 99 myimage.ppm | pamsumm -mean +</kbd> +</pre> + +<p>This option was new in Netpbm 10.22 (April 2004) + +<dt><b>-brief</b> +<dd> + <p>This option causes <b>pamsumm</b> to display the answer as a bare + number, rather than in a complete sentence. + +<p>This option was new in Netpbm 10.22 (April 2004) + +</DL> + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamsummcol.html">pamsumm</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<A NAME="history"> </A> +<h2>HISTORY</h2> + +<p><b>pamsumm</b> was added to Netpbm in Release 10.21 (March +2004). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF=#history>HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamsummcol.html b/pamsummcol.html new file mode 100644 index 00000000..871f2452 --- /dev/null +++ b/pamsummcol.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamsummcol User Manual</TITLE></HEAD> +<BODY> +<H1>pamsummcol</H1> +Updated: 07 February 2004 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pamsummcol - summarize (sum, average, etc) a Netpbm image by column + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> +<B>pamsummcol</B> +{ +<b>-sum</b> | +<b>-mean</b> | +<b>-min</b> | +<b>-max</b> +} +[<I>imagefile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamsummcol</b> reads a Netpbm image (PNM or PAM) and performs a +summary function over all the rows in each column (sum, mean, etc.). +It produces an image of the same kind that the same width and depth as +the input, and one row high. Its sample values are the result of the +summary. + +<p><b>pamsummcol</b> performs the summary operation on each plane +independently. + +<p><b>pamsummcol</b> performs the operation on the actual sample values, +not on the light intensities represented by them in the case that the +image is a PGM or PPM image. + +<p>If you want to summarize by row instead of by column, run the input +through <b>pamflip</b> first (and if you want the output to be a single +column instead of a single row, use <b>pamflip</b> again). + +<p>If you want to summarize over the entire image instead of over columns +separately, use <b>pamsumm</b>. + +<p><b>pamsummcol</b> performs the operation on the actual sample values, +not on the light intensities represented by them in the case that the +image is a PGM or PPM image or PAM equivalent. You can use +<b>pnmgamma</b> to convert such an image to one with samples proportional +to light intensity, and then use <b>pamsummcol</b> on the result. + +<p>You can achieve the same thing as <b>pamsummcol -mean</b> with +<b>pamscale</b>. Just scale vertically to a single row, without scaling +horizontally at all. Use the pixel mixing method. + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<p>You must specify exactly one of <b>-sum</b>, <b>-mean</b>, +<b>-min</b>, or <b>-max</b>. + +<DL COMPACT> +<DT><B>-sum</b> + +<DD> + <P>This option makes the summary function addition. + In each column and plane of the output row, the sample value is the + sum of all the samples values in the same column and plane of the input. + If a result is greater than the image maxval, it is clipped to + the maxval. + +<DT><B>-mean</b> + +<DD> + <P>This option makes the summary function arithmetic mean. + In each column and plane of the output row, the sample value is the + mean of all the samples values in the same column and plane of the input. + +<DT><B>-min</b> + +<DD> + <P>This option makes the summary function arithmetic minimum. + In each column and plane of the output row, the sample value is the + minimum of all the samples values in the same column and plane of + the input. + +<DT><B>-max</b> + +<DD> + <P>This option makes the summary function arithmetic maximum. + In each column and plane of the output row, the sample value is + the maximum of all the samples values in the same column and + plane of the input. + +</DL> + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamsumm.html">pamsumm</A></B>, +<B><A HREF="pamflip.html">pamscale</A></B>, +<B><A HREF="pamfunc.html">pamfunc</A></B>, +<B><A HREF="pamarith.html">pamarith</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<A NAME="history"></a> +<h2>HISTORY</h2> + +<p><b>pamsummcol</b> was added to Netpbm in Release 10.21 (March +2004). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF=#history>HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamthreshold.html b/pamthreshold.html new file mode 100644 index 00000000..5c1dd2d8 --- /dev/null +++ b/pamthreshold.html @@ -0,0 +1,148 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamthreshold User Manual</TITLE></HEAD> +<BODY> +<H1>pamthreshold</H1> +Updated: 12 May 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamthreshold - threshold grayscale image to black and white + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamthreshold</B> +[<b>-simple</b>] +[<b>-local=</b><i>width</i><b>x</b><i>height</i>] +[<b>-dual=</b><i>width</i><b>x</b><i>height</i>] +[<b>-threshold=</b><i>threshold</i>] +[<b>-contrast=</b><i>threshold</i>] +[<I>inputpamfile</I>] + +<P>Minimum unique abbreviation of options is acceptable. You may use +double hyphens instead of a single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamthreshold</b> thresholds a grayscale image. Thresholding means +dividing the image into background and foreground by comparing every pixel +to a thresholding value. + +<p>The input should be a PGM image or a PAM image of tuple type +GRAYSCALE. However, pamthreshold doesn't check; it just thresholds the +first channel as if it were grayscale samples. So if you +feed it e.g. a PPM image, it will work but produce probably useless +results. + +<p>The output is a PAM with tuple type BLACKANDWHITE. You can turn +this into a PBM (if you need to use it with an older program that +doesn't understand PAM, or you can't afford the 8X amount of space +that PAM uses for the image) with <b>pamtopnm</b>. + +<p>The output is to Standard Output. + +<p>Another way to convert a grayscale image to black and white is to +dither. Dithering is using clustered black and white pixels such that +if you step back and look at the picture, you see varying levels of +gray. <B>pamditherbw</B> does dithering. + +<H2 id="options">OPTIONS</H2> + +<p>Without any options, <b>pamthreshold</b> uses an iterative +algorithm found in the <a +href="http://www.wikipedia.org/">wikipedia</a> article +<a href="http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29"> +<i>Thresholding (image processing)</i></a> to compute the +thresholding value. It uses this threshold to globally threshold the +image. This should work well for most images. The program issues a +message telling you what threshold it used. (Netpbm messages go to +Standard Error, and you can turn them off with the Netpbm command +option <b>-quiet</b>). + +<DL COMPACT> + +<dt><b>-simple</b></dt> + +<dd>This selects simple or global thresholding, +i.e. <b>pamthreshold</b> compares every pixel to the threshold you +specify with <b>-threshold</b>. This works well for black and white +text pages scanned with a flatbed scanner and is faster than the +default method that iteratively determines the thresholding value +first. + +<dt><b>-local=</b><i>width</i><b>x</b><i>height</i></dt> + +<dd>This selects local adaptive thresholding (also known as dynamic +thresholding) using the neighborhood of <i>width</i> and <i>height</i> +around every pixel. <b>pamthreshold</b> computes the threshold +individually for each pixel of the image. This can accommodate +changing lighting conditions in the image. Depending on the size of +the neighborhood this can be quite slow. + +<dt><b>-dual=</b><i>width</i><b>x</b><i>height</i></dt> + +<dd>This selects a dual thresholding algorithm using a global threshold +for low contrast neighborhoods and local thresholding otherwise. This +can preserve larger back- respectively foreground areas than local +adaptive thresholding. This algorithm was proposed in the paper +"An Approach To Licence Plate Recognition" by J.R. Parker and Pavol Federl. + +<dt><b>-threshold=</b><i>threshold</i></dt> + +<dd>This sets the thresholding value for simple or local thresholding. +The value is a floating point number in the range [0, 1], where 0 +is black and 1 is the maxval of the image. + +<p>If you don't specify this option, <b>pamthreshold</b> uses a threshold +of 0.5. Without <b>-simple</b> or <b>-local</b> this option is +meaningless. + +<dt><b>-contrast=</b><i>threshold</i></dt> + +<dd>This sets the threshold to determine if a neighborhood has low contrast +or not for dual thresholding. The value is a floating point number in +the range [0, 1]. + +<p>If you don't specify this option, <b>pamthreshold</b> uses a contrast +threshold of 0.05. Without <b>-dual</b> this option is meaningless. + +</DL> + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamditherbw.html">pamditherbw</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pam.html">pam</A></B> + +<H2 id="history">HISTORY</H2> + +<p><b>pamthreshold</b> was new in Netpbm 10.34 (June 2006). + +<h2 id="author">AUTHOR</h2> +<p> +<b>pamthreshold</b> is Copyright © 2006 by Erik Auerswald and released +under the <a href="http://www.gnu.org/licenses/gpl.html">GPL</a>. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/pamtilt.html b/pamtilt.html new file mode 100644 index 00000000..e5e0566a --- /dev/null +++ b/pamtilt.html @@ -0,0 +1,175 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtilt User Manual</TITLE></HEAD> +<BODY> +<H1>pamtilt</H1> +Updated: 28 August 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> +pamtilt - print the tilt angle of a PGM file + +<H2 id="synopsis">SYNOPSIS</H2> + +<b>pamtilt</b> +[<b>-angle=</b><i>maxangle</i>] +[<b>-fast</b>] +[<b>-quality=</b><i>q</i> +[<b>-hstep=</b><i>n</i>] +[<b>-vstep=</b><i>n</i>] +<br> +[<b>-dstep=</b><i>n</i>] +[<b>-astep=</b><i>n</i>] +[<b>-verbose</b>] +[<i>pgmfile</i>] + +<h2 id="examples">EXAMPLES</h2> + +<pre> +<kbd> + scanimage --mode Gray --resolution 300 >crooked.pgm + pnmrotate -b white `pamtilt crooked.pgm` crooked.pgm >straight.pgm +</kbd> + (then crop, threshold, etc.) +</pre> + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtilt</b> tries to find the correct angle for untilting +(de-skewing) a scanned text document. The output is a single +floating-point number (the angle in degrees) for use as the argument +to pnmrotate. + +<p>"Document skew" is the name given to what happens when +you feed a page into an image scanner at an angle: the resulting image +is tilted. <b>pamtilt</b> aims to correct that. + +<p><b>pamtilt</b> makes three iterations at successively finer +increments, testing prospective rotation angles to find the best one. +<b>pamtilt</b> works best for straightening images with strong +horizontal lines and does poorly with arbitrary photos. If +<b>pamtilt</b> has no confidence in its results, it prints the special +value 00.00; you can check for this or just pass it as a legal +argument to pnmrotate. + +<p><b>pamtilt</b> operates on the first plane of the input image, +which is either PNM or PAM, and ignores any other planes. Ordinarily, +the input is PGM or GRAYSCALE PAM, so there is only one plane. + +<p><b>pamtilt</b> works on bilevel (PBM, BLACKANDWHITE PAM) images as +well as grayscale, but you will minimize artifacts if you scan and +rotate in grayscale before you apply a threshold to make a bilevel +image. + +<H2 id="options">OPTIONS</H2> + +<p>A few options have general utility: + +<DL COMPACT> + +<dt><b>-angle=</b><i>maxangle</i> + +<dd> +Assume a maximum tilt angle of <i>maxangle</i> (measured in degrees). +The default value is sufficient for most images, even those scanned +somewhat carelessly. + +<p>The default is 10.0. + +<dt><b>-fast</b> + +<dd> +Skip the third iteration for speed at the expense of accuracy. + +<dt><b>-verbose</b> +<dd> +Show on Standard Error the measurements computed at each tested angle. + +</dl> + +<p>Here are some other options you can use to tune the operation of +<b>pamtilt</b> but they're seldom needed. The default values +accommodate a wide variety of input documents. + +<dl> +<DT> +<B>-quality=</B><i>q</i> + +<dd>Require a signal-to-noise ratio of a least <i>q</i> on the first +iteration to report a valid result. Larger values reduce the chances +of obtaining a bogus result at the risk of obtaining no result at all. + +<p>The default is 1.0. + +<dt><b>-hstep=</b><i>n</i> +<dd> +Set the horizontal increment to check every <i>n</i>th column. This +value affects both run time and memory requirements. + +<p>The default is 11. + +<dt><b>-vstep=</b><i>n</i> + +<dd> +Set the vertical increment to check every nth row. Larger values +usually work, reducing run time, but they increase the risk of +incorrect results. + +<p>The default is 5. + +<dt><b>-dstep=</b><i>n</i> + +<dd> +Set the vertical distance used when checking pixels in a column. The +default is intended to minimize the effect of noise along a horizontal +boundary. + +<p>The default is 2. + +<dt><b>-astep=</b><i>n</i> + +<dd> +Set the angle increment of the first iteration, in degrees. + +<p>The default is 1.0. + +</dl> + + +<h2 id="references">REFERENCES</h2> + +<p><B>pamtilt</B> implements a somewhat simplified algorithm inspired +by: "Measuring Document Image Skew and Orientation", by Bloomberg, +Kopec, and Dasari. In SPIE Volume 2422, Document Recognition II, +pages 302-316, February 1995. + +<h2 id="seealso">SEE ALSO</h2> + +<ul> +<li><a href="pnmrotate.html"><b>pnmrotate</b></a> +<li><a href="pgm.html">pgm</a> +</ul> + +<h2 id="history">HISTORY</h2> + +<p><b>pamtilt</b> was new in Netpbm 10.30 (October 2005). + +<p>Gregg Townsend wrote it and sent it to Bryan Henderson in August +2005. Bryan recoded it to fit Netpbm conventions. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamtodjvurle.html b/pamtodjvurle.html new file mode 100644 index 00000000..3a78502e --- /dev/null +++ b/pamtodjvurle.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtodjvurle User Manual</TITLE></HEAD> +<BODY> +<H1>pamtodjvurle</H1> +Updated: 10 April 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtodjvurle - convert a Netpbm image to DjVu Color RLE format + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtodjvurle</B> + +[<b>-transparent</b> <i>color</i>] +[<I>netpbmfile</I> [<I>rlefile</I>]] + +<p>Mininum unique abbreviation of options in acceptable. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtodjvurle</b> reads a Netpbm image (PNM or PAM equivalent of +PNM) as input and produces DjVu Color RLE format as output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-transparent</b> <i>colorname</i> + +<DD>This option indicates which color in the image should be +considered transparent. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>Default is "white". +</DL> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtodjvurle.html">pbmtodjvurle</A> +<A HREF="pam.html">pam</A> + +<a name="history"></a> +<H2>HISTORY</H2> + +<p><b>pamtodjvurle</b> was new in Netpbm 10.22 (April 2004) but a +program that did almost the same thing, called <b>ppmtodjvurle</b>, +was in Netpbm 10.21 (March 2004). The latter was written and +contributed to Netpbm by Scott Pakin <scott+pbm@pakin.org>. +<b>pamtodjvurle</b> uses techniques taken from <b>ppmtodjvurle</b>, +but no code is copied between them. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamtofits.html b/pamtofits.html new file mode 100644 index 00000000..cebb38e0 --- /dev/null +++ b/pamtofits.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtofits User Manual</TITLE></HEAD> +<BODY> +<H1>pamtofits</H1> +Updated: 25 September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtofits - convert a Netpbm image into FITS format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtofits</B> +[<B>-max</B> <I>f</I>] +[<B>-min</B> <I>f</I>] +[<I>pamfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtofits</b> reads a PNM or PAM image as input and produces a FITS +(Flexible Image Transport System) file as output. The resolution of +the output file is either 8 bits/pixel, or 16 bits/pixel, depending on +the value of maxval in the input file. If the input file is a PBM or +PGM image, the output file consists of a single plane image (NAXIS = +2). If instead the input file is a PPM image, the output file will +consist of a three-plane image (NAXIS = 3, NAXIS3 = 3). + +<p>You can find a full description of the FITS format in Astronomy +& Astrophysics Supplement Series 44 (1981), page 363. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p><b>-min</b> and <b>-max</b> tell <b>pamtofits</b> what "physical +values" zero and maxval sample values, respectively, in the input +image represent. Physical values are a FITS concept. <b>pamtofits</b> +sets up the <b>BSCALE</b> and <b>BZERO</b> FITS header cards to indicate +this information. + +<p>The default for <b>-min</b> is 0 and for <b>-max</b> is the maxval, +which means if you don't specify these options, the FITS physical values +are in fact the original Netpbm sample values. + +<p><b>pamtofits</b> always sets up the FITS header <b>DATAMIN</b> and +<b>DATAMAX</b> cards to indicate that the highest physical value in +the image is the one corresponding to the Netpbm maxval and the lowest is +that corresponding to Netpbm zero. This isn't really how those cards are +supposed to be used, since the input image doesn't necessarily contain +the full possible range of sample values. It is a conservative +approximation. + +<h2 id="history">HISTORY</h2> + +<p><b>pamtofits</b> was originally <b>pnmtofits</b> and did not handle +PAM input. It was extended and renamed in Netpbm 10.30 (October 2005). + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="fitstopnm.html">fitstopnm</A>, +<A HREF="pam.html">pam</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Wilson H. Bent (<A +HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>), with +modifications by Alberto Accomazzi (<A +HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamtogif.html b/pamtogif.html new file mode 100644 index 00000000..8b1e39ed --- /dev/null +++ b/pamtogif.html @@ -0,0 +1,327 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtogif User Manual</TITLE></HEAD> +<BODY> +<H1>pamtogif</H1> +Updated: 25 November 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamtogif - convert a Netpbm image to a GIF image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamtogif</B> + +[<B>-interlace</B>] + +[<B>-sort</B>] + +[<B>-mapfile=</B><I>mapfile</I>] + +<BR> + +[<B>-transparent=</B>[<B>=</B>]<I>color</I>] + +[<b>-alphacolor=</b><i>color</i>] + +[<B>-comment=</B><I>text</I>] + +[<B>-nolzw</B>] + +[<B>-verbose</B>] + +<BR> + +[<I>netpbmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and its +value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtogif</b> reads a Netpbm image as input and produces a GIF file +as output. + +<P>This program creates only individual GIF images. To combine +multiple GIF images into an animated GIF, use <a +href="http://www.lcdf.org/gifsicle/"><B>gifsicle</B></a> (not part of +the Netpbm package). + +<P><B>pamtogif</B> creates either an original GIF87 format GIF file or +the newer GIF89 format. It creates GIF89 when you request features +that were new with GIF89, to wit the <B>-transparent</B> or +<B>-comment</B> options. Otherwise, it creates GIF87. Really old GIF +readers conceivably could not recognize GIF89. + +<p>The GIF format is not capable of representing an image with more than +256 colors in it (it contains a color map with a maximum size of 256). +If the image you want to convert has more colors than that (<b>ppmhist</b> +can tell you), you can use <b>pnmquant</b> to reduce it to 256. + +<p>If your input image is a PAM with transparency information, <b>ppmtogif</b> +uses one entry in the GIF colormap specifically for the transparent pixels, +so you can have at most 255 opaque colors. In contrast, if you use the +<b>-transparent</b> option, one of the colors from the input becomes +transparent, so the limit is still 256. + +<p><b>pamtogif</b> was new in Netpbm 10.37 (December 2006). In older Netpbm, +use <b>ppmtogif</b>. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-interlace</B> + +<DD> +Produce an interlaced GIF file. + +<DT><B>-sort</B> + +<DD> +Produce a GIF file with a color map sorted in a predictable order. + +<p>This does <em>not</em> produce the sorted color map which is part +of the GIF format. That kind of sorted color map is one where the +colors are sorted according to how important they are, and the GIF +header tells the viewer that it is sorted that way. Its purpose is to +allow the viewer to use fewer colors than are in the color map if it +is not capable of displaying all the colors. + +<p>What this option produces is a color map sorted by red value, then +green, then blue. That can be useful in analyzing GIF images, particularly +those made with two versions of the program, because it removes some of +the variability. + + +<DT><B>-mapfile=</B><I>mapfile</I> + +<DD> + +<P>Use the colors found in the file <I>mapfile</I> to create the +colormap in the GIF file, instead of the colors from <I>ppmfile</I>. +<I>mapfile</I> can be any PPM file; all that matters is the colors in +it. If the colors in <I>ppmfile</I> do not match those in +<I>mapfile</I>, <b>pamtogif</b> matches them to a "best +match." You can obtain a much better result by using <b>pnmremap</b> +to change the colors in the input to those in the map file. + +<p>The <i>mapfile</i> file is not a palette file, just an image whose +colors you want to use. The order of colors in the GIF palette have +nothing to do with where they appear in the <i>mapfile</i> image, and +duplication of colors in the image is irrelevant. + +<DT><B>-transparent=</B><I>color</I> + +<DD> +<B>pamtogif</B> marks the specified color as transparent in the GIF image. + +<P>If you don't specify <B>-transparent</B>, <B>pamtogif</B> does not +mark any color transparent (except as indicated by the transparency +information in the input file). + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>If the color you specify is not present in the image, <B>pamtogif</B> +selects instead the color in the image that is closest to the one you +specify. Closeness is measured as a cartesian distance between colors +in RGB space. If multiple colors are equidistant, <B>pamtogif</B> +chooses one of them arbitrarily. + +<P>However, if you prefix your color specification with "=", +e.g. <B>-transparent==red</B>, only the exact color you specify will +be transparent. If that color does not appear in the image, there +will be no transparency. <B>pamtogif</B> issues an information +message when this is the case. + +<p>When you specify <b>-transparent</b>, <b>pamtogif</b> ignores +explicit transparency information (the "alpha channel") in +the input image. + +<DT><B>-alpha=</B><I>pgmfile</I> + +<DD>There is no <b>-alpha</b> option. <b>pamtogif</b>'s predecessor had +such an option because it was not capable of taking PAM input that contains +a transparency (alpha) plane, so one used this option to supply a +transparency plane as a separate PGM file. + + This option names a PGM file that contains an alpha mask for the +image. <B>pamtogif</B> creates fully transparent pixels wherever the +alpha mask indicates transparency greater than 50%. The color of +those pixels is that specified by the <B>-alphacolor</B> +option, or black by default. + +<P>To do this, <B>pamtogif</B> creates an entry in the GIF colormap in +addition to the entries for colors that are actually in the image. It +marks that colormap entry as transparent and uses that colormap index +in the output image to create a transparent pixel. + +<P> The alpha image must be the same dimensions as the input +image, but may have any maxval. White means opaque and black means +transparent. + +<P> You cannot specify both <B>-transparent</B> and <B>-alpha</B>. + +<DT><B>-alphacolor=</B><i>color</i> + +<DD>This specifies the foreground color for transparent pixels. A +viewer may use the foreground color for a transparent pixel if it +chooses not to have another color "show through.". The +default is black. + +<p>This applies only to pixels that are transparent in the GIF because +they are transparent in the Netpbm input. If a GIF pixel is +transparent because of the <b>-transparent</b> option, the foreground +color is the color indicated by that option. + +<p>Note that in GIF, all transparent pixels have the same foreground +color. (There is only one entry in the GIF colormap for transparent +pixels). + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<DT><B>-comment=</B><I>text</I> + +<DD> +Include a comment in the GIF output with comment text <I>text</I>. + +<p>Without this option, there are no comments in the output. + +<p>Note that in a command shell, you'll have to use quotation marks around +<i>text</i> if it contains characters (e.g. space) that would make the shell +think it is multiple arguments: +<pre> +$ pamtogif -comment "this is a comment" <xxx.ppm >xxx.gif +</pre> + +<DT><B>-nolzw</B> + +<DD> +<p>This option is mainly of historical interest -- it involves use of +a patent that is now expired. + +<p>This option causes the GIF output, and thus <B>pamtogif</B>, not to +use LZW (Lempel-Ziv) compression. As a result, the image file is +larger and, before the patent expired, no royalties would be owed to +the holder of the patent on LZW. See the section LICENSE below. + +<P>LZW is a method for combining the information from multiple pixels into a +single GIF code. With the <B>-nolzw</B> option, <B>pamtogif</B> +creates one GIF code per pixel, so it is not doing any compression and not +using LZW. However, any GIF decoder, whether it uses an LZW decompressor +or not, will correctly decode this uncompressed format. An LZW decompressor +would see this as a particular case of LZW compression. + +<P>Note that if someone uses an LZW decompressor such as the one in +<B>giftopnm</B> or pretty much any graphics display program to process +the output of <B>pamtogif -nolzw </B>, he is then using the LZW +patent. But the patent holder expressed far less interest in +enforcing the patent on decoding than on encoding. + +<DT><B>-verbose</B> + +<DD>This option causes <b>pamtogif</b> to display information about the +conversion process and the image it produces. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="giftopnm.html">giftopnm</A></B>, + +<B><A HREF="ppmquant.html">ppmquant</A></B>, + +<B><A HREF="pngtopnm.html">pngtopnm</A></B>, + +<B><A HREF="ppmtogif.html">ppmtogif</A></B>, + +<B>gifsicle</B> <<A +HREF="http://www.lcdf.org/gifsicle">http://www.lcdf.org/gifsicle</A>>, + +<B><A HREF="pnm.html">pnm</A></B>, + +<B><A HREF="pam.html">pam</A></B>. + +<h2 id="history">HISTORY</h2> + +<p><b>pamtogif</b> was new in Netpbm 10.37 (December 2006). It +replaced <b>ppmtogif</b>, which created GIF images for Pbmplus/Netpbm +users since 1989. + +<p>The main outward change in the conversion from <b>ppmtogif</b> to +<b>pamtogif</b> was that <b>pamtogif</b> was able to use transparency +information ("alpha channel") in PAM input, whereas with +<b>ppmtogif</b>, one had to supply the transparency mask in a separate +pseudo-PGM image (via the <b>-alpha</b> option). + +<p>Jef Poskanzer wrote <b>ppmtogif</b> in 1989, and it has always been +a cornerstone of Pbmplus/Netpbm because GIF is such a popular image +format. Jef based the LZW encoding on GIFENCOD by David Rowley <<A +HREF="mailto:mgardi@watdcsu.waterloo.edu">mgardi@watdcsu.waterloo.edu</A>>. +Jef included GIFENCOD's GIFCOMPR.C file pretty much whole. Rowley, in +turn, adapted the LZW compression code from classic Unix +<b>compress</b>, which used techniques described in IEEE Computer, +June 1984. + +<p>Jef's <b>ppmtogif</b> notably lacked the ability to use a +transparency mask with it. You could create transparent pixels in a +GIF, but only with the <b>-transparent</b> option, which allowed one +to specify that all pixels of a certain color in the input were to be +transparent. Bryan Henderson added the <b>-alpha</b> option in July +2001 so you could supply a mask image that indicates exactly which +pixels are to be transparent, and those pixels could have the same +color as other opaque ones. + +<p>Bryan Henderson added another significant piece of code and +function in October 2001: the ability to generate a GIF without using +the LZW patent -- an uncompressed GIF. This was very important to +many people at the time because the GIF patent was still in force, and +this allowed them to make an image that any GIF viewer could display, +royalty-free. Bryan adapted code from the Independent Jpeg Group's +<b>djpeg</b> for that. + +<p>There is no code in <b>pamtogif</b> from Jef's original, but Jef +may still hold copyright over it due to the way in which it evolved. +Virtually all of the code in <b>pamtogif</b> was written by Bryan +Henderson and contributed to the public domain. + + +<H2 id="license">LICENSE</H2> + +<p>If you use <B>pamtogif</B> without the <B>-nolzw</B> option, you +are using a patent on the LZW compression method which is owned by +Unisys. The patent has expired (in 2003 in the US and in 2004 +elsewhere), so it doesn't matter. While the patent was in force, most +people who used <b>pamtogif</b> and similar programs did so without a +license from Unisys to do so. Unisys typically asked $5000 for a +license for trivial use of the patent. Unisys never enforced the +patent against trivial users. + +<P>Rumor has it that IBM also owns or owned a patent covering +<B>pamtogif</B>. + +<P>A replacement for the GIF format that never required any patents to +use is the PNG format. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#license">LICENSE</A> +</UL> +</BODY> +</HTML> diff --git a/pamtohdiff.html b/pamtohdiff.html new file mode 100644 index 00000000..8bd12dc6 --- /dev/null +++ b/pamtohdiff.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtohdiff User Manual</TITLE></HEAD> +<BODY> +<H1>pamtohdiff</H1> +Updated: 15 April 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtohdiff - convert PAM image to horizontal difference image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtohdiff</B> +[<I>pamfile</I>] +[<B>-verbose</B>] + +<P> +Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphens to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pamtohdiff</B> takes a PAM (or PNM) image as input and produced a +horizontal difference image version of it as output. A horizontal +difference image is one where the samples in each row indicate the +difference between the sample value in the corresponding sample of the +input image and the sample directly above it (in the previous row) in +the input image. The horizontal difference image has the property +that if a row of the original image is identical to the row above it +over a long extent, the corresponding row in the horizontal difference +image will contain all zeroes. That makes it compress better than the +original image. + +<P>Because the horizontal difference samples can be positive or +negative, but PAM samples are unsigned integers, the samples in the +horizontal difference image PAM are defined to be the difference +modulus the range of the input (maxval + 1). This doesn't lose any +information, as it might seem, because: of the two differences that +could result in the same <b>pamtohdiff</b> output value (e.g. if +maxval is 99, +20 and -80 would both result in "20" in the output), +only one is possible in context and the other would result, when +reconstructing the original image, in a value less than 0 or greater +than maxval. + +<p>Before the modulus operation, the values <b>pamtohdiff</b> +computes are also biased by half the maxval. This is to make the +results easier to inspect visually. Because of the bias, you can +display the <b>pamtohdiff</b> output as if it were a PNM image. As +long as none of your differences are more than half the maxval, large +negative differences show up as dark spots, smaller negative +differences are lighter, zero differences are medium intensity, and +positive differences are light. If you want this to work even for +images that have differences that exceed half the maxval, just use +<b>ppmdim 50</b> on the original image. To avoid losing information, +though, do a <b>pamdepth</b> to double the maxval first. + +<p>Note that because of the transfer function just described, a +difference of zero, which is most common, is represented by a PAM sample +value in the output of one half the maxval. + +<P>The output PAM has a tuple type of "hdiff". + +<P>You can use <B>hdifftopam</B> to recover the original image from a +horizontal difference image PAM. + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="hdifftopam.html">hdifftopam</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Bryan Henderson + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamtohtmltbl.html b/pamtohtmltbl.html new file mode 100644 index 00000000..bbcb6d73 --- /dev/null +++ b/pamtohtmltbl.html @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pamtohtmltbl User Manual</TITLE></HEAD> +<BODY> +<H1>pamtohtmltbl</H1> +Updated: 29 March 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtohtmltbl - convert pnm/pam visual image to an HTML table + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtohtmltbl</B> +[<b>-transparent=</b><i>color</i>] +[<b>-verbose</b>] +[<I>file</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pamtohtmltbl</b> converts a visual image to an HTML table with one +cell per pixel. The cell is empty, but its background color is that of the +pixel. + +<P><i>file</i> is a PBM, PGM, PPM, or PAM file. If PAM, it must be +a standard visual image of tuple type RGB, GRAYSCALE, or BLACKANDWHITE, or +something equivalent with extra higher numbered channels, but +<b>pamtohtmltbl</b> doesn't check the tuple type; it just assumes. + +<P>Note that the more normal way to include a visual image in an HTML +document is with a <IMG> tag. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-transparent=</B><i>color</i> + +<DD> +This option indicates that pixels of the specified color are to be transparent +in the HTML table. The table cell for a pixel of this color will have no +background color specified. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + + +<DT><B>-verbose</b> + +<dd>This option causes <b>pamtohtmltbl</b> to display messages about the +conversion process. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B> +<B><A HREF="pam.html">pam</A></B> + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<P><b>pamtohtmltbl</b> was new in Netpbm 10.15 (April 2003). +</DL> + +<A NAME="lbAF"> </A> +<H2>AUTHORS</H2> + +<p>Alexander B. Ivanov (SSH) wrote a program he called +<b>pnm2html</b>. Bryan Henderson adapted it to use the Netpbm +libraries and handle PAM images and follow Netpbm conventions, and +named it <b>pamtohtmltbl</b>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pamtojpeg2k.html b/pamtojpeg2k.html new file mode 100644 index 00000000..c0396144 --- /dev/null +++ b/pamtojpeg2k.html @@ -0,0 +1,227 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtojpeg2k User Manual</TITLE></HEAD> +<BODY> +<H1>PAMTOJPEG2K</H1> +Updated: 27 October 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pamtojpeg2k - convert PAM/PNM image to a JPEG-2000 code stream + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtojpeg2k</B> +[<B>-imgareatlx=</B><I>column</I>] +[<B>-imgareatly=</B><I>row</I>] +[<B>-tilegrdtlx=</B><I>column</I>] +[<B>-tilegrdtly=</B><I>row</I>] +[<B>-tilewidth=</B><I>columns</I>] +[<B>-tileheight=</B><I>rows</I>] +[<B>-prcwidth=</B><I>columns</I>] +[<B>-prcheight=</B><I>rows</I>] +[<B>-cblkwidth=</B><I>columns</I>] +[<B>-cblkheight=</B><I>rows</I>] +[<B>-mode=</B>{<B>integer</B>|<B>int</B>|<B>real</B>}] +[<B>-compression=</B><I>ratio</I>] +[<B>-ilyrrates=</B><I>ratestring</I>] +[<B>-numrlvls=</B><I>number</I>] +[<B>-progression=</B>{<B>lrcp</B>|<B>rlcp</B>|<B>rpcl</B>|<B>pcrl</B>|<B>cprl</B>}] +[<B>-numgbits=</B><I>number</I>] +[<B>-nomct</B>] +[<B>-sop</B>] +[<B>-eph</B>] +[<B>-lazy</B>] +[<B>-termall</B>] +[<B>-segsym</B>] +[<B>-vcausal</B>] +[<B>-pterm</B>] +[<B>-resetprob</B>] +[<B>-verbose</B>] +[<B>-debuglevel=</B><I>number</I>] +<I>filename</I> + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pamtojpeg2k</b> converts the named PBM, PGM, PPM, or PAM file, +or Standard Input if no file is named, to a JPEG-2000 code stream +(JPC) file on Standard Output. + +<P>The JPEG-2000 specification specifies two different formats: JP2 +and JPEG-2000 code stream (JPC). JP2 represents a visual image quite +specifically, whereas JPC is a more or less arbitrary array of codes. +<B>pamtojpeg2k</B> can't produce a JP2, but the JPC image that +<b>pamtojpeg2k</b> produces is very similar to a JP2 if the input is a +PBM, PGM, or PPM image or equivalent PAM image. One difference is +that that RGB intensity values in a JP2 are SRGB values, while +<b>pamtojpeg2k</b> produces ITU-R Recommedation BT.709 values. Those +are very similar, but not identical. Another difference is that a JP2 +can contain extra information about an image that JPC cannot. + +<p>When the input is a PAM image other than a PBM, PGM, or PPM equivalent, +the JPC raster produced contains whatever the PAM raster does. It can have +any number of planes with any meanings; the planes are in the same order in +the JPC output as in the PAM input. + +<p>A JPC image has a "precision," which is the number of bits used for +each code (in Netpbm lingo, "sample"). Actually, it has a separate +precision for each component. <b>pamtojpeg2k</b> uses for the +precision of every component the least number of bits that can +represent the maxval of the input image. A JPC image does not have an +independent concept of maxval; the maxval of a JPC sample is the +maximum value that the number of bits specified by the precision can +represent in pure binary code. E.g. if the precision is 4, the maxval +is 15. <b>pamtojpeg2k</b> does of course scale the sample values from +the input maxval to the output maxval. Example: The input maxval is +99. This means JPC precision is 7 bits and the JPC maxval is 127. A +sample value of 33 in the input becomes a sample value of 43 in the +output. + +<P><b>pamtojpeg2k</b> generates the JPC output with the <a +href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper JPEG-2000 +library</a>. See documentation of the library for details on what +<b>pamtojpeg2k</b> produces. Note that the Jasper library contains +facilities for reading PNM images, but <b>pamtojpeg2k</b> does not use +those. It uses the Netpbm library instead. Note that the makers of +the Jasper library write it "JasPer," but Netpbm documentation follows +standard American English typography rules, which don't allow that +kind of capitalization. + +<P>Use <b>jpeg2ktopam</b> to convert in the other direction. + +<p>The program <b>jasper</b>, which is packaged with the Jasper +JPEG-2000 library, also converts between JPEG-2000 and PNM formats. +Because it's packaged with the library, it may exploit it better, +especially recently added features. However, since it does not use the +Netpbm library to read and write the Netpbm formats, it doesn't do as +good a job on that side. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +Most of the options are identical in name and function to options that the +Jasper library JPC encoder subroutine takes. See +<a href="http://www.ece.uvic.ca/~mdadams/jasper/">Jasper documentation</a> +for details. Here, we document only options that are not direct analogs +of Jasper options. + +<DL COMPACT> + +<DT><B>-compression=</b><i>ratio</i> + +<DD><i>ratio</i> is a floating point number that specifies the compression +ratio. <b>pamtojpeg2k</b> will adjust quality as necessary to ensure that +you get this compression ratio. E.g. 4 means the output will be about +one fourth the size in bytes of the input file. + +<p>The compression ratio must be at least 1. The default is 1, which means +the output has all the quality of the input -- the conversion is lossless. + +<p>Note that though Jasper library takes a compression factor, this +option specifies a compression ratio. The compression factor is the +multiplicative inverse of (1 divided by) the compression ratio. + +<DT><B>-verbose</b> + +<DD>This option causes <b>pamtojpeg2k</b> to issue informational messages about +the conversion process. + +<DT><B>-debuglevel</b>=<i>number</i> + +<DD>This option controls debug messages from the Jasper library. +<b>pamtojpeg2k</b> passes <i>number</i> as the debug level to the Jasper +JPC encoder. + +</DL> + +<A NAME="examples"> </A> +<H2>EXAMPLES</H2> + +<P>This example compresses losslessly. + +<pre> + pamtojpeg2k myimg.ppm >myimg.jpc +</pre> + +<b>jpeg2ktopam</b> will recreate myimg.ppm exactly. + +<p>This example compresses the file to one tenth its original size, throwing +away information as necessary. + +<pre> + pamtojpeg2k -compression=10 myimg.pgm >myimg.jpc +</pre> + + +<A NAME="jpeg2000"></a> +<H2>ABOUT JPEG-2000</H2> + +<p>JPEG-2000 is a format that compresses a visual image (or a similar set of +data) into a minimal number of bytes for storage or transmission. In that, +its goal is similar to JPEG. It has two main differences from JPEG. + +<p>One difference is that it does a much better job on most images of +throwing out information in order to achieve a smaller output. That +means when you reconstruct the image from the resulting compressed +file, it looks a lot closer to the image you started with with +JPEG-2000 than with JPEG, for the same compressed file size. Or, looked +at another way, with JPEG-2000 you get a much smaller file than with +JPEG for the same image quality. + +<p>The second difference is that with JPEG-2000, you decide how much +compression you want and the compressor adjusts the quality to meet your +requirement, whereas with JPEG, you decide how much quality you want +and the compressor adjusts the size of the output to meet your requirement. +I.e. with JPEG-2000, the quality of the result depends on the compressibility +of the input, but with JPEG, the <em>size</em> of the result depends on +the compressibility of the input. + +<p>With JPEG-2000, you can specify lossless compression, thus making it +compete with GIF and PNG. With standard JPEG, you always lose something. +(There are rumored to be variations of JPEG around that are lossless, +though). + +<p>JPEG is much older than JPEG-2000 and far more popular. JPEG is one of +the half dozen most popular graphics formats and virtually all graphics +facilities understand it. JPEG-2000 is virtually unknown. + +<p>There is no compatibility between JPEG and JPEG-2000. Programs that +read JPEG do not automatically read JPEG-2000 and vice versa. + + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="jpeg2ktopam.html">jpeg2ktopam</A></B>, +<B><A HREF="pnmtojpeg.html">pnmtopeg</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<H2>History</H2> + +<p><b>pamtojpeg2k</b> was added to Netpbm in Release 10.12 (November 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#jpeg2000">ABOUT JPEG-2000</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pamtopfm.html b/pamtopfm.html new file mode 100644 index 00000000..5068c574 --- /dev/null +++ b/pamtopfm.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtopfm User Manual</TITLE></HEAD> +<BODY> +<H1>pamtopfm</H1> +Updated: 10 April 2004 + +<A HREF="#index">Table Of Contents</A> + +<A NAME="name"> </A> +<H2>NAME</H2> +pamtopfm - Convert Netpbm image to PFM (Portable Float Map) + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> +<B>pamtopfm</B> +[<b>-endian=</b>{<b>big</b>|<b>little</b>}] +[<b>-scale=</b><i>float</i>] +[<I>imagefile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtopfm</b> reads a Netpbm image (PNM or PAM) and converts it +to a PFM (Portable Float Map) image. + +<p>The PFM (Portable Float Map) image format is a lot like PPM, but uses +floating point numbers with no maxval to achieve a High Dynamic Range +(HDR) format. That means it doesn't have a concept of absolute color +and it can represent generic light intensity information rather than +just visual information like PPM does. For example, two pixels that +are so close in intensity that the human eye cannot tell them apart +are not visually distinct, so a visual image format such as PPM would +have no reason to use different sample values for them. But an HDR format +would. + +<p>There are details of the PFM format in the <a href="pfm.html">PFM +Format Description</a>. + +<p><a href="http://www.debevec.org/HDRShop">USC's HDRShop +program</a> and a program called Lefty use it. + +<b>pamtopfm</b> creates a color PFM image if its input is RGB (PPM) +and a non-color PFM otherwise. + +<p>Use <a href="pfmtopam.html"><b>pfmtopam</b></a> to convert a PFM +image to Netpbm format. + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-scale=</b><i>float</i> + +<DD> + <P>This specifies the scale factor of the PFM image. + Scale factor is a component of the PFM format. + Default is 1.0. + +<DT><B>-endian=</b>{<b>big</b>|<b>little</b>} + +<DD> + <P>This specifies the endianness of the PFM image. The samples + in the raster of a PFM image are 4 byte IEEE floating point + numbers. A parameter of the IEEE format, and therefore the PFM + format, is endianness, i.e. whether the specified bytes are + ordered from low addresses to high addresses or vice versa. + + <p><b>big</b> means big endian -- the natural ordering; + <b>little</b> means little-endian, the Intel-friendly ordering. + + <p>Default is whichever endianness the machine on which <b>pamtopfm</b> + runs uses internally, which results in the faster execution. + +</DL> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="index.html">Netpbm</A></B>, +<B><A HREF="pfmtopam.html">pfmtopam</A></B>, +<B><A HREF="pam.html">pam</A></B> + +<A NAME="history"></a> +<h2>HISTORY</h2> + +<p><b>pamtopfm</b> was added to Netpbm in Release 10.22 (April 2004). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamtopnm.html b/pamtopnm.html new file mode 100644 index 00000000..67657ae7 --- /dev/null +++ b/pamtopnm.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>pamtopnm</H1> +Updated: 03 August 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pamtopnm - convert PAM image to PBM, PGM, or PPM + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamtopnm</B> + +[<B>-assume</B>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtopnm</b> reads a PAM image as input and produces an +equivalent PBM, PGM, or PPM (i.e. PNM) image, whichever is most +appropriate, as output. + +<P><B>pamtopnm</B> assumes the PAM image represents the information +required for a PBM, PGM, or PPM image if its tuple type is +"BLACKANDWHITE", "GRAYSCALE", or "RGB" +and its depth and maxval are appropriate. If this is not the case, +<B>pamtopnm</B> fails. + +<P>However, you can override the tuple type requirement with the +<B>-assume</B> option. + +<P>As with any Netpbm program that reads PAM images, <B>pamtopnm</B> +also reads PNM images as if they were PAM. In that case, +<B>pamtopnm</B>'s functions reduces to simply copying the input to the +output. But this can be useful in a program that doesn't know whether +its input is PAM or PNM but needs to feed it to a program that only +recognizes PNM. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-assume</B> + +<DD>When you specify <B>-assume</B>, you tell <B>pamtopnm</B> that you +personally vouch for the fact that the tuples contain the same data as +belongs in the channels of a PBM, PGM, or PPM file. The depth must +still conform, though, so to truly force a conversion, you may have to +run the input through <B>pamchannel</B> first. But be careful with +<B>-assume</B>. When you -assume, you make an -ass of u and me. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>, +<B><A HREF="pamditherbw.html">pamditherbw</A></B>, +<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + +<h2 id="history">HISTORY</h2> + +<p><b>pamtopnm</b> was new, along with the PAM format, in Netpbm +9.7 (August 2000). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamtosvg.html b/pamtosvg.html new file mode 100644 index 00000000..752473b8 --- /dev/null +++ b/pamtosvg.html @@ -0,0 +1,214 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtosvg User Manual</TITLE></HEAD> +<BODY> +<H1>pamtosvg</H1> +Updated: 23 April 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pamtosvg - convert a Netpbm image to a SVG (Scalable Vector Graphics) image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamtosvg</B> + +[<b>-background-color=</b><i>colorname</i>] +[<b>-centerline</b>] +[<b>-corner-threshold=</b><i>angle</i>] +[<b>-corner-always-threshold=</b><i>angle</i>] +[<b>-corner-surround=</b><i>integer</i>] +[<b>-tangent-surround=</b><i>integer</i>] +[<b>-error-threshold=</b><i>float</i>] +[<b>-filter-iterations=</b><i>count</i>] +[<b>-line-reversion-threshold=</b><i>float</i>] +[<b>-line-threshold=</b><i>float</i>] +[<b>-width-factor=</b><i>float</i>] +[<b>-preserve-width</b>] +[<b>-remove-adjacent-corners</b>] +[<b>-log</b>] +[<b>-report-progress</b>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtosvg</b> reads a PNM image as input and produce an SVG +(Scalable Vector Graphics) image as output. Thus, it traces curves +in the input image and creates a set of splines that represent the +image. + +<p>SVG is a vector image format, which means it describes curves that +compose an image. By contrast, PNM is a raster format, which means it +describes dots that compose an image. The main practical difference +between the two types is that you can scale vector images better. A +vector image also takes a lot less data to describe an image if the +image is composed of simple curves. + +<p>That means it is really an understatement to say that <b>pamtosvg</b> +is an image format converter. It's really an image tracer. Its main job +is to trace a raster image and find the lines in it. It then represents +its findings in SVG format. + +<p><b>pamtosvg</b> does the same kind of thing that StreamLine, +CorelTrace, and Autotrace do. It is in fact derived from Autotrace. + +<p>SVG is a gigantic format, capable of amazing things. <b>pamtosvg</b> +exploits only a morsel of it. The SVG image produced by <b>pamtosvg</b> +consists of a single <svg> element, which has a "width" +attribute and a "height" attribute. The value of that element +is composed of <path> elements. That's it. + +<p>In the SVG output, distances are unitless, with one unit corresponding +to one pixel of the input. + +<p>So that <b>pamtosvg</b> will find simple curves in the image, you +may want to remove speckles from it with <b>pbmclean</b> and consolidate +multiple shades into single colors with <b>pnmquant</b> first. + +<p>For more information on SVG, see <a +href="http://www.w3.org/Graphics/SVG/">the Worldwide Web Consortium's +SVG web page</a>. + + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<dt><b>-background-color=</b><i>colorname</i> + +<dd>Treat the specified color as the background color and ignore it. + +<p>If you don't specify this option, <b>pamtosvg</b> does not recognize +any background color. + +<P>Specify the color (<i>colorname</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<dt><b>-centerline</b> + +<dd>Trace an object's centerline. + +<p>By default, <b>pamtosvg</b> traces an object's outline. + +<dt><b>-corner-always-threshold=</b><i>angle</i> + +<dd>Consider any angle at a pixel which falls below angle <i>angle</i> +(in decimal floating point degrees) as a corner, even if it is +bordered by other corner pixels. Default is 60 degrees. + +<dt><b>-corner-surround=</b><i>integer</i> + +<dd>Consider the specified number of pixels on either side of a +point when determining if that point is a corner. Default is 4. + +<dt><b>-corner-threshold=</b><i>angle</i> + +<dd>Consider any pixel which forms an angle with its predecessors and +successors that is smaller than <i>angle</i> (in decimal floating +point degrees) as a corner. Default is 100. + +<dt><b>-error-threshold=</b><i>float</i> + +<dd>Subdivide fitted curves that are offset by a number of pixels +exceeding the specified number. Default is 2.0. + +<dt><b>-filter-iterations=</b><i>integer</i> + +<dd>Smooth the curve the specified number of times prior to fitting +Default is 4. + +<dt><b>-line-reversion-threshold=</b><i>float</i> + +<dd>When a spline is closer to a straight line than the specified real +number weighted by the square of the curve length, maintain it as a +straight line, even if it is a list with curves. + +<p>Default is .01. + +<dt><b>-line-threshold=</b><i>float</i> + +<dd>If a spline does not deviate from the straight line defined by its +endpoints by more than the specified number of pixels, then treat it +as a straight line. + +<p>Default is 1. + +<dt><b>-log</b> + +<dd>Send a detailed progress report to the file named +<i>inputfile</i><b>.log</b>, where <i>inputfile</i> is the root of the +input file name, or "pamtosvg" if the input is from +Standard Input or a file with a weird name. + +<dt><b>-preserve-width</b> + +<dd>Preserve line width prior to thinning. Meaningful only with +<b>-centerline</b>. + +<dt><b>remove-adjacent-corners</b> + +<dd>Remove adjacent corners. + +<dt><b>-report-progress</b> + +<dd>Report the progress of the tracing to Standard Error as it happens. + +<dt><b>-tangent-surround</b> + +<dd>Consider the specified number of points to either side of a point +when computing the tangent at that point. Default is 3. + +<dt><b>-width-factor</b> + +<dd>Weight factor for fitting the linewidth. + +</DL> + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="pbmclean.html">pbmclean</A></B>, +<A HREF="pnm.html">pnm</A>, +<a href="http://autotrace.sourceforge.net">Autotrace</a> + +<h2 id="history">HISTORY</h2> + +<p><b>pamtosvg</b> was added to Netpbm in Version 10.33 (March 2006). + +<p>The core of <b>pamtosvg</b> -- the curve tracing logic -- was taken +nearly unmodified from Martin Weber's Autotrace program. That program +duplicates a lot of Netpbm function, so <b>pamtosvg</b> is a much leaner +program. + +<p>Bryan Henderson created <b>pamtosvg</b>, basically just by adapting +Autotrace to Netpbm. + +<p>Autotrace was first released in 2000 and updates were released +through 2002. A number of people wrote the code in it, but Masatake +Yamato and Martin Weber appear to be the principal creators of it. + +<p>As of June 2006, there was a <a +href="http://autotrace.sourceforge.net">Sourceforge project</a> for it. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamtotga.html b/pamtotga.html new file mode 100644 index 00000000..3f9ddce0 --- /dev/null +++ b/pamtotga.html @@ -0,0 +1,126 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtotga User Manual</TITLE></HEAD> +<BODY> +<H1>pamtotga</H1> +Updated: 21 July 2002 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtotga - convert a Netpbm image to a TrueVision Targa file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtotga</B> +[<B>-mono|-cmap|-rgb</B>] +[<B>-norle</B>] +[<I>pamfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtotga</b> reads a PBM, PGM, PPM, or PAM image as input and +produces a TrueVision Targa file as output. The PAM image may be +either a BLACKANDWHITE, GRAYSCALE, RGB, or RGB_ALPHA image. + +<p>To create a TGA image with transparency (i.e. with an alpha mask), +use RGB_ALPHA PAM input. Some Netpbm programs that generate images with +alpha masks generate them in that format. For another way to create +the proper input stream, see <a href="pamstack.html"><b>pamstack</b></a>. + +<p>It is unclear that anything except <b>pamtotga</b> knows about TGAs +with transparency. The history behind this feature of <b>pamtotga</b> +is not clear. The format <b>pamtotga</b> produces is simply the same +as an ordinary RGB TGA image except with a 4th plane added for +transparency. The PixelSize field of the TGA header specifies 32 bits +instead of 24 and the raster has an extra byte added to each pixel, at +the tail end. The value of that byte has the same meaning as in a PAM +image with maxval 255. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-cmap</B> +<DD> +Make output Targa file of type 24 bit colormapped. Input must contain no +more than 256 distinct colors. + +<DT><B>-mono</B> +<DD> +Make output Targa file of type 8 bit monochrome. Input must be PBM or PGM +or a PAM with BLACKANDWHITE or GRAYSCALE tuple type. +See <b>-cmap</b>. + +<p>You may specify at most one of <b>-mono</b>, <b>-cmap</b>, and +<b>-rgb</b>. If you specify neither, the default image type is the +most highly constrained compatible type is used, where monochrome is +more constrained than colormapped which is in turn more constrained +than unmapped. + +<DT><B>-rgb</B> +<DD> +Make output Targa file of type 24 bit unmapped color. See <b>-cmap</b>. + +<DT><B>-norle</B> +<DD>Do not use run-length encoding in the output Targa file. +Run-length encoded files are smaller, but Some Targa readers can't +read run-length encoded files. + +</DL> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="tgatoppm.html">tgatoppm</A>, +<A HREF="pnmquant.html">pnmquant</a>, +<A HREF="pamstack.html">pamstack</a>, +<A HREF="pam.html">pam</A> +<A HREF="pnm.html">pnm</A> + +<A NAME="history"></A> +<H2>HISTORY</H2> + +<p>This program was called <b>ppmtotga</b> until Netpbm 10.6 (July 2002). +That was always a misnomer, though, because a PPM class program would not be +able to tell the difference between PGM and PPM input (it would all look like +PPM), and thus could not choose the output Targa image type based on the type +of the input. Netpbm 10.6 also added the ability to handle an alpha channel, +so it became a PAM class program. + +<p>In Netpbm 10.15 (April 2003), the program became the first in the +Netpbm package to recognize an alpha channel in a PAM. It recognized +tuple type "RGBA". But when this kind of PAM image was later +added to the PAM specification, it was specified with tuple type +"RGB_ALPHA". So in Netpbm 10-26 (January 2005), <b>pamtotga</b> +changed to recognize "RGB_ALPHA" instead of "RGBA". + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Mark Shand and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamtotiff.html b/pamtotiff.html new file mode 100644 index 00000000..0df659f7 --- /dev/null +++ b/pamtotiff.html @@ -0,0 +1,510 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtotiff User Manual</TITLE></HEAD> +<BODY> +<H1>pamtotiff</H1> +Updated: 27 March 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtotiff - convert a Netpbm image to a TIFF file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtotiff</B> + +[<B>-none</B> | <B>-packbits</B> | <B>-lzw</B> | <B>-g3</B> | <B>-g4</B> +| <B>-flate</B> | <B>-adobeflate</B>] + +[<B>-2d</B>] + +[<B>-fill</B>] + +[<B>-predictor=</B><I>n</I>] + +[<B>-msb2lsb</B>|<B>-lsb2msb</B>] + +[<B>-rowsperstrip=</B><I>n</I>] + +[<B>-minisblack</B>|<B>-miniswhite</B>|<B>mb</B>|<b>mw</b>] + +[<B>-truecolor</B>] + +[<B>-color</B>] + +[<B>-indexbits=</B><I>bitwidthlist</I>] + +<br> +[<B>-xresolution=</b><i>xres</i>] + +[<B>-yresolution=</b><i>yres</i>] + +<br> +[<B>-resolutionunit=</b>{<b>inch</b> | <b>centimeter</b> | <b>none</b> | +<b>in</b> | <b>cm</b> | <b>no</b>}] + +[<B>-indexbits=</b>[<b>1</b>[<b>2</b>[<b>4</b>[<b>8</b>]]]]] + +[<b>-append</b>] + +[<b>-tag=</b><i>taglist</i>] + +[<I>pamfile</I>] + +<P>You can use the minimum unique abbreviation of the options. You +can use two hyphens instead of one. You can separate an option name +from its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtotiff</b> reads a PNM or PAM image as input and produces a TIFF file +as output. + +<p>Actually, it handles multi-image Netpbm streams, producing multi-image +TIFF streams (i.e. a TIFF stream with multiple +"directories"). But before Netpbm 10.27 (March 2005), it +ignored all but the first Netpbm image in the input stream. + +<h3>The Output File</h3> + +<P>The output goes to Standard Output. <b>pamtotiff</b> approaches +this output file differently from Unix and Netpbm convention. This is +entirely due to <b>pamtotiff</b>'s use of the TIFF library to do all +TIFF output. + +<ul> +<li>The output file must be seekable. <b>pamtotiff</b> does not +write it sequentially. Therefore, you can't use a pipe; you can't +pipe the output of <b>pamtotiff</b> to some other program. But any +regular file should work. + +<li>If the output file descriptor is readable, you must either specify +<b>-append</b> so as to add to the existing file, or make sure the +file is empty. Otherwise, <b>pamtotiff</b> will fail with an +unhelpful message telling you that a TIFF library function failed to +open the TIFF output stream. + +<li>If you are converting multiple images (your input stream contains +multiple images), the output file must be both readable and writable. + +</ul> + +<p>If you're using a Unix command shell to run <b>pamtotiff</b>, you +use facilities of your shell to set up Standard Output. In Bash, +for example, you would set up a write-only Standard Output to the +file /tmp/myimage.tiff like this: + +<pre> +<tt> + $ pamtotiff myimage.pnm >/tmp/myimage.tiff +</tt> +</pre> + +In Bash, you would set up a read/write Standard Output to the file +/tmp/myimage.tiff like this: + +<pre> +<tt> + $ pamtotiff myimage.pnm 1<>/tmp/myimage.tiff +</tt> +</pre> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<h3>Compression</h3> + +<P>By default, <B>pamtotiff</B> creates a TIFF file with no +compression. This is your best bet most of the time. If you want to +try another compression scheme or tweak some of the other even more +obscure output options, there are a number of options which which to +play. + +<p>Before Netpbm 8.4 (April 2000), the default was to use LZW compression. +But then new releases of the TIFF library started omitting the LZW +compression capability due to concern about patents on LZW. So +since then, the default has been no compression. The LZW patents have +now expired and new TIFF libraries do LZW, but the <b>pamtotiff</b> +behavior remains the same for compatibility with older TIFF libraries +and applications of <b>pamtotiff</b>. + +<P>The <B>-none</B>, <B>-packbits</B>, <B>-lzw</B>, <B>-g3</B>, +<B>-g4</B>, <B>-flate</B>, and <B>-adobeflate</B> options are used to +override the default and set the compression scheme used in creating +the output file. The CCITT Group 3 and Group 4 compression algorithms +can be used only with bilevel data. The <B>-2d</B> and <B>-fill</B> +options are meaningful only with Group 3 compression: <B>-2d</B> +requests 2-dimensional encoding, while <B>-fill</B> requests that each +encoded scanline be zero-filled to a byte boundary. The +<B>-predictor</B> option is meaningful only with LZW compression: a +predictor value of 2 causes each scanline of the output image to +undergo horizontal differencing before it is encoded; a value of 1 +forces each scanline to be encoded without differencing. By default, +<B>pamtotiff</B> creates a TIFF file with msb-to-lsb fill order. The +<B>-msb2lsb</B> and <B>-lsb2msb</B> options are used to override the +default and set the fill order used in creating the file. + +<P>With some older TIFF libraries, <B>-lzw</B> doesn't work because +the TIFF library doesn't do LZW compression. This is because of +concerns about Unisys's patent on LZW which was then in force. +Actually, with very old TIFF libraries, <b>-lzw</b> works because no +distributors of the TIFF library were sensitive yet to the patent +issue. + +<p><b>-flate</b> chooses "flate" compression, which is the +patent-free compression common in the Unix world implemented by the +"Z" library. It is what the PNG format uses. + + +<h3>Fill Order</h3> +<p>The <b>-msb2lsb</b> and <b>lsb2msb</b> options control the fill order. + +<P>The fill order is the order in which pixels are packed into a byte in +the Tiff raster, in the case that there are multiple pixels per byte. +msb-to-lsb means that the leftmost columns go into the most +significant bits of the byte in the Tiff image. However, there is +considerable confusion about the meaning of fill order. Some believe +it means whether 16 bit sample values in the Tiff image are +little-endian or big-endian. This is totally erroneous (The +endianness of integers in a Tiff image is designated by the image's +magic number). However, ImageMagick and older Netpbm both have been known +to implement that interpretation. 2001.09.06. + +<P>If the image does not have sub-byte pixels, these options have no +effect other than to set the value of the FILLORDER tag in the Tiff +image (which may be useful for those programs that misinterpret the +tag with reference to 16 bit samples). + +<h3>Color Space</h3> + +<P><B>-color</B> tells <B>pamtotiff</B> to produce a color, as +opposed to grayscale, TIFF image if the input is PPM, even if it +contains only shades of gray. Without this option, <B>pamtotiff</B> +produces a grayscale TIFF image if the input is PPM and contains only +shades of gray, and at most 256 shades. Otherwise, it produces a +color TIFF output. For PBM and PGM input, <B>pamtotiff</B> always +produces grayscale TIFF output and this option has no effect. + +<P>The <B>-color</B> option can prevent <B>pamtotiff</B> from making +two passes through the input file, thus improving speed and memory +usage. See <a href="#multipass">Multiple Passes</a>. + +<P><B>-truecolor</B> tells <B>pamtotiff</B> to produce the 24-bit RGB +form of TIFF output if it is producing a color TIFF image. Without +this option, <B>pamtotiff</B> produces a colormapped (paletted) TIFF +image unless there are more than 256 colors (and in the latter case, +issues a warning). + +<P>The <B>-truecolor</B> option can prevent <B>pamtotiff</B> from +making two passes through the input file, thus improving speed and +memory usage. See <a href="#multipass">Multiple Passes</a>. + +<P>The <B>-color</b> and <b>-truecolor</b> options did not exist +before Netpbm 9.21 (December 2001). + +<P>If <B>pamtotiff</B> produces a grayscale TIFF image, this option +has no effect. + +<P>The <B>-minisblack</B> and <B>-miniswhite</B> options force the +output image to have a "minimum is black" or "minimum +is white" photometric, respectively. If you don't specify +either, <B>pamtotiff</b> uses minimum is black except when using Group +3 or Group 4 compression, in which case <B>pamtotiff</B> follows CCITT +fax standards and uses "minimum is white." This usually +results in better compression and is generally preferred for bilevel +coding. + +<P>Before February 2001, <B>pamtotiff</B> always produced +"minimum is black," due to a bug. In either case, +<B>pamtotiff</B> sets the photometric interpretation tag in the TIFF +output according to which photometric is actually used. + +<P>The <B>-indexbits</B> option is meaningful only for a colormapped +(paletted) image. In this kind of image, the raster contains values +which are indexes into a table of colors, with the indexes normally +taking less space that the color description in the table. +<B>pamtotiff</B> can generate indexes of 1, 2, 4, or 8 bits. By +default, it will use 8, because many programs that interpret TIFF +images can't handle any other width. + +<P>But if you have a small number of colors, you can make your image +considerably smaller by allowing fewer than 8 bits per index, using the +<B>-indexbits</B> option. The value is a comma-separated list of the +bit widths you allow. <B>pamtotiff</B> chooses the smallest width you allow +that allows it to index the entire color table. If you don't allow any +such width, <B>pamtotiff</B> fails. Normally, the only useful value for +this option is <B>1,2,4,8</B>, because a program either understands the 8 +bit width (default) or understands them all. + +<P>In a Baseline TIFF image, according to the 1992 TIFF 6.0 +specification, 4 and 8 are the only valid widths. There are no formal +standards that allow any other values. + +<P>This option was added in June 2002. Before that, only 8 bit indices were +possible. + +<h3>Extra Tags</h3> + +<p>There are lots of tag types in the TIFF format that don't correspond to +any information in the PNM format or to anything in the conversion process. +For example, a TIFF_ARTIST tag names the artist who created the image. + +<p>You can tell <b>pamtotiff</b> explicitly to include tags such as this +in its output with the <b>-tag</b> option. You identify a list of tag +types and values and <b>pamtotiff</b> includes a tag in the output for +each item in your list. + +<p>The value of <b>-tag</b> is the list of tags, like this example: + +<pre> +<code> + -tag=subfiletype=reducedimage,documentname=Fred,xposition=25 +</code> +</pre> + +<p>As you see, it is a list of tag specifications separated by commas. +Each tag specification is a name and a value separated by an equal +sign. The name is the name of the tag type, except in arbitrary +upper/lower case. One place to see the names of TIFF tag types is in +the TIFF library's <b>tiff.h</b> file, where there is a macro defined +for each consisting of "TIFF_" plus the name. E.g. for +the SUBFILETYPE tag type, there is a macro TIFF_SUBFILETYPE. + +<p>The format of the value specification for a tag (stuff after the +equal sign) depends upon what kind of value the tag type has: + +<ul> +<li>Integer: a decimal number + +<li>Floating point number: a decimal number + +<li>String: a string + +<li>Enumerated (For example, a 'subfiletype' tag takes an enumerated +value. Its possible values are REDUCEDIMAGE, PAGE, and MASK.): The +name of the value. You can see the possible value names in the TIFF +library's <b>tiff.h</b> foile, where there is a macro defined for each +consisting of a qualifier plus the value name. E.g. for the +REDUCEDIMAGE value of a SUBFILETYPE tag, you see the macro +FILETYPE_REDUCEDIMAGE. + +<p>The TIFF format assigns a unique number to each enumerated value and +you can specify that number, in decimal, as an alternative. This is useful +if you are using an extension of TIFF that <b>pamtotiff</b> doesn't +know about. + +</ul> + +<p>If you specify a tag type with <b>-tag</b> that is not independent +of the content of your PNM source image and <b>pamtotiff</b>'s +conversion process (i.e. a tag type in which <b>pamtotiff</b> is +interested), <b>pamtotiff</b> fails. For example, you cannot specify +an IMAGEWIDTH tag with <b>-tag</b>, because <b>pamtotiff</b> generates +an IMAGEWIDTH tag that gives the actual width of the image. + +<p><b>-tag</b> was new in Netpbm 10.31 (December 2005). + +<h3>Other</h3> + +<P>You can use the <B>-rowsperstrip</B> option to set the number of +rows (scanlines) in each strip of data in the output file. By +default, the output file has the number of rows per strip set to a +value that will ensure each strip is no more than 8 kilobytes long. + +<p>The <b>-append</b> option tells <b>pamtotiff</b> to add images to +the existing output file (a TIFF file may contain multiple images) +instead of the default, which is to replace the output file. + +<p><b>-append</b> was new in Netpbm 10.27 (March 2005). + + +<A NAME="lbAF"> </A> +<H2>NOTES</H2> + +<P>There are myriad variations of the TIFF format, and this program +generates only a few of them. <B>pamtotiff</B> creates a grayscale +TIFF file if its input is a PBM (monochrome) or PGM (grayscale) or +equivalent PAM file. <B>pamtotiff</B> also creates a grayscale file +if it input is PPM (color) or equivalent PAM, but there is only one +color in the image. + +<p>If the input is a PPM (color) file and there are 256 colors or +fewer, but more than 1, <B>pamtotiff</B> generates a color palette +TIFF file. If there are more colors than that, <B>pamtotiff</B> +generates an RGB (not RGBA) single plane TIFF file. Use +<B>pnmtotiffcmyk</B> to generate the cyan-magenta-yellow-black ink +color separation TIFF format. + +<P>The number of bits per sample in the TIFF output is determined by +the maxval of the Netpbm input. If the maxval is less than 256, the bits +per sample in the output is the smallest number that can encode the +maxval. If the maxval is greater than or equal to 256, there are 16 +bits per sample in the output. + +<h3 id="extrachannel">Extra Channels</h3> + +<p>Like most Netpbm programs, <b>pamtotiff</b>'s function is mostly +undefined if the input is PAM image with tuple type other than +BLACKANDWHITE, GRAYSCALE, or RGB. Most of the statements in this manual +assume the input is not such an exotic PAM. But there is a little +defined processing of other PAM subformats. + +<p><b>pamtotiff</b> assumes any 1 plane PAM image is BLACKANDWHITE +or GRAYSCALE (and doesn't distinguish between those two). + +<p><b>pamtotiff</b> assumes a PAM with more than 1 plane is of tuple +type RGB except with that number of planes instead of 3. +<b>pamtotiff</b> doesn't really understand red, green, and blue, so it +has no trouble with a 2-component or 5-component color space. The +TIFF format allows an arbitrary number of color compoonents, so +<b>pamtotiff</b> simply maps the PAM planes directly to TIFF color +components. I don't know if the meanings of 5 components in a TIFF image +are standard at all, but the function is there if you want to use it. + +<p>Note that <b>pamtotiff</b> may generate either a truecolor or +colormapped image with an arbitrary number of color components. In +the truecolor case, the raster has that number of planes. In the +colormapped case, the raster has of course 1 plane, but the color map +has all the color components in it. + +<p>The most common reason for a PAM to have extra planes is when the tuple +type is xxx_ALPHA, which means the highest numbered plane is a transparency +plane (alpha channel). At least one user found that a TIFF with an extra +plane for transparency was useful. + +<p>Note that the grayscale detection works on N-component colors, so if +your planes aren't really color components, you'll want to disable this +via the <b>-color</b> option. + + +<H3 id="multipass">Multiple Passes</H3> + +<P><B>pamtotiff</B> reads the input image once if it can, and +otherwise twice. It needs that second pass (which happens before the +main pass, of course) to analyze the colors in the image and generate +a color map (palette) and determine if the image is grayscale. So the +second pass happens only when the input is PPM. And you can avoid it +then by specifying both the <B>-truecolor</B> and <B>-color</B> +options. + +<P> If the input image is small enough to fit in your system's file +cache, the second pass is very fast. If not, it requires reading from +disk twice, which can be slow. + +<P>When the input is from a file that cannot be rewound and reread, +<B>pamtotiff</B> reads the entire input image into a temporary file +which can, and works from that. Even if it needs only one pass. + +<P>Before Netpbm 9.21 (December 2001), <b>pamtotiff</b> always read +the entire image into virtual memory and then did one, two, or three +passes through the memory copy. The <b>-truecolor</b> and +<b>-color</b> options did not exist. The passes through memory would +involve page faults if the entire image did not fit into real memory. +The image in memory required considerably more memory (12 bytes per +pixel) than the cached file version of the image would. + + +<h3>Resolution</h3> + +<p>A Tiff image may contain information about the resolution of the image, +which means how big in real dimensions (centimeters, etc.) each pixel in the +raster is. That information is in the TIFF XRESOLUTION, YRESOLUTION, +and RESOLUTIONUNIT tags. By default, <b>pamtotiff</b> does not include +any tags of these types, but you can specify them with the <b>-tags</b> +option. + +<p>There are also options <b>-xresolution</b>, <b>-yresolution</b>, +and <b>-resolutionunit</b>, but those are obsolete. Before <b>-tags</b> +existed (before Netpbm 10.31 (December 2005), they were the only way. + +<p>Note that the number of pixels in the image and how much information +each contains is determined independently from the setting of the +resolution tags. The number of pixels in the output is the same as in +the input, and each pixel contains the same information. For your +resolution tags to be meaningful, they have to consistent with +whatever created the PNM input. E.g. if a scanner turned a 10 centimeter +wide image into a 1000 pixel wide PNM image, then your horizontal +resolution is 100 pixels per centimeter, and if your XRESOLUTION +tag says anything else, something that prints your TIFF image won't +print the proper 10 centimeter image. + +<p>The value of the XRESOLUTION tag is a floating point decimal number +that tells how many pixels there are per unit of distance in the +horizontal direction. <b>-yresolution</b> is analogous for the +vertical direction. + +<p>The unit of distance is given by the value of the RESOLUTIONUNIT +option. That value is either INCH, CENTIMETER, or NONE. NONE +means the unit is arbitrary or unspecified. This could mean that the +creator and user of the image have a separate agreement as to what the +unit is. But usually, it just means that the horizontal and vertical +resolution values cannot be used for anything except to determine +aspect ratio (because even though the unit is arbitrary or +unspecified, it has to be the same for both resolution numbers). + +<p>If you <em>don't</em> use a <b>-tag</b> option to specify the +resolution tag and use the obsolete options instead, note the +following: + +<ul> +<li>If you don't include an specify <b>-xresolution</b>, the Tiff image +does not contain horizontal resolution information. Likewise for +<b>-yresolution</b>. If you don't specify <b>-resolutionunit</b>, the +default is inches. + +<li>Before Netpbm 10.16 (June 2003), <B>-resolutionunit</b> did not +exist and the resolution unit was always inches. + +</ul> + +<h2 id="history">HISTORY</h2> + +<p><b>pamtotiff</b> was originally <b>pnmtotiff</b> and did not handle +PAM input. It was extended and renamed in Netpbm 10.30 (October 2005). + + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="tifftopnm.html">tifftopnm</A></B>, + +<B><A HREF="pnmtotiffcmyk.html">pnmtotiffcmyk</A></B>, + +<B><A HREF="pamdepth.html">pamdepth</A></B>, + +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, + +<B><A HREF="pam.html">pam</A></B> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Derived by Jef Poskanzer from ras2tiff.c, which is +Copyright (c) 1990 by Sun Microsystems, Inc. +Author: Patrick J. Naughton (<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">NOTES</A> +<UL> +<LI><A HREF="#multipass">Multiple Passes</A> +<LI><A HREF="#extrachannel">Extra Channels</A> +</UL> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamtouil.html b/pamtouil.html new file mode 100644 index 00000000..10741192 --- /dev/null +++ b/pamtouil.html @@ -0,0 +1,89 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtouil User Manual</TITLE></HEAD><BODY> +<H1>pamtouil</H1> +Updated: 05 May 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pamtouil - convert a PNM or PNM/alpha image into a Motif UIL icon file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pamtouil</B> [<B>-name=</B><I>uilname</I>] [<I>pamfile</I>] + +<p>You may abbreviate any option to its shortest unique prefix. +You may use two hyphens instead of one to delimit an option. You may +separate an option from its value with whitespace instead of <b>=</b>. + +<A NAME="lbAD"> </A> + +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtouil</b> reads a PNM or PAM image as input and produces a +Motif UIL icon file as output. If the input is PAM, it may be either +a regular grayscale or color image or grayscale+alpha or color+alpha. +Where the alpha channel is present, <b>pamtouil</b> renders pixels +that are more than half transparent as transparent in the output. + +<P>In the UIL's colormap, <b>pamtouil</b> uses the color names from +the RGB database -- the same one <b><a href="ppmmake.html">ppmmake</a></b> +uses. Where a color in the input does not exactly match one of the colors +named in the RGB database, <b>pamtouil</b> uses the closest color named +in the RGB database. + +<A NAME="lbAE"> </A> + +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-name</B> + +<DD> + Allows you to specify the prefix string which is printed in the + resulting UIL output. If not specified, will default to the filename + (without extension) of the ppmfile argument. If <B>-name</B> is not + specified and no ppmfile is specified (i.e. piped input), the + prefix string will default to the string "noname". + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamstack.html">pam</A> +<A HREF="pam.html">pam</A> +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAG"> </A> +<H2>HISTORY</H2> + +<P>Before May 2002, <b>pamtouil</b> was called <b>ppmtouil</b> and had no +way to specify transparency. + + +<H2>AUTHOR</H2> + +Converted by Bryan Henderson from ppmtouil.c, which was converted by +Jef Poskanzer from ppmtoxpm.c, which is Copyright (C) 1990 by Mark +W. Snitily + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pamtoxvmini.html b/pamtoxvmini.html new file mode 100644 index 00000000..969aceda --- /dev/null +++ b/pamtoxvmini.html @@ -0,0 +1,48 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamtoxvmini User Manual</TITLE></HEAD> +<BODY> +<H1>xvminitoppm</H1> +Updated: 02 April 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamtoxvmini - convert Netpbm image to an XV "thumbnail" picture + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamtoxvmini</B> + +[<I>xvminipic</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pamtoxvmini</b> reads a Netpbm image (PAM or PNM) and produces +an XV "thumbnail" picture (a miniature picture normally +generated by the "VisualSchnauzer" browser) as output. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="xvminitoppm.html">xvminitoppm</A>, +<A HREF="ppm.html">ppm</A>, +<b>xv</b> manual + +<h2 id="history">HISTORY</h2> + +<p>This program was new in Netpbm 10.34 (April 2006). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pamx.html b/pamx.html new file mode 100644 index 00000000..2ceda427 --- /dev/null +++ b/pamx.html @@ -0,0 +1,247 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pamx User Manual</TITLE></HEAD> +<BODY> +<H1>pamx</H1> +Updated: 25 March 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pamx - display Netpbm image in X Window System window + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pamx</B> + +[<b>-fullscreen</b>] +[<b>-install</b>] +[<b>-private</b>] +[<b>-fit</b>] +[<b>-pixmap</b>] +[<b>-verbose</b>] +[<b>-display=</b><i>x-display</i>] +[<b>-title=</b><i>text</i>] +[<b>-foreground=</b><i>color</i>] +[<b>-background=</b><i>color</i>] +[<b>-border=</b><i>color</i>] +[<b>-geometry=</b><i>x-geometry-string</i>] +[<b>-visual=</b><i>name</i>] + +<i>netpbm_file</i> + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and its +value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + + +<p><b>pamx</b> displays a Netpbm image in an X Window System window. +It is like a very simple version of the classic X image viewer +<b>xloadimage</b>. + +<p>If you don't specify the input file <i>netpbm_file</i>, the input is +from Standard Input. The input image can be any Netpbm image format. +If the input is a multi-image stream, <b>pamx</b> ignores all but the +first image. + +<p><b>pamx</b> is not the best choice for general purpose viewing of +images, because it is a traditional simple Netpbm building block. It +is a good thing to build into other programs and can be useful for +debugging more complex systems, but you can get much more powerful +viewers that can display Netpbm images. For example, <b>xloadimage</b>, +<b>xli</b>, <b>xzgv</b>, and any web browser. + +<p>The initial window is at most 90% of the size of the display unless +the window manager does not correctly handle window size requests or +if you've used the <b>-fullscreen</b> option. You may move the image +around in the window by dragging with the first mouse button. The +cursor will indicate which directions you may drag, if any. You may +exit the window by typing 'q' or control-C when the keyboard focus is +on the window. + +<p><b>ppmsvgalib</b> is a similar program that displays an image on a +Linux system without the need for the X Window System. + + +<h2 id="resource">X RESOURCE CLASS</h2> + +<p><b>pamx</b> uses the resource class name <b>Xloadimage</b> for +window managers which need this resource set. This is, of course, the +same resource class that the conventional viewer program +<b>xloadimage</b> uses. + +<h2 id="options">OPTIONS</h2> + +<dl> +<dt><b>-border=</b><i>color</i> + +<dd>This sets the background portion of the window which is not +covered by any images to be <i>color</i>. + +<dt><b>-display=</b><i>display_name</i> + +<dd>This names the X display in which to put the window. E.g. <b>0:0</b>. + +<dt><b>-fit</b> + +<dd>Force image to use the default visual and colormap. This is +useful if you do not want technicolor effects when the colormap focus +is inside the image window, but it may reduce the quality of the +displayed image. + +<dt><b>-fullscreen</b> + +<dd>Use the entire screen to display the image. + +<dt><b>-geometry=</b><I>W</I><b>x</b><i>H</i>[{<b>+</b>,<b>-</b>}<i>X</i>{<b>+</b>,<b>-</b>}<i>Y</i> + +<dd>This sets the size and position of the window in which <b>pamx</b> +displays the image. + +<p>By default, the window size exactly matches the image size, except that +if you don't specify <b>-fullscreen</b>, the maximum is 90% of the screen +dimensions. + +<dt><b>-install</b> + +<dd>Forcibly install the image's colormap when the window is focused. +This violates ICCCM standards and only exists to allow operation with +naive window managers. Use this option only if your window manager +does not install colormaps properly. + +<dt><b>-pixmap</b> + +<dd>Force the use of a pixmap as backing-store. This is provided for +servers where backing-store is broken (such as some versions of the +AIXWindows server). It may improve scrolling performance on servers +which provide backing-store. + +<dt><b>-private</b> + +<dd>Force <b>pamx</b> to use of a private colormap. By default, +<b>pamx</b> allocates colors shared unless there are not enough colors +available. + +<dt><b>-verbose</b> + +<dd>Causes <b>pamx</b> to print various information about what it's +doing to Standard Error. + +<dt><b>-visual=</b><i>visual_name</i> + +<dd> +Force the use of a specific visual type to display an image. By +default, <b>pamx</b> tries to pick the best available image for a +particular image type. The available visual types are: +<b>DirectColor</b>, <b>TrueColor</b>, <b>PseudoColor</b>, +<b>StaticColor</b>, <b>GrayScale</b>, and <b>StaticGray</b>. +You may use the shortest unique prefix of these names, and case is +not significant. + +<dt><b>-background=</b><i>color</i> + +<dd>Use <i>color</i> as the background color instead of the default +(usually white but this depends on the image type) if you are +transferring a monochrome image to a color display. + +<dt><b>-foreground=</b><i>color</i> + +<dd> +Use <i>color</i> as the foreground color instead of black if you are +transferring a monochrome image to a color display. You can also use +this to invert the foreground and background colors of a monochrome +image. + +<dt><b>-title=</b><i>text</i> + +<dd>Set the title bar title of the window. Default is the file name of +the input file, or "stdin" if the image is from Standard Input. + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmsvgalib.html">ppmsvgalib</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B>xzgv</B>, +<b>xloadimage</b>, +<b>xli</b> + +<h2 id="author">AUTHOR</h2> + +<p><b>pamx</b> is by Bryan Henderson, in March 2006, based on +<b>xloadimage</b> by Jim Frost, Centerline Software, +jimf@centerline.com, 1989-1993. + +<p>Jim's code contained the following copyright notice and license: + +<blockquote> +<p>Copyright 1989, 1993 Jim Frost + +<p>Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. The author makes no representations about +the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + +<p>THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +</blockquote> + +<p>Lots of other people contributed to Xloadimage, and they are listed +in the file COPYRIGHT in the source code. + +<h2 id="history">HISTORY</h2> + +<p><b>pamx</b> was new in Netpbm 10.34 (May 2006). + +<p><b>pamx</b> is essentially based on the classic X displayer program +<b>xloadimage</b> by Jim Frost, 1989. Bryan Henderson stripped it +down and adapted it to Netpbm in March 2006. + +<p>The following features of <b>xloadimage</b> are left out of <b>pamx</b>, +to be more compatible with Netpbm's philosophy of simple building blocks. +Note that there are other programs in Netpbm that do all of these things: +<ul> +<li>slide show +<li>zoom in/out +<li>ability to accept formats other than Netpbm +<li>ability to display on the root window +<li>image transformations (brightening, clipping, rotating, etc) +<li>decompressing and other decoding of input +</ul> + +<b>pamx</b> also differs from <b>xloadimage</b> in that it uses +Libnetpbm. + +<p>There is virtually no code from <b>xloadimage</b> actually in +<b>pamx</b>, because Bryan rewrote it all to make it easier to +understand. + + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#resource">X RESOURCE CLASS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbm.html b/pbm.html new file mode 100644 index 00000000..80c850c4 --- /dev/null +++ b/pbm.html @@ -0,0 +1,156 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>The PBM Format</TITLE> +<META NAME="manual_section" CONTENT="5"> +</HEAD> +<BODY> +<H1>pbm</H1> +Updated: 22 September 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pbm - Netpbm bi-level image format + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>The PBM format is a lowest common denominator monochrome file format. +<A NAME="ixAAB"></A> It serves as the common language of a large +family of bitmap image conversion filters. Because the format pays no heed +to efficiency, it is simple and general enough that one can easily +develop programs to convert to and from just about any other graphics +format, or to manipulate the image. + +<P>The name "PBM" is an acronym derived from "Portable Bit Map." + +<P>This is not a format that one would normally use to store a file +or to transmit it to someone -- it's too expensive and not expressive +enough for that. It's just an intermediary format. In it's purest +use, it lives only in a pipe between two other programs. + +<P>The format definition is as follows. + +<P>A PBM file consists of a sequence of one or more PBM images. There are +no data, delimiters, or padding before, after, or between images. + +<P>Each PBM image consists of the following: + +<OL> + +<LI>A "magic number" for identifying the file type. +A pbm image's magic number is the two characters "P4". + +<LI>Whitespace (blanks, TABs, CRs, LFs). + +<LI>The width in pixels of the image, formatted as ASCII characters in decimal. + +<LI>Whitespace. + +<LI>The height in pixels of the image, again in ASCII decimal. + +<LI>Newline or other single whitespace character. + +<LI>A raster of Height rows, in order from top to bottom. Each row is +Width bits, packed 8 to a byte, with don't care bits to fill out the +last byte in the row. Each bit represents a pixel: 1 is black, 0 is +white. The order of the pixels is left to right. The order of their +storage within each file byte is most significant bit to least +significant bit. The order of the file bytes is from the beginning of +the file toward the end of the file. + + +<P>A row of an image is horizontal. A column is vertical. The pixels +in the image are square and contiguous. + +<LI>Characters from a "#" to the next end-of-line, before +the width/height line, are comments and are ignored. + +</OL> + +<P> +There is actually another version of the PBM format, even more more +simplistic, more lavishly wasteful of space than PBM, called Plain +PBM. Plain PBM actually came first, but even its inventor couldn't +stand its recklessly squanderous use of resources after a while and +switched to what we now know as the regular PBM format. But Plain PBM +is so redundant -- so overstated -- that it's virtually impossible to +break. You can send it through the most liberal mail system (which +was the original purpose of the PBM format) and it will arrive still +readable. You can flip a dozen random bits and easily piece back +together the original image. And we hardly need to define the format +here, because you can decode it by inspection. + +<p>Netpbm programs generate Raw PBM format instead of Plain PBM by +default, but the <a href="index.html#commonoptions">common option</a> +<b>-plain</b> chooses Plain PBM. + +<P>The difference is: +<DL COMPACT> +<DT>-<DD> +There is exactly one image in a file. +<DT>-<DD> +The "magic number" is "P1" instead of "P4". +<DT>-<DD> +Each pixel in the raster is represented by a byte containing ASCII '1' or '0', +representing black and white respectively. There are no fill bits at the +end of a row. +<DT>-<DD> +White space in the raster section is ignored. +<DT>-<DD> +You can put any junk you want after the raster, if it starts with a +white space character. +<DT>-<DD> +No line should be longer than 70 characters. +</DL> +<P> + +Here is an example of a small image in the plain PBM format. +<PRE> +P1 +# feep.pbm +24 7 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 +0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 +0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 +0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 +0 1 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +</PRE> + +<p>There is a newline character at the end of each of these lines. + +<P>You can generate the Plain PBM format from the regular PBM format +(first image in the file only) with the <B>pnmtoplainpnm</B> program. + +<P>Programs that read this format should be as lenient as possible, +accepting anything that looks remotely like a bitmap. + +<H2 id="compatibility">COMPATIBILITY</H2> + +<P>Before July 2000, there could be at most one image in a PBM file. As +a result, most tools to process PBM files ignore (and don't read) any +data after the first image. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="libnetpbm.html">libnetpbm</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pam.html">pam</A></B>, +<B><A HREF="directory.html">programs that process PBM</A></B> + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#compatibility">COMPATIBILITY</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pbmclean.html b/pbmclean.html new file mode 100644 index 00000000..9c5ac187 --- /dev/null +++ b/pbmclean.html @@ -0,0 +1,114 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmclean User Manual</TITLE></HEAD> +<BODY> +<H1>pbmclean</H1> +Updated: 27 Feb 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmclean - flip isolated pixels in portable bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmclean</B> +[<B>-minneighbors=</B><I>N</I>] +[<B>-black</B>|<B>-white</B>] +[<I>pbmfile</I>] + +<?makeman .SH OPTION USAGE ?> +<P>You can use the minimum unique abbreviation of the options. You +can use two hyphens instead of one. You can separate an option name +from its value with white space instead of an equals sign. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pbmclean</B> cleans up a PBM image of random specks. It reads a +PBM image as input and outputs a PBM that is the same as the input +except with isolated pixels inverted. An isolated pixel is one that +has very few neighboring pixels of the same color. The +<b>-minneighbors</b> option gives the number of same-color neighbors +are required. + +<P>The default is 1 pixel -- only completely isolated pixels are +flipped. + +<P>(A <b>-minneighbors</b> value greater than 8 generates a completely +inverted image (but use <B>pnminvert</B> to do that) -- or a +completely white or completely black image with the <B>-black</B> or +<B>-white</B> option). + +<P><B>pbmclean</B> considers the area beyond the edges of the image to +be white. (This matters when you consider pixels right on the edge of +the image). + +<P>You can use <B>pbmclean </B> to clean up "snow" on bitmap +images. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-black</B> + +<DT><B>-white</B> + +<DD>Flip pixels of the specified color. By default, if you specify +neither <B>-black</B> nor <B>-white</B>, <B>pbmclean</B> flips both +black and white pixels which do not have sufficient identical +neighbors. If you specify <B>-black</B>, <B>pbmclean</B> leaves the +white pixels alone and just erases isolated black pixels. Vice versa +for <B>-white</B>. You may specify both <B>-black</B> and +<B>-white</B> to get the same as the default behavior. + +<dt><b>-minneighbors=</b><i>N</i> + +<dd>This determines how many pixels must be in a cluster in order +for <b>pbmclean</b> to consider them legitimate and not clean them +out of the image. See <a href="#description">Description</a>. + +<P>Before December 2001, <B>pbmclean</B> accepted <B>-</B><I>N</I> +instead of <B>-minneighbors</B>. Before Netpbm 10.27 (March 2005), +<b>-minneighbors</b> was <b>-minneighbor</b>. + + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Angus Duggan +Copyright (C) 1989 by Jef Poskanzer. +Copyright (C) 2001 by Michael Sternberg. +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmlife.html b/pbmlife.html new file mode 100644 index 00000000..b403343d --- /dev/null +++ b/pbmlife.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmlife User Manual</TITLE></HEAD> +<BODY> +<H1>pbmlife</H1> +Updated: 21 February 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmlife - apply Conway's rules of Life to a portable bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmlife</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmlife</b> reads a portable bitmap as input, applies the rules +of Life to it for one generation, and produces a PBM image as output. + +<P>A white pixel in the image is interpreted as a live beastie, and a +black pixel as an empty space. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmmake.html b/pbmmake.html new file mode 100644 index 00000000..dd13d891 --- /dev/null +++ b/pbmmake.html @@ -0,0 +1,65 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmmake User Manual</TITLE></HEAD> +<BODY> +<H1>pbmmake</H1> +Updated: 13 December 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmmake - create a blank bitmap of a specified size + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmmake</B> +[<B>-white</B>|<B>-black</B>|<B>-gray</B>] +<I>width</I> +<i>height</I> + +<p>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmmake</b> produces a PBM image of the specified width and +height, either all black, all white, or a dithered gray. The default +is white. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>In addition to the usual <B>-white</B> and <B>-black</B>, this +program implements <B>-gray</B>. This gives a simple 50% gray pattern +with 1's and 0's alternating. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmmake.html">pgmmake</A>, +<A HREF="ppmmake.html">ppmmake</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> + +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmmask.html b/pbmmask.html new file mode 100644 index 00000000..e592c322 --- /dev/null +++ b/pbmmask.html @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmmask User Manual</TITLE></HEAD> +<BODY> +<H1>pbmmask</H1> +Updated: 08 August 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmmask - create a mask bitmap from a regular bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmmask</B> +[<B>-expand</B>] +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmmask</b> reads a PBM image as input and Generates a +corresponding mask of the foreground areas as another PBM image. + +<P>The color to be interpreted as "background" is +determined automatically. Regardless of which color is background, +the mask will be white where the background is and black where the +figure is. + +<P>This lets you do a masked paste like this, for objects with a black +background: + +<PRE> + pbmmask obj > objmask + pnmpaste < dest -and objmask <x> <y> | pnmpaste -or obj <x> <y> +</PRE> + +For objects with a white background, you can either invert them or +add a step: +<PRE> + pbmmask obj > objmask + pnminvert objmask | pnmpaste -and obj 0 0 > blackback + pnmpaste < dest -and objmask <x> <y> | pnmpaste -or blackback <x> <y> +</PRE> + +Note that this three-step version works for objects with black backgrounds +too, if you don't care about the wasted time. + +<P>You can also use masks with graymaps and pixmaps, using the +<I>pnmarith</I> tool. For instance: + +<PRE> + ppmtopgm obj.ppm | pamditherbw -threshold | pbmmask > objmask.pbm + pnmarith -multiply dest.ppm objmask.pbm > t1.ppm + pnminvert objmask.pbm | pnmarith -multiply obj.ppm - > t2.ppm + pnmarith -add t1.ppm t2.ppm +</PRE> + +An interesting variation on this is to pipe the mask through +<I>pnmsmooth</I> before using it. This makes the boundary between the +two images less sharp. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-expand</B> + +<DD>Expands the mask by one pixel out from the image. This is useful +if you want a little white border around your image. (A better +solution might be to turn the <b>pbmlife</b> program into a general +cellular automaton tool...) + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>, +<B><A HREF="pnmpaste.html">pnmpaste</A></B>, +<B><A HREF="pnminvert.html">pnminvert</A></B>, +<B><A HREF="pnmarith.html">pnmarith</A></B>, +<B><A HREF="pnmsmooth.html">pnmsmooth</A></B> +<B><A HREF="pbm.html">pbm</A></B>, + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmpage.html b/pbmpage.html new file mode 100644 index 00000000..542efc7a --- /dev/null +++ b/pbmpage.html @@ -0,0 +1,111 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmpage User Manual</TITLE></HEAD> +<BODY> +<H1>pbmpage</H1> +Updated: 01 May 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmpage - create a one page test pattern for printing + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmpage</B> +[<B>-a4</B>] +<I>test_pattern</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pbmpage</B> generates a one page test pattern to print on a +sheet of paper, for use in calibrating a printer. The test pattern in +is PBM format. + +<P><B>pbmpage</B> produces an image intended for 600 dots per inch +printer resolution. + +<P>If you are printing on an HP PPA printer, you can convert the +output of this program to a stream that you can feed to the printer +with <B>pbmtoppa</B>. + +<P> +Bear in mind that when you print the test pattern, you are testing not +only the printer, but any converter or driver software along the +printing path. Any one of these components may adjust margins, crop +the image, erase edges, and such. + +<P>If, due to addition of margins, the printer refuses to print the +image because it is too big, use <B>pamcut</B> to cut the right and +bottom edges off the test pattern until it is small enough to print. + +<P><I>test_pattern </I> is the number of the test pattern to generate, +as follows. The default is <B>1</B>. + +<DL COMPACT> +<DT><B>1</B> + +<DD> +A black on white grid ruled in numbers of pixels. A black one pixel box +is at the very edges of the paper. + +<p>Before Netpbm 10.18 (August 2003), the perimeter box was not there. + +<DT><B>2</B> + +<DD> +A vertical line segment, one pixel wide, extending 1/2" up from the +exact center of the page. +<DT><B>3</B> + +<DD> +Two diagonal line segments, one starting at the upper left corner of the +page, the other starting from the lower left corner of the page. Both +extend 1/2" toward the center of the page at 45 degrees. +</DL> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-a4</B> + +<DD>Generate an image for A4 (European) paper. Without this option, +<B>pbmpage</B> generates an image for US standard paper (8 1/2" +wide x 11" high). + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtoppa.html">pbmtoppa</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Tim Norman. Copyright (C) 1998. Licensed under GNU Public License + +<P>Manual page by Bryan Henderson, May 2000. Contributed to the public +domain by its author. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmpscale.html b/pbmpscale.html new file mode 100644 index 00000000..41cd6e27 --- /dev/null +++ b/pbmpscale.html @@ -0,0 +1,74 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmpscale User Manual</TITLE></HEAD> +<BODY> +<H1>pbmpscale</H1> +Updated: 03 October 2003 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmpscale - enlarge a PBM image with edge smoothing + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>pbmpscale</b> +<i>N</i> +[<i>pbmfile</i>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmpscale</b> reads a PBM image as input, and outputs a PBM +image enlarged N times. <b>pbmpscale</b> does this enlargement by +pixel replication, with some additional smoothing of corners and +edges. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamenlarge.html">pamenlarge</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="pbm.html">pbm</A> + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Angus Duggan +Copyright (C) 1989 by Jef Poskanzer. + +<P>Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. + +<A NAME="lbAG"> </A> +<H2>NOTES</H2> + +<p><b>pbmpscale</b> works best for enlargements of 2. Enlargements +greater than 2 should be done by as many enlargements of 2 as +possible, followed by an enlargement by the remaining factor. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +<LI><A HREF="#lbAG">NOTES</A> +</UL> +</BODY> +</HTML> + diff --git a/pbmreduce.html b/pbmreduce.html new file mode 100644 index 00000000..488ea5a2 --- /dev/null +++ b/pbmreduce.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmreduce User Manual</TITLE></HEAD> +<BODY> +<H1>pbmreduce</H1> +Updated: 02 August 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmreduce - read a PBM image and reduce it N times + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmreduce</B> +[<B>-floyd</B>|<B>-fs</B>|<B>-threshold</B>] +[<B>-value</B> <I>val</I>] +<I>N</I> +[<I>pbmfile</I>] + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmreduce</b> reads a PBM image as input and reduces it by a +factor of <I>N</I>, producing a PBM image as output. + +<P><b>pbmreduce</b> duplicates a lot of the functionality of +<b>pamditherbw</b>; you could do something like <tt>pamscale | +pamditherbw</tt>, but <b>pbmreduce</b> is a lot faster. + +<P>You can use <B>pbmreduce</B> to "re-halftone" an image. +Let's say you have a scanner that only produces black&white, not +grayscale, and it does a terrible job of halftoning (most b&w +scanners fit this description). One way to fix the halftoning is to +scan at the highest possible resolution, say 300 dpi, and then reduce +by a factor of three or so using <b>pbmreduce</b>. You can even +correct the brightness of an image, by using the <B>-value</B> option. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>By default, <b>pbmreduce</b> does the halftoning after the +reduction via boustrophedonic Floyd-Steinberg error diffusion; +however, you can use the <B>-threshold</B> option to specify simple +thresholding. This gives better results when reducing line drawings. + +<P>The <B>-value</B> option alters the thresholding value for all +quantizations. It should be a real number between 0 and 1. Above 0.5 +means darker images; below 0.5 means lighter. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamenlarge.html">pamenlarge</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="pamditherbw.html">pamditherbw</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtext.html b/pbmtext.html new file mode 100644 index 00000000..53d8f13c --- /dev/null +++ b/pbmtext.html @@ -0,0 +1,221 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtext User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtext</H1> +Updated: 14 April 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtext - render text into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtext</B> +[<B>-font</B> <I>fontfile</I>] +[<B>-builtin</B> <I>fontname</I>] +[<B>-space</B> <I>pixels</I>] +[<B>-lspace</B> <I>pixels</I>] +[<B>-nomargins</B>] +[<B>-width</B> <i>pixels</i>] +[<I>text</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pbmtext</b> takes the specified text, either a single line from +the command line or multiple lines from standard input, and renders it +into a PBM graphical image. + +<P>In the image, each line of input is a line of output. Formatting +characters such as newline have no effect on the formatting; like any +unprintable character, they turn into spaces. + +<P>The image is just wide enough for the longest line of text, plus +margins, and just high enough to contain the lines of text, plus +margins. + +<P>The left and right margins are twice the width of the widest +character in the font; the top and bottom margins are the height of +the tallest character in the font. But if the text is only one line, +all the margins are half of this. You can use the <b>-nomargins</b> option +to eliminate the margins. + +<p><b>pbmtextps</b> does the same thing as <b>pbmtext</b>, but uses +Ghostscript to generate the characters, which means it's a lot more +sophisticated and you can use Postscript fonts. But it also means you +have to have Ghostscript installed and it isn't as fast. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-font</B> +<DT><B>-builtin</B> + +<DD> + +<b>-builtin</b> selects a font among those built into Netpbm. + +<b>-font</b> selects a font that you supply yourself either as an X +Window System BDF (Bitmap Distribution Format) file or as a PBM file +in a special form. + +<p>The default is the built in font "bdf." + +<p>"bdf" is Times-Roman 15 pixels high. (That's about 14 +point type printed at 75 dpi). + +<p>"fixed" is a built in fixed with font. + +<p>To create a font as a PBM file (to use with the <b>-font</b> +option), do this: In your window system of choice, display the +following text in the desired (fixed-width) font: + +<PRE> + + M ",/^_[`jpqy| M + + / !"#$%&'()*+ / + < ,-./01234567 < + > 89:;<=>?@ABC > + @ DEFGHIJKLMNO @ + _ PQRSTUVWXYZ[ _ + { \]^_`abcdefg { + } hijklmnopqrs } + ~ tuvwxyz{|}~ ~ + + M ",/^_[`jpqy| M + +</PRE> + +Do a screen grab or window dump of that text, using for instance +<B>xwd</B>, <B>xgrabsc</B>, or <B>screendump</B>. Convert the result +into a pbm file. If necessary, use <B>pamcut</B> to remove everything +except the text. Finally, run it through <B>pnmcrop</B>. to make +sure the edges are right up against the text. <B>pbmtext</B> +can figure out the sizes and spacings from that. + +<DT><B>-space</B> <I>pixels</I> + +<DD> Add <I>pixels</I> pixels of space between characters. This is in +addition to whatever space surrounding characters is built into the +font, which is usually enough to produce a reasonable string of text. + +<P><I>pixels</I> may be fractional, in which case the number of +pixels added varies so as to achieve the specified average. For +example <B>-space=1.5</B> causes half the spaces to be 1 pixel and +half to be 2 pixels. + +<P><I>pixels</I> may be negative to crowd text together, but the +author has not put much thought or testing into how this works in +every possible case, so it might cause disastrous results. + +<DT><B>-lspace</B> <I>pixels</I> + +<DD> Add <I>pixels</I> pixels of space between lines. This is in +addition to whatever space above and below characters is built into +the font, which is usually enough to produce a reasonable line +spacing. + +<P><I>pixels</I> must be a whole number. + +<P><I>pixels</I> may be negative to crowd lines together, but the +author has not put much thought or testing into how this works in +every possible case, so it might cause disastrous results. + +<DT><b>-nomargins</b> + +<DD>By default, <b>pbmtext</b> adds margins all around the image as +described above. This option causes <b>pbmtext</b> not to add any +margins. + +<p>Note that there may still be space beyond the edges of the type +because a character itself may include space at its edges. To eliminate +all surrounding background, so the type touches all four edges of the +image, use <b>pnmcrop</b>. + +<DT><b>-width</b> <i>pixels</i> + +<DD>This specifies how much horizontal space the text is supposed to fit +into. + +<p>If the input is one line, <b>pbmtext</b> breaks it into multiple +lines as needed to fit the specified width. It breaks it between +characters, but does not pay attention to white space; it may break in +the middle of a word and a line may begin or end with white space. + +<p>If the input is multiple lines, <b>pbmtext</b> assumes you already +have line breaks where they make sense, and <b>pbmtext</b> simply +truncates each line as needed to fit the specified width. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>USAGE</H2> + +<P>Often, you want to place text over another image. One way to do +this is with <B>ppmlabel</B>. <B>ppmlabel</B> does not give you the +font options that <B>pbmtext</B> does, though. + +<P>Another way is to use <B>pbmtext</B> to create an image containing +the text, then use <B>pamcomp</B> to overlay the text image onto your +base image. To make only the text (and not the entire rectangle +containing it) cover the base image, you will need to give +<B>pamcomp</B> a mask, via its <B>-alpha</B> option. You can just use +the text image itself as the mask, as long as you also specify the +<B>-invert</B> option to <B>pamcomp</B>. + +<P>If you want to overlay colored text instead of black, just use +<B>ppmchange</B> to change all black pixels to the color of your +choice before overlaying the text image. But still use the original +black and white image for the alpha mask. + +<P>If you want the text at an angle, use <B>pnmrotate</B> on the text +image (and alpha mask) before overlaying. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtextps.html">pbmtextps</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmcrop.html">pnmcrop</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppmchange.html">ppmchange</A></B>, +<B><A HREF="pnmrotate.html">pnmrotate</A></B>, +<B><A HREF="ppmlabel.html">ppmlabel</A></B>, +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Jef Poskanzer and George Phillips + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">USAGE</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtextps.html b/pbmtextps.html new file mode 100644 index 00000000..41068fb0 --- /dev/null +++ b/pbmtextps.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pbmtextps User Manual</title></HEAD> +<BODY> +<H1>pbmtextps</H1> +Updated: 7 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="ixAAB"></A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtextps - render text into a PBM image using a postscript interpreter + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtextps</B> +[<B>-font</B> <I>fontname</I>] +[<B>-fontsize</B> <I>fontsize</I>] +[<B>-resolution</B> <I>resolution</I>] +[<B>-stroke</B> <I>strokesize</I>] +<I>text</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pbmtextps</b> takes a single line of text from the command line +and renders it into a PBM image. + +<P>The image is cropped at the top and the right. It is not cropped +at the left or bottom so that the text begins at the same position +relative to the origin. You can use <b>pnmcrop</b> to crop it all the +way. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-font</B> +<DD> +By default, <b>pbmtextps</b> uses TimesRoman. + +<P>You can specify the font to use with the <B>-font</B> option. +This is the name of any valid postscript font which is installed on your +system. + +<DT><B>-fontsize</B> +<DD> +Size of font in points. See the <b>-resolution</b> option for information +on how to interpret this size. + +<p>Default is 24 points. + +<DT><B>-resolution</B> +<DD> +Resolution in dots per inch of distance measurements pertaining to generation +of the image. PBM images don't have any inherent resolution, so a distance +such as "1 inch" doesn't mean anything unless you separately specify what +resolution you're talking about. That's what this option does. + +<p>In particular, the meaning of the font size is determined by this +resolution. If the font size is 24 points and the resolution is 150 +dpi, then the font size is 50 pixels. + +<p>Default is 150 dpi. + +<DT><B>-stroke</B> +<DD> +Width of line to use for stroke font. There is no default stroke width +because the letters are solid by default. +</DL> + +<A NAME="lbAF"> </A> +<H2>USAGE</H2> + +You can generate antialiased text by using a larger resolution than the +default and scaling the image down using <b>pamscale</b>. + +<P>See the manual for the similar <B>pbmtext</B> for more advice on +usage. + +<A NAME="history"></a> +<H2>HISTORY</H2> + +<p><b>pbmtextps</b> was added to Netpbm in Release 10.0 (June 2002). + + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtext.html">pbmtext</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmcrop.html">pnmcrop</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppmchange.html">ppmchange</A></B>, +<B><A HREF="pnmrotate.html">pnmrotate</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="ppmlabel.html">ppmlabel</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2002 by James McCann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">USAGE</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmto10x.html b/pbmto10x.html new file mode 100644 index 00000000..9639fc2b --- /dev/null +++ b/pbmto10x.html @@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmto10x User Manual</TITLE></HEAD> +<BODY> +<H1>pbmto10x</H1> +Updated: 1 January 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmto10x - convert a PBM image into Gemini 10X printer graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmto10x</B> +[<B>-h</B>] +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmto10x</b> reads a PBM image as input and produces a file of +Gemini 10X printer graphics as output. The 10x's printer codes are +alleged to be similar to the Epson codes. + +<P>Note that there is no 10xtopbm tool - this transformation is one +way. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The resolution is normally 60H by 72V. If you specify the +<B>-h</B> option, resolution is 120H by 144V. You may find it useful +to rotate landscape images before printing. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> +<A NAME="lbAG"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Ken Yap + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmto4425.html b/pbmto4425.html new file mode 100644 index 00000000..d6948936 --- /dev/null +++ b/pbmto4425.html @@ -0,0 +1,72 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmto4425 User Manual</TITLE></HEAD> +<BODY> +<H1>Pbmto4425</H1> +Updated: 1994 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmto4425 - Display PBM images on an AT&T 4425 terminal + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmto4425</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pbmto4425</b> displays PBM format images on an AT&T 4425 ASCII +terminal using that terminal's mosaic graphics character set. The +program should also work with other VT100-like terminals with mosaic +graphics character sets such as the C. Itoh CIT-101, but it has not +yet been tested on terminals other than the 4425. + +<P> <b>Pbmto4425</b> puts the terminal into 132 column mode to achieve +the maximum resolution of the terminal. In this mode the terminal has +a resolution of 264 columns by 69 rows. The pixels have an aspect +ratio of 1:2.6, therefore an image should be processed before being +displayed in a manner such as this: + + +<PRE> +<B>% pamscale -xscale 2.6 </B><I>pamfile</I> <B>\ + | pamscale -xysize 264 69 \ + | ppmtopgm \ + | pamditherbw \ + | pbmto4425</B> +</PRE> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtoascii.html">pbmtoascii</a></b>, +<B><A HREF="ppmtoterm.html">ppmtoterm</a></b>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAE"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Robert Perlberg + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#lbAE">AUTHOR</A> +</UL> +</BODY> +</HTML> + + + + diff --git a/pbmtoascii.html b/pbmtoascii.html new file mode 100644 index 00000000..2375c53e --- /dev/null +++ b/pbmtoascii.html @@ -0,0 +1,74 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoascii User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoascii</H1> +Updated: 11 August 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoascii - convert a PBM image to ASCII graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoascii</B> + +[<B>-1x2</B>|<B>-2x4</B>] + +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pbmtoascii</b> reads a PBM image as input and produces a somewhat +crude ASCII graphic image as output. + +<P>To convert back, use <A HREF="asciitopgm.html">asciitopgm</A>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p>The <B>-1x2</B> and <B>-2x4</B> options give you two alternate ways for +the pixels to get mapped to characters. With <B>1x2</B>, the default, +each character represents a group of 1 pixel across by 2 pixels down. +With <B>-2x4</B>, each character represents 2 pixels across by 4 +pixels down. With the 1x2 mode you can see the individual pixels, so +it's useful for previewing small images on a non-graphics terminal. +The 2x4 mode lets you display larger images on a standard 80-column +display, but it obscures pixel-level details. 2x4 mode is also good +for displaying PGM images: + +<pre> +pamscale -width 158 | pnmnorm | pamditherbw -threshold +</pre> + +should give good results. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="asciitopgm.html">asciitopgm</A> +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988, 1992 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoatk.html b/pbmtoatk.html new file mode 100644 index 00000000..c746d08a --- /dev/null +++ b/pbmtoatk.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoatk User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoatk</H1> +Updated: 26 September 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoatk - convert a PBM image to a Andrew Toolkit raster object + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoatk</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoatk</b> reads a PBM image as input and produces a Andrew +Toolkit raster object as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="atktopbm.html">atktopbm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Bill Janssen. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtobbnbg.html b/pbmtobbnbg.html new file mode 100644 index 00000000..22bee438 --- /dev/null +++ b/pbmtobbnbg.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtobbnbg User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtobbnbg</H1> +Updated: 16 May 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtobbnbg - convert a PBM image into BitGraph graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtobbng</B> +[<I>rasterop</I>] +[<I>x</I> <I>y</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtobbnbg</b> reads a portable bitmap as input and produces BBN +BitGraph terminal Display Pixel Data (DPD) sequence as output. + +<P> +The rasterop can be specified on the command line. If this is omitted, 3 +(replace) will be used. A position in (x,y) coordinates can also be +specified. If both are given, the rasterop comes first. The portable bitmap +is always taken from the standard input. + +<P> +Note that there is no bgtopbm tool. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright 1989 by Mike Parker. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> + + + + + diff --git a/pbmtocmuwm.html b/pbmtocmuwm.html new file mode 100644 index 00000000..67e5d01a --- /dev/null +++ b/pbmtocmuwm.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtocmuwm User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtocmuwm</H1> +Updated: 15 April 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtocmuwm - convert a PBM image into a CMU window manager bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtocmuwm</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtocmuwm</b> reads a portable bitmap as input and produces a CMU +window manager bitmap as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="cmuwmtopbm.html">cmuwmtopbm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtodjvurle.html b/pbmtodjvurle.html new file mode 100644 index 00000000..f52a7a38 --- /dev/null +++ b/pbmtodjvurle.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtodjvurle User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtodjvurle</H1> +Updated: 10 April 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="name"> </A> +<H2>NAME</H2> + +pbmtodjvurle - convert a PBM image to DjVu Bitonal RLE format + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtodjvurle</B> + +[<I>pbmfile</I> [<I>rlefile</I>]] + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtodjvurle</b> reads a PBM image as input and produces +DjVu Bitonal RLE format as output. + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamtodjvurle.html">pamtodjvurle</A> +<A HREF="pbm.html">pbm</A> + +<a name="history"></a> +<H2>HISTORY</H2> +<p> +<b>pbmtodjvurle</b> was new in Netpbm 10.22 (April 2004). + +<A NAME="author"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2004 Scott Pakin <scott+pbm@pakin.org>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoepsi.html b/pbmtoepsi.html new file mode 100644 index 00000000..d6732425 --- /dev/null +++ b/pbmtoepsi.html @@ -0,0 +1,112 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pbmtoepsi User Manual</title></HEAD> + +<BODY> +<H1>pbmtoepsi</H1> +Updated: June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoepsi - convert a PBM image to an encapsulated PostScript +style preview bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoepsi</B> +[<B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]] +[<B>-bbonly</B>] +[<I>pbmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>Reads a PBM image as input. Produces an encapsulated Postscript +style bitmap as output. The output is not a stand alone postscript +file, it is only a preview bitmap, which can be included in an +encapsulated PostScript file. + +<P><b>pbmtoepsi</b> assumes the PBM input describes a whole output +page, with one pixel on the page corresponding to one PBM pixel. It +detects white borders in the image and generates Postscript output +that contains a Bounding Box statement to describe the location of the +principal image (the image excluding the white borders) on the page +and thus does not include the borders in the raster part of the +Postscript output. + +<P>There is no <b>epsitopbm</b> tool - this transformation is one way. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>] + +<DD> + <P>This option specifies the resolution in dots per inch of the + ultimate output device. You must specify this because the + Bounding Box statement defines the bounding box in absolute + distances, not in pixels. <b>pbmtoepsi</b> assumes in + calculating the bounding box that each PBM pixel will become one + dot on the output device, and applies your <b>dpi</b> + specification to calculate the size and location on the page of + the bounding box. + + <P>If you specify <I>N</I><B>x</B>N, the first number is the + horizontal resolution and the second number is the vertical + resolution. If you specify just a single number <I>N</I>, that is the + resolution in both directions. + + <P>The default is 72 dots per inch in both directions. + + <P>This option was new In Netpbm 10.3 (June 2002). Before that, + <b>pbmtoepsi</b> always assumed 72 dots per inch in both directions. + +<DT><B>-bbonly</B> + +<DD> +Only create a boundary box, don't fill it with the image. +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbm.html">pbm</A></B>, + +<B><A HREF="pnmtops.html">pnmtops</A></B>, + +<B><A HREF="pstopnm.html">pstopnm</A></B>, + +<B><A HREF="psidtopgm.html">psidtopgm</A></B>, + +<B><A HREF="pbmtolps.html">pbmtolps</A></B>, + +Postscript language documentation + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 Jef Poskanzer, modified by Doug Crabill 1992 + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoepson.html b/pbmtoepson.html new file mode 100644 index 00000000..7d92d53d --- /dev/null +++ b/pbmtoepson.html @@ -0,0 +1,116 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoepson User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoepson</H1> +Updated: 8 August 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoepson - convert a PBM image into Epson printer graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoepson</B> + +[<b>-dpi=</b><i>n</i>] +[<b>-protocol=</b>{<b>escp9</b>|<B>escp</B>}] +[<b>-adjacent</b>] +[<b>-noadjacent</b>] + +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pbmtoepson</b> reads a PBM image as input and produces a stream of +Epson printer graphics as output. + +<p>The input is from the file identified by the <i>pbmfile</i> argument +or, if you don't specify <i>pbmfile</i>, from Standard Input. Output is +to Standard Output. + +<p>The output is for traditional (ca 1991) Epson 9-wire dot matrix +(sometimes called ESC/P 9-wire) printers or newer ESC/P printers. For +a more modern Epson ESC/P2 type printer, try <b>pbmtoescp2</b>. + +<p>Before Netpbm 10.23 (July 2004), <b>pbmtoepson</b> could not produce +ESC/P streams -- only ESC/P 9-wire. + +<p>The Epson printer protocols are described in +<a href="http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_1.pdf"> +Epson's protocol specification</a>. + +<p>Note that there is no epsontopbm tool - this transformation is one way. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<dl COMPACT> + +<dt><b>-protocol=</b>{<b>escp9</b>|<B>escp</B>} + +<dd>This determines which Epson printer protocol the output uses. +<b>escp9</b> is the older ESC/P 9-pin protocol. <b>escp</b> is the +newer ESC/P protocol. For the even newer <b>ESC/P2</b> protocol, you +have to use <b>pbmtoescp2</b> instead. + +<p>This option was new in Netpbm 10.23 (July 2004). +</dd> + +<dt><b>-dpi=</b><i>n</i> + +<dd>This specifies the horizontal print density in dots per inch. The +protocol allows only certain values: 60, 72, 80, 90, 120, 144, and 240. +Actually, the ESC/P protocol allows a few others, but <b>pbmtoepson</b> +doesn't know how to generate the command streams that use them. + +<p>If you don't specify this, <b>pbmtoepson</b> chooses a horizontal +print density for you consistent with your other options. + +<p>This option was new in Netpbm 10.23 (July 2004). + +<dt><b>-adjacent</b> +<dt><b>-noadjacent</b> + +<dd>These options determine whether the output select "adjacent dot +printing" or not, whatever that is. + +<p>If you don't specify this, <b>pbmtoepson</b> selects adjacent dot +printing unless that is incompatible with your other options. + +<p>This option was new in Netpbm 10.23 (July 2004). + +</dl> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtoescp2.html">pbmtoescp2</A>, +<A HREF="pbm.html">pbm</A>, + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by John Tiller (<A +HREF="mailto:tiller@galois.msfc.nasa.gov">tiller@galois.msfc.nasa.gov</A>) +and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<li><A HREF="#lbAB">NAME</A> +<li><A HREF="#lbAC">SYNOPSIS</A> +<li><A HREF="#lbAD">DESCRIPTION</A> +<li><A HREF="#lbAE">OPTIONS</A> +<li><A HREF="#lbAF">SEE ALSO</A> +<li><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoescp2.html b/pbmtoescp2.html new file mode 100644 index 00000000..340c99f5 --- /dev/null +++ b/pbmtoescp2.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoescp2 User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoescp2</H1> +Updated: 4 April 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtoescp2 - convert a PBM image to a ESC/P2 printer file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoescp2</B> + +[<B>-compress=</B><I>compressionmode</I>] +[<B>-resolution=</B><I>dpi</I>] + +[<I>pbmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<P>Input is read from file <I>pbmfile</I> if specified, otherwise from +stdin. Output is written to stdout. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoescp2</b> reads a PBM image as input. It produces an ESC/P2 +raster graphic printer control stream as output. + +<P> This program creates an output that is printable on Epson printers +that understand the <a +href="http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_1.pdf">ESC/P2 +printer control language</a> (e.g. the Stylus models). For older +Epson 9-pin dot matrix printers, which use the ESC/P protocol, see +<B>pbmtoepson</B>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<dl COMPACT> + +<dt><b>-compress=</b><i>compressionmode</i> + +<dd>This determines the compression mode that <b>pbmtoescp2</b> uses +in its output. Valid values for <I>compressionmode</I> are <b>0</b> +and <b>1</b>. <b>-compress=0</B> results in a printer control stream +with uncompressed raster graphic data. <b>-compress=1</b> results in +a printer control stream with RLE compressed raster graphic data +(RLE means Run Length Encoding). The default is <b>-compress=1</b>. +</dd> + +<dt><b>-resolution=</b><i>dpi</i></dt> + +<dd>This determines the horizontal and the vertical print resolution +set in the printer control stream. Another way of looking at it is a +declaration of what the resolution of the input image is (PBM images +don't have inherent resolution). Valid values for <i>dpi</i> are +<b>180</b> and <b>360</b>. See <a href="#hints">hints</a> for more +information on this. + +<p>The default is <b>-resolution=360</b>. + + +</dd> + +</dl> + +<H2 id="hints">HINTS</H2> + +<P>RLE compresses very well bitmaps of line drawings, preferably +horizontal oriented contents like texts, sheets of music, etc. +However, bitmaps derived from photographs are not ideal for RLE. In +extreme cases, when no byte repetitions occur in the input, the result +will be even slightly bigger than the input. To avoid this, use +compression mode 0 to switch off RLE. + +<p>Each pixel in the input PBM image becomes one dot in the printed +output. Therefore, you must make sure the width and height of the +input are appropriate for the print resolution you choose and the +print area you want. E.g. if you print at 180 dpi and want the image +to print as 8 inches by 10, you must supply a PBM that is 1440 +pixels wide by 1800 pixels high. You can adjust the size of the +input with <b>pamscale</b>, <b>pamstretch</b>, <b>pbmreduce</b>, or +<b>pamenlarge</b>. + + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="escp2topbm.html">escp2topbm</A></B>, +<B><A HREF="pbmtoepson.html">pbmtoepson</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="pamstretch.html">pamstretch</A></B>, +<B><A HREF="pbmreduce.html">pbmreduce</A></B>, +<B><A HREF="pamenlarge.html">pamenlarge</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<P>Copyright (C) 2003 by Ulrich Walcher (<A +HREF="mailto:u.walcher@gmx.de">u.walcher@gmx.de</A>). + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>pbmtoescp2</b> was added to Netpbm in Release 10.18 (August 2003); +it was created around the same time. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#hints">HINTS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> + diff --git a/pbmtog3.html b/pbmtog3.html new file mode 100644 index 00000000..bbe314ba --- /dev/null +++ b/pbmtog3.html @@ -0,0 +1,84 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtog3 User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtog3</H1> +Updated: July 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtog3 - convert a PBM image into a Group 3 fax file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtog3</B> +[<b>-reversebits</b>] +[<b>-nofixedwidth</b>] +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtog3</b> reads a PBM image as input and produces a Group 3 +fax file as output. + +<A NAME="options"></A> +<H2>OPTIONS</H2> +<dl> +<dt><b>-reversebits</b> + +<dd>This option causes the output to have the bits in every byte +reversed so the least signficant bit becomes the most signficant bit. +Apparently, there is some ambiguity in transmission protocols so that +the bits get reversed on transmission, and this compensates for that. +If you get a whole bunch of "bad code word" messages when you try to +read the G3 file (e.g. with <b>g3topbm</b>, try using this option. +Note that the output is not G3 when you use this option. + +<dt><b>-nofixedwidth</b> + +<dd>Most fax machines expect the image to be 1728 columns wide, so +<b>pbmtog3</b> cuts the output to this width by default. If you want to +keep the width of the original image, use this option. + +<p>This option was new in Netpbm 10.6 (July 2002). Before that, +<b>pbmtog3</b> always kept the width of the original image. + +</dl> + +<A NAME="lbAE"> </A> +<H2>REFERENCES</H2> + +<p>The standard for Group 3 fax is defined in CCITT Recommendation T.4. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="g3topbm.html">g3topbm</A>, +<A HREF="pbm.html">pbm</A> + + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Paul Haeberli <<A +HREF="mailto:paul@manray.sgi.com">paul@manray.sgi.com</A>>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">REFERENCES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtogem.html b/pbmtogem.html new file mode 100644 index 00000000..f92e81a0 --- /dev/null +++ b/pbmtogem.html @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtogem User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtogem</H1> +Updated: 11 July 1992 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtogem - convert a PBM image into a GEM .img file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtogem</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtogem</b> reads a PBM image as input and produces a +compressed GEM .img file as output. + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +pbmtogem does not support compression of repeated lines + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="gemtopbm.html">gemtopbm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">BUGS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtogo.html b/pbmtogo.html new file mode 100644 index 00000000..59c4ac9c --- /dev/null +++ b/pbmtogo.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtogo User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtogo</H1> +Updated: 24 November 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtogo - convert a PBM image into compressed GraphOn graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtogo</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtogo</b> reads a PBM image as input and produces 2D +compressed GraphOn graphics as output. + +<p>Be sure to set up your GraphOn with the following modes: 8 bits / +no parity; obeys no XON/XOFF; NULs are accepted. These are all on the +Comm menu. Also, remember to turn off tty post processing. Note that +there is no gotopbm tool. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988, 1989 by Jef Poskanzer, Michael Haberler, and Bo Thide'. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoibm23xx.html b/pbmtoibm23xx.html new file mode 100644 index 00000000..1812de5e --- /dev/null +++ b/pbmtoibm23xx.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoibm23xx User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoibm23xx</H1> +Updated: October 16, 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +pbmtoibm23xx - convert a PBM image to IBM 23XX printer stream + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pbmtoibm23xxx</B> +[<b>-xres=</b><i>dpi</i>] +[<b>-yres=</b><i>dpi</i>] +[<I>pbmfile</I> ...] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoibm23xx</b> reads one or more PBM files as input and +writes an IBM 23XX printer command stream to generate all the images in +all the files to Standard Output. + +<p>If you don't specify any file names, <b>pbmtoibm23xx</b> reads from +Standard Input. + +<H2 id="options">OPTIONS</H2> +<dl> +<dt><b>-xres=</b><i>dpi</i> + +<dd>This option specifies the horizontal resolution in dots per inch. +Valid values are 60, 120, and 240. + +<dt><b>-yres=</b><i>dpi</i> + +<dd>This option specifies the vertical resolution in dots per inch. +Valid values are 60, 120, and 240. + +<dt><b>-slow</b> + +<dd> +Use the slower printing mode where two modes with the same resolution +are available. This usually produces better quality prints. This +affects only modes with horizontal resolution 120, but might affect +other modes in future versions of the program. + +</dl> + +<h2 id="limitations">LIMITATIONS</h2> + +<p>There are probably better ways to control the IBM 23XX printers. Let +me know if you find any. + +<h2 id="history">HISTORY</h2> + +<p><b>pbmtoibm23xx</b> was new in Netpbm 10.25 (October 2004). + +<H2 id="seealso">SEE ALSO</H2> + + +<A HREF="pbm.html">pbm</A>, +Ghostscript (<b>gs</b>). + +<H2 id="author">AUTHOR</H2> + +<p>Copyright (C) 2004 Jorrit Fahlke <jorrit@jorrit.de>. Copying +policy: GNU GPL version 2 + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#limitations">LIMITATIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoicon.html b/pbmtoicon.html new file mode 100644 index 00000000..11959f98 --- /dev/null +++ b/pbmtoicon.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoicon User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoicon</H1> +Updated: 31 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtoicon - convert a PBM image into a Sun icon + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoicon</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pbmtoicon</b> reads a PBM image as input and produces a Sun icon +as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="icontopbm.html">icontopbm</A>, +<A HREF="pbm.html">pbm</A> +<A NAME="lbAF"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtolj.html b/pbmtolj.html new file mode 100644 index 00000000..23e9210a --- /dev/null +++ b/pbmtolj.html @@ -0,0 +1,125 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtolj User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtolj</H1> +Updated: 23 April 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtolj - convert a PBM image to HP LaserJet format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtolj</B> +[<B>-resolution</B> <I>N</I>] +[<B>-float</B>] +[<B>-noreset</B>] +[<B>-packbits</B>] +[<B>-delta</B>] +[<B>-compress</B>] +[<I>pbmfile</I>] +[<B>-copies</B> <I>N</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtolj</b> reads a PBM image as input and produces HP LaserJet +data as output. You can send this data to a LaserJet or DeskJet printer +(at least some of them). + +<p>Each pixel in the input PBM image becomes one dot in the printed +output. Therefore, you must make sure the width and height of the +input are appropriate for the print resolution you choose and the +print area you want. E.g. if you print at 300 dpi and want the image +to print as 8 inches by 10, you must supply a PBM that is 2400 +pixels wide by 3000 pixels high. You can adjust the size of the +input with <b>pamscale</b>, <b>pamstretch</b>, <b>pbmreduce</b>, or +<b>pamenlarge</b>. + +<p>The input may be a multi-image PBM stream. Each input image +becomes a page of output. But before Netpbm 10.28 (June 2005), images +after the first one are ignored. + +<p>Note that there is no ljtopbm tool. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-resolution</B> + +<DD>Specifies the resolution of the output device, in dpi. Another +way to look at this is as a declaration of the resolution of the input +image (PBM images don't have inherent resolution). Typical values are +75, 100, 150, 300, and 600. The default is 75. + +<DT><B>-float</B> + +<DD>Suppresses positioning commands. By default, <b>pbmtolj</b> +places the sequence <I>ESC & l 0 E</I> in the output, which means +to force the top margin to zero. With <b>-float</b>, <b>pbmtolj</b> +omits that command. + +<DT><B>-noreset</B> + +<DD>Prevents pbmtolj from writing the reset sequences to the beginning +and end of the output file. + +<DT><B>-packbits</B> + +<DD>Enables use of TIFF packbits compression. + +<DT><B>-delta</B> + +<DD>Enables use of delta-between-rows compression. + +<DT><B>-compress</B> + +<DD>Enables use of both TIFF packbits, and delta-between-rows compression. + +<DT><B>-copies</B> + +<DD>Specifies the the number of copies. The default is 1. This option +controls the "number of copies" printer control; +<B>pbmtolj</B> generates only one copy of the image. + +</DL> + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>, +<a href="pbmtolj.html"><b>ppmtolj.html</b></a>, +<a href="pjtoppm.html"><b>pjtoppm.html</b></a>, +<a href="ppmtopj.html"><b>ppmtopj</b></a>, +<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer and Michael Haberler. +<B>-float</B> and <B>-noreset</B> options added by Wim Lewis. +<B>-delta, -packbits,</B> and <B>-compress</B> options added by Dave +Platt. + +<HR> +<A NAME="index"> </A> +X<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoln03.html b/pbmtoln03.html new file mode 100644 index 00000000..99f0ff61 --- /dev/null +++ b/pbmtoln03.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoln03 User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoln03</H1> +Updated: 7 May 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoln03 - convert PBM image to DEC LN03+ Sixel output + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoln03</B> +[<B>-rltbf</B>] +<I>pbmfile</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoln03</b> reads a PBM image as input and produces a DEC +LN03+ Sixel output file. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-l nn</B> + +<DD>Use "nn" as value for left margin (default 0). + +<DT><B>-r nn</B> + +<DD>Use "nn" as value for right margin (default 2400). + +<DT><B>-t nn</B> + +<DD>Use "nn" as value for top margin (default 0). + +<DT><B>-b nn</B> + +<DD>Use "nn" as value for bottom margin (default 3400). + +<DT><B>-f nn</B> + +<DD>Use "nn" as value for form length (default 3400). + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Tim Cook, 26 Feb 1992 + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtolps.html b/pbmtolps.html new file mode 100644 index 00000000..cd3cb746 --- /dev/null +++ b/pbmtolps.html @@ -0,0 +1,62 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtolps User Manual</TITLE></HEAD> +<BODY> + +<H1>pbmtolps</H1> +Updated: 12 Dec 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtolps - convert PBM image to PostScript + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>pbmtolps</b> +[<b>-dpi</b> <i>n</i>] +[<i>pbmfile</i>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtolps</b> reads a PBM image as input and outputs PostScript. +The output Postscript uses lines instead of the image operator to +generate a (device dependent) picture which will be imaged much +faster. + +<P>The Postscript path length is constrained to be less that 1000 +points so that no limits are overrun on the Apple Laserwriter and +(presumably) no other printers. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmtops.html">pnmtops</A></B>, +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>, +<B><A HREF="psidtopgm.html">psidtopgm</A></B>, +<B>gs</B>, +<B><A HREF="pbm.html">pbm</A></B>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +George Phillips <<A +HREF="mailto:phillips@cs.ubc.ca">phillips@cs.ubc.ca</A>> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtomacp.html b/pbmtomacp.html new file mode 100644 index 00000000..fb4570f9 --- /dev/null +++ b/pbmtomacp.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtomacp User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtomacp</H1> +Updated: 31 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtomacp - convert a PBM image into a MacPaint file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtomacp</B> +[<B>-l</B> <I>left</I>] + +[<B>-r</B> <I>right</I>] + +[<B>-b</B> <I>bottom</I>] + +[<B>-t</B> <I>top</I>] + +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtomacp</b> reads a PBM image as input and produces a MacPaint +file as output. + +<p>If you do not specify <i>pbmfile</i>, <b>pbmtomacp</b> uses Standard Input. + +<P> The generated file is only the data fork of a picture. You will +need a program such as <B>mcvert</B> to generate a Macbinary or a +BinHex file that contains the necessary information to identify the +file as a PNTG file to MacOS. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P> <b>-l</b>, <b>-r</b>, <b>-b</b>, and <b>-t</b> let you define a +square into the pbm file, that must be converted. Default is the +whole file. If the file is too large for a MacPaint-file, the bitmap +is cut to fit from ( left, top ). + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtopict.html">ppmtopict</A>, +<A HREF="macptopbm.html">macptopbm</A>, +<A HREF="pbm.html">pbm</A>, +<b>mcvert</b> documentation + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Douwe van der Schaaf (...!mcvax!uvapsy!vdschaaf). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtomatrixorbital.html b/pbmtomatrixorbital.html new file mode 100644 index 00000000..575ad45c --- /dev/null +++ b/pbmtomatrixorbital.html @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtomatrixorbital User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtomatrixorbital</H1> +Updated: 06 September 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="name"> </A> +<H2>NAME</H2> +pbmtomatrixorbital - convert a PBM image to a Matrix Orbital LCD image + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtomatrixorbital</B> + +[<I>pbmfile</I>] + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pbmtomatrixorbital</b> reads a PBM image as input and produces as output +an image that can be uploaded to a Matrix Orbital LCD display. + +<p>You can upload the image to the LCD via the serial port to which it +is connected with the program <b>mo-upload.pl</b>, which you can get from +the package <b>pbmtomatrixorbital</b>. Yes, the package is the same name +as this Netpbm program, and it contains its own <b>pbmtomatrixorbital</b> +program which is slightly different from this one because it is not part +of the Netpbm package. + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>pbmtomatrixorbital</b> was added to Netpbm in Release 10.18 +(September 2003). + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtox10bm.html">pbmtox10bm</A>, +<A HREF="xbmtopbm.html">xbmtopbm</A>, +<A HREF="pbm.html">pbm</A> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtomda.html b/pbmtomda.html new file mode 100644 index 00000000..f016bdec --- /dev/null +++ b/pbmtomda.html @@ -0,0 +1,84 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtomda User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtomda</H1> +Updated: 3 June 1999 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtomda - convert a PBM image to a Microdesign .mda + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtomda</B> + +[<B>-d</B>] +[<B>-i</B>] +[<B>--</B>] + +[<i>pbmfile</i>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtomda</b> reads a PBM image as input and +produces a MicroDesign 2 area file (.MDA) as output. + +<p>If you do not specify <i>pbmfile</i>, <b>pbmtomda</b> uses Standard Input. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-d</B> + +<DD> +Halve the height of the output file, to compensate for the aspect +ratio used in MicroDesign files. +<DT><B>-i</B> + +<DD> +Invert the colors used. +<DT><B>--</B> + +<DD> +End of options (use this if the filename starts with "-") +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +There's no way to produce files in MicroDesign 3 format. MD3 itself and +<A HREF="mdatopbm.html">mdatopbm</A> can read files in either format. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="mdatopbm.html">mdatopbm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1999 John Elliott <<A HREF="mailto:jce@seasip.demon.co.uk">jce@seasip.demon.co.uk</A>>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtomgr.html b/pbmtomgr.html new file mode 100644 index 00000000..ed6e410c --- /dev/null +++ b/pbmtomgr.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtomgr User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtomgr</H1> +Updated: 06 November 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pbmtomgr - convert a PBM image into a MGR bitmap + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pbmtomgr</B> + +[<I>pbmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtomgr</b> reads a PBM image as input and produces a MGR +bitmap as output. + +<p><a +href="ftp://sunsite.unc.edu/pub/Linux/apps/MGR/!INDEX.html">MGR</a> is +a window manager that is a smaller alternative to the X Windows +System. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="mgrtopbm.html">mgrtopbm</A>, +<A HREF="pbm.html">pbm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtomrf.html b/pbmtomrf.html new file mode 100644 index 00000000..530a2013 --- /dev/null +++ b/pbmtomrf.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtomrf User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtomrf</H1> +Updated: 1991 +<BR> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtomrf - convert a PBM format image to MRF + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtomrf</B> + +[<I>pbmfile</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtomrf</b> converts a PBM image to MRF format. + +<P>For more information about mrf, see <A HREF="mrf.html">the MRF +specification</A>. + +<p><b>pbmtomrf</b> takes the PBM image from the file named by the +<i>input.pbm</i> argument, or Standard Input if you don't specify +<i>input.pbm</i>. The output goes to Standard Output. + +<P>The compression of the edges of pictures with width and/or height +not an exact multiple of 64 is not optimal in all cases. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +none. + + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Russell Marks. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmtomrf.html">pbmtomrf</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="mrf.html">mrf</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtonokia.html b/pbmtonokia.html new file mode 100644 index 00000000..431eb93c --- /dev/null +++ b/pbmtonokia.html @@ -0,0 +1,133 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtonokia User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtonokia</H1> +Updated: 14 September 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pbmtonokia - convert a PBM image to Nokia Smart Messaging Formats + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pbmtonokia</b> +[ +<b>-fmt</b> + { + <B>HEX_NOL</B>, + <B>HEX_NGG</B>, + <B>HEX_NPM</B>, + <B>NOL</B>, + <B>NGG</B>, + <B>NPM</B> + } +] +<br> +[<B>-net</b> <i>networkcode</i>] +[<b>-txt</b> <i>text</i>] +[<I>pbmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtonokia</b> reads a PBM image as input and produces a Nokia +Smart Messaging (hexcode, .nok, .ngg) file as output. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-fmt</B> +<DD> +Specifies the output format (default is HEX_NOL). + +<dl> +<DT><b>HEX_NOL</b> +<DD> +Nokia Operator Logo as (uploadable) hexcode. +Use option -net to specify network code. + +<DT><b>HEX_NGG</b> +<DD> +Nokia Group Graphic as (uploadable) hexcode. + +<DT><b>HEX_NPM</b> +<DD> +Nokia Picture Message as (uploadable) hexcode. +Use option <b>-txt</b> to specify an optional text message. + +<DT><b>NOL</b> +<DD>Nokia Operator Logo as .nol format. This is editable by +the Group-Graphic Editor from Kessler Wireless Design (<A +HREF="http://www.kessler-design.com">www.kessler-design.com</A>) + +<DT><b>NGG</b> + +<DD>Nokia Group Graphic as .ngg format. This is editable by the +Group-Graphic Editor from Kessler Wireless Design (<A +HREF="http://www.kessler-design.com">www.kessler-design.com</A>) + +<DT><b>NPM</b> + +<DD>Nokia Picture Message as .npm format. This is editable by the +Picture-Message Editor from Kessler Wireless Design (<A +HREF="http://www.kessler-design.com">www.kessler-design.com</A>) + +<p>This option was new in Netpbm 10.36 (October 2006). + +</dl> + +<DT><B>-net</B> + +<DD>Specifies the 6 hex-digit operator network code for Operator +Logos (Default is 62F210 = D1,Germany). + +<DT><B>-txt</B> + +<DD> +Specifies the text message for Picture Messages. The maximum size +text message allowed by the format is 120 characters. + +<p>Default is no text message. + +</DL> + +<H2 id="limitations">LIMITATIONS</H2> + +Currently limited to rows<=255 and columns<=255. Generates only +black and white graphics, not animated. + +<H2 id="seealso">SEE ALSO</H2> + +<ul> +<li><B><A HREF="pbm.html">pbm</A></B>, + +<li><B>Nokia Smart Messaging Specification (<A +HREF="http://forum.nokia.com)">http://forum.nokia.com)</A></B> + +<li><a href="http://www.kessler-design.com/wireless/samples.html"> +http://www.kessler-design.com/wireless/samples.html</a> + +<li><a href="http://www.gnokii.org">Gnokii</a> + +</ul> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 2001 Tim Ruehsen <<A +HREF="mailto:tim.ruehsen@openmediasystem.de">tim.ruehsen@openmediasystem.de</A>>. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#limitations">LIMITATIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtopgm.html b/pbmtopgm.html new file mode 100644 index 00000000..f68dfcad --- /dev/null +++ b/pbmtopgm.html @@ -0,0 +1,84 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtopgm User Manual</TITLE></HEAD> +<BODY> + +<H1>pbmtopgm</H1> +<p>Updated: 05 Feb 2003 + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtopgm - convert PBM image to PGM by averaging areas + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtopgm </B> +<I>width</I> +<I>height</I> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pbmtopgm</B> reads a PBM image as input. It outputs a PGM image +in which each pixel's gray level is the average of the surrounding +black and white input pixels. The surrounding area is a rectangle of +<I>width</I> by <I>height</I> pixels. + +<P>In other words, this is a convolution. <B>pbmtopgm</B> is similar +to a special case of <B>pnmconvol</B>. + +<P>You may need a <B>pnmsmooth</B> step after <B>pbmtopgm</B>. + +<P><B>pbmtopgm</B> has the effect of anti-aliasing bitmaps which +contain distinct line features. + +<P><B>pbmtopgm</B> works best with odd sample width and heights. + +<P>You don't need <B>pbmtopgm</B> just to use a PGM program on a PBM +image. Any PGM program (assuming it uses the Netpbm libraries to read +the PGM input) takes PBM input as if it were PGM, with only the +mininum and maximum gray levels. So unless your convolution rectangle +is bigger than one pixel, you're not gaining anything with a +<B>pbmtopgm</B> step. + +<p>The opposite transformation (which would turn a PGM into a PBM) is +dithering. See <b>pamditherbw</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamditherbw.html">pamditherbw</A></B>, +<B><A HREF="pnmconvol.html">pnmconvol</A></B>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pgm.html">pgm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<P>Copyright (C) 1990 by Angus Duggan. +<P>Copyright (C) 1989 by Jef Poskanzer. + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. This software is provided "as is" +without express or implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtopi3.html b/pbmtopi3.html new file mode 100644 index 00000000..5a7b153b --- /dev/null +++ b/pbmtopi3.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtopi3 User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtopi3</H1> +Updated: 11 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtopi3 - convert a PBM image into an Atari Degas .pi3 file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtopi3</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtopi3</b> reads a PBM image as input and produces an Atari +Degas .pi3 file as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pi3topbm.html">pi3topbm</A>, +<A HREF="ppmtopi1.html">ppmtopi1</A>, +<A HREF="pi1toppm.html">pi1toppm</A> +<A HREF="pbm.html">pbm</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtopk.html b/pbmtopk.html new file mode 100644 index 00000000..744ffd1c --- /dev/null +++ b/pbmtopk.html @@ -0,0 +1,161 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtopk User Manual</TITLE> +</HEAD><BODY> +<H1>pbmtopk</H1> +Updated: 6 August 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtopk - convert a PBM image into a packed (PK) format font +<A NAME="lbAC"> </A> + +<H2>SYNOPSIS</H2> + +<b>pbmtopk</b> +<i>pkfile</i>[<b>.pk</b>] +<i>tfmfile</i>[<b>.tfm</b>] +<i>resolution</i> +[<b>-s</b> <i>designsize</i>] +[<b>-p</b> <i>num</i> <i>param</i>...] +[<b>-C</b> <i>codingscheme</i>] +[<b>-F</b> <i>family</i>] +[<b>-f</b> <i>optfile</i>] +[<b>-c</b> <i>num</i>] +[<b>-W</b> <i>width</i>] +[<b>-H</b> <i>height</i>] +[<b>-D</b> <i>depth</i>] +[<b>-I</b> <i>ital</i>] +[<b>-h</b> <i>horiz</I>] +[<b>-v</b> <i>vert</i>] +[<b>-x</b> <i>xoff</i>] +[<b>-y</b> <i>yoff</i>] +[<i>pbmfile</i> ...] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtopk</b> reads PBM images as input and produces a packed (PK) +font file and a TFM (TeX font metric) file as output. The resolution +parameter indicates the resolution of the font, in dots per inch. If +the filename "-" is used for any of the filenames, +<b>pbmtopk</b> uses Standard Input or Standard Output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><b>-s</b> <i>designsize</i> +<DD> +Sets the design size of the font, in TeX's points (72.27pt to the inch). The +default design size is 1. The TFM parameters are given as multiples of the +design size. + +<DT><b>-p</b> <i>num</i> <i>param</i>... + +<DD>Sets the first num font parameters for the font. The first seven +parameters are the slant, interword spacing, interword space +stretchability, interword space shrinkability, x-height, quad width, +and post-sentence extra space of the font. Math and symbol fonts may +have more parameters; see The TeXbook for a list of these. Reasonable +default values are chosen for parameters which are not specified. + +<DT><b>-C</b> <i>codingscheme</i> + +<DD> +Sets the coding scheme comment in the TFM file. + +<DT><b>-F</b> <i>family</i><DD> +Sets the font family comment in the TFM file. + +<DT><b>-f</b> <i>optfile</i> + +<DD>Reads the file optfile, which should contain a lines of the form: + +<PRE> + filename xoff yoff horiz vert width height depth ital +</PRE> + + +<P>The PBM files specified by the filename parameters are inserted +consecutively in the font with the specified attributes. If any of the +attributes are omitted, or replaced with "*", a default +value will be calculated from the size of the bitmap. The settings of +the -W, -H, -D, -I, -h, -v, -x, and -y options do not affected +characters created in this way. The character number can be changed +by including a line starting with "=", followed by the new +number. Lines beginning with "%" or "#" are +ignored. + +<DT><B>-c</B> <I>num</I> +<DD>Sets the character number of the next bitmap encountered to num. + +<DT><B>-W</B> <I>width</I> + +<DD>Sets the TFM width of the next character to width (in design size +multiples). + +<DT><B>-H</B> <I>height</I> + +<DD>Sets the TFM height of the next character to height (in design +size multiples). + +<DT><B>-D</B> <I>depth</I> + +<DD>Sets the TFM depth of the next character to depth (in design size +multiples). + +<DT><B>-I</B> <I>ital</I> + +<DD>Sets the italic correction of the next character to ital (in +design size multiples). + +<DT><B>-h</B> <I>horiz</I> + +<DD>Sets the horizontal escapement of the next character to horiz (in +pixels). + +<DT><B>-v</B> <I>vert</I> + +<DD>Sets the vertical escapement of the next character to vert (in pixels). + +<DT><B>-x</B> <I>xoff</I> + +<DD>Sets the horizontal offset of the next character to xoff (in +pixels). + +<DT><B>-y</B> <I>yoff</I> + +<DD>Sets the vertical offset of the next character to yoff (in pixels, +from the top row). + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pktopbm.html">pktopbm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<P>Adapted from Tom Rokicki's pxtopk by Angus Duggan <<A +HREF="mailto:ajcd@dcs.ed.ac.uk">ajcd@dcs.ed.ac.uk</A>>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoplot.html b/pbmtoplot.html new file mode 100644 index 00000000..97fe341a --- /dev/null +++ b/pbmtoplot.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoplot User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoplot</H1> +Updated: 1 September 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoplot - convert a PBM image into a Unix 'plot' file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoplot</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoplot</b> reads a PBM image as input and produces a Unix +<B>plot</B> file as output. + +<P> +Note that there is no plottopbm tool - this transformation is one-way. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A>, +<b>plot</b>(1) + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Arthur David Olson. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoppa.html b/pbmtoppa.html new file mode 100644 index 00000000..ab605b29 --- /dev/null +++ b/pbmtoppa.html @@ -0,0 +1,317 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoppa User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoppa</H1> +Updated: 01 May 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoppa - convert PBM image to HP Printer Performance Architecture (PPA) + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoppa</B> +[<I>pbm_file</I> +[<I>ppa_file</I>]] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pbmtoppa</B> converts page images in PBM format to Hewlett +Packard's PPA (Printer Performance Architecture) format, which is the +data stream format expected by some HP "Windows-only" +printers including the HP Deskjet 820C series, the HP DeskJet 720 +series, and the HP DeskJet 1000 series. + +<P><I>pbm_file</I> is the file specification of the input file or +<B>-</B> for Standard Input. The default is Standard Input. + +<P>The input file contains one or more PBM images, with each one +being a single page. Each image must have the exact dimensions of a +page (at 600 pixels per inch in both directions). Significantly, this +is the format that Ghostscript produces. + +<P><I>ppa_file</I> is the file specification of the output file or +<B>-</B> for Standard Output. The default is Standard Output. + +<P>To print Postscript on an HP PPA printer, just use Ghostscript with +the <B>pbmraw</B> (or <B>pbm</B>) device driver. + +<P>You can generate a test page for use with this program with +<B>pbmpage</B>. + +<P>You can also set up a printer filter so you can submit PBM input +directly to your print queue. See the documentation for your print +spooler for information on how to do that, or look in hp820install.doc +for an example lpd print filter for Postscript and text files. + +<P>Sometimes, <B>pbmtoppa</B> generates a file which the printer will +not print (because <B>pbmtoppa</B>'s input is unprintable). When this +happens, all three lights blink to signal the error. This is usually +because there is material outside of the printer's printable area. To +make the file print, increase the margins via <B>pbmtoppa</B> options +or a configuration file. See <a href="#calibration">the section on +calibration </a> below. + +<h3>About PPA</h3> + +<p>The PPA printer language is a far lower level language than most. +When you use a PPA printer, most of the processing that a conventional +printer does is done instead on the computer end of the wire. In +particular, <b>pbmtoppa</b> has to do "swath cutting," and +"sweep formatting," which other printers do themselves. +There is very little intelligence inside a PPA printer; +<b>pbmtoppa</b> generates direct controls for the printer's hardware. + +<p>The design goal of PPA was to reduce the cost of a printer by exploiting +computing resources already present in the computer that requests the +printing. CPU power, ROM, and RAM requirements inside the printer are all +reduced compared to a conventional printer. + +<p>PPA was new in 1997. It was predated by Hewlett Packard's PCL +(Printer Control Language) language. HP manufactured PPA printers for only +a few years, and no one else ever did. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-v</B> <I>version</I> + +<DD> +printer version (720, 820, or 1000) + +<DT><B>-x</B> <I>xoff</I> + +<DD> +horizontal offset adjustment in 1/600 inches. + +<DT><B>-y</B> <I>yoff</I> + +<DD> +vertical offset adjustment in 1/600 inches. + +<DT><B>-t</B> <I>topmarg</I> + +<DD> +top margin in 1/600 inches (default: 150 = 0.25 inch) + +<DT><B>-l</B> <I>leftmarg</I> + +<DD> +left margin in 1/600 inches (default: 150 = 0.25 inch) + +<DT><B>-r</B> <I>rightmarg</I> + +<DD> +right margin in 1/600 inches (default: 150 = 0.25 inch) + +<DT><B>-b</B> <I>botmarg</I> + +<DD> +bottom margin in 1/600 inches (default: 150 = 0.25 inch) + +<DT><B>-s</B> <I>paper</I> + +<DD>paper size: <B>us</B> or <B>a4</B>. Default is <B>us</B>. + +<dt><b>-d</b> <i>dpi</i> +<dd> +Print resolution in dots per inch. + +<DT><B>-f</B> <I>cfgfile</I> + +<DD>Read parameters from the configuration file named <I>cfgfile</I>. +See <a href="#configfile">CONFIGURATION FILES</a> + +</DL> + +<P>The offset adjustments you specify with <B>-x</B> and <B>-y</B> +accumulate. I.e. if you specify them multiple times, the total offset +adjustment is the sum of the adjustments you specify. <b>-x 60 -x 120</b> +is the same as <b>-x 180</b>. + +<P>The <B>-v</B> option undoes any preceding <b>-x</b> and <b>-y</b> +options, leaving the horizontal and vertical adjustments their +default values. + + +<H2 id="configfile">CONFIGURATION FILES</H2> + +<P>You can use a configuration file to specify parameters rather than +use invocation options. <B>pbmtoppa</B> processes the file +<b>/etc/pbmtoppa.conf</b>, if it exists, before processing any +options. It then processes each configuration file named by a +<B>-f</B> option in order, applying the parameters from the +configuration file as if they were invocation options used in the +place of the <B>-f</B> option. + +<P>Configuration files have the following format: + +<PRE> +<B>#</B><I>Comment</I> +<I>key1</I> <I>value1</I> +<I>key2</I> <I>value2</I> +[etc.] +</PRE> + +<P>Valid <I>key</I>s are <B>version</B>, <B>xoffset</B>, +<B>yoffset</B>, <B>topmargin</B>, <B>leftmargin</B>, +<B>rightmargin</B>, <B>bottommargin</B>, <B>papersize</B>, or any +non-null prefix of these words. Valid values are the same as with the +corresponding invocation parameters. + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<P>Print a test pattern: +<PRE> +<B>pbmpage | pbmppa >/dev/lp1</B> +</pre> + +<P> +Print three pages: +<PRE> +<B>cat page1.pbm page2.pbm page3.pbm | pbmppa >/dev/lp1</B> +</pre> +<P> +Print the Postscript file myfile.ps: +<PRE> +gs -sDEVICE=rawpbm -q -dNOPAUSE -r600 \ + -sOutputFile=- myfile.ps ;\ +| pbmtoppa | lpr +</pre> + +<A NAME="calibration"> </A> +<H2>CALIBRATION</H2> + +<p>To be able to print successfully and properly, you need to tell +<B>pbmtoppa</B> an X and a Y offset appropriate for your printer to +use when generating the page. You can specify these offsets with the +<B>-x</B> and <B>-y</B> invocation options or with the <B>xoff</B> and +<B>yoff</B> parameters in a <B>pbmtoppa</B> configuration file. + +<P>To determine the correct offsets, use the <B>pbmpage</B> program. + +<P>If while trying to do this calibration, the printer refuses to +print a page, but just blinks all three lights, specify large margins +(e.g. 600 pixels -- one inch) via <B>pbmpage</B> invocation options +while doing the calibration. + +<P>For example: +<PRE> +<B>pbmpage | pbmtoppa >/dev/lp1</B> +</pre> +or +<pre> +<B>pbmpage | pbmtoppa | lpr -l</B> +</pre> + +(if your printer filter recognizes the '-l' (direct output) parameter). + +<P>In the test pattern, the grid is marked off in pixel coordinate +numbers. Unfortunately, these coordinates are probably cut off before +the edge of the paper. You'll have to use a ruler to estimate the +pixel coordinate of the left and top edges of the actual sheet of +paper (should be within +/- 300, may be negative; there are 600 pixels +per inch). + +<P>Add these coordinates to the X and Y offsets by either editing the +configuration file or using the <B>-x </B> and <B>-y</B> command-line +parameters. + +<P>When <B>pbmtoppa</B> is properly calibrated, the center mark should +be in the center of the paper. Also, the margins should be able to be +as small as 1/4 inch without causing the printer to choke with +'blinking lights syndrome'. + +<A NAME="lbAH"> </A> +<H2>REDHAT LINUX INSTALLATION</H2> + +<P>RedHat users may find the following tip from Panayotis Vryonis +<<A HREF="mailto:vrypan@hol.gr">vrypan@hol.gr</A>> helpful. The +same should work for the 820 and 1000, but it hasn't been tested. +Also, use the pbmraw GSDriver if you have it; it's faster. + +<P>Here is a tip to intergrate HP720C support in RedHat's printtool: + +<P>Install pbmtoppa. Copy pbmtoppa to /usr/bin. + +<P>Edit "printerdb" (in my system it is found in +/usr/lib/rhs/rhs-printfilters ) and append the following lines: + +<PRE> +----------------------Cut here----------------------- + +StartEntry: DeskJet720C + GSDriver: pbm + Description: {HP DeskJet 720C} + About: { \ + This driver supports the HP DeskJet 720C \ + inkjet printer. \ + It does does not support color printing. \ + IMPORTANT! Insert \ + "- | pbm2ppa -" \ + in the "Extra GS Otions" field.\ + } + + Resolution: {600} {600} {} + +EndEntry +---------------------------------------------------- +</pre> + +<P>Now you can add an HP720C printer just like any other, using +printtool. + +<A NAME="lbAI"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmpage.html">pbmpage</A></B>, +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<P><B>pnm2ppa</B> is not part of Netpbm, but does the same things as +<B>pbmtoppa</B> except it also works with color and has lots more +features. See <<A +HREF="http://sourceforge.net/projects/pnm2ppa">http://sourceforge.net/projects/pnm2ppa</A>>. + +<P>The file INSTALL-MORE in the pbmtoppa directory of the Netpbm +source code contains detailed instructions on setting up a system to +use pbmtoppa to allow convenient printing on HP PPA printers. It was +written by Michael Buehlmann. + +<P>For information about the PPA protocol and the separately +distributed pbm2ppa program from which <B>pbmtoppa</B> was derived, +see <<A +HREF="http://www.httptech.com/ppa">http://www.httptech.com/ppa</A>>. + +<A NAME="lbAJ"> </A> +<H2>AUTHOR</H2> + +<p>Tim Norman. Copyright (C) 1998. Licensed under GNU Public License + +<P>Manual page by Bryan Henderson, May 2000. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#configfile">CONFIGURATION FILES</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#calibration">CALIBRATION</A> +<LI><A HREF="#lbAH">REDHAT LINUX INSTALLATION</A> +<LI><A HREF="#lbAI">SEE ALSO</A> +<LI><A HREF="#lbAJ">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtopsg3.html b/pbmtopsg3.html new file mode 100644 index 00000000..fff9b889 --- /dev/null +++ b/pbmtopsg3.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtopsg3 User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtopsg3</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtopsg3 - convert PBM images to Postscript with G3 fax compression + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtopsg3</B> +[<B>--title=</B><I>title</I>] +[<B>--dpi=</B><I>dpi</I>] +[<I>filespec</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pbmtopsg3</b> converts the PBM images in the input PBM file to +pages in a Postscript file encoded with G3 fax compression. + +<P>If you don't specify <I>filespec</I>, the input is from Standard +Input. + +<P>Remember that you can create a multi-image PBM file simply by +concatenating single-image PBM files, so if each page is in a +different file, you might do: + +<pre> +cat faxpage* | pbmtopsg3 >fax.ps +</pre> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-title</B> + +<DD>The Postscript title value. Default is no title. + +<DT><B>-dpi</B> + +<DD>The resolution of the Postscript output. Default is 72 dpi. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmtops.html">pnmtops</A></B>, +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B>gs</b>(1), +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B><A HREF="pbmtolps.html">pbmtolps</A></B>, +<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>, +<B><A HREF="pbmtog3.html">pbmtog3</A></B>, +<B><A HREF="g3topbm.html">g3topbm</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoptx.html b/pbmtoptx.html new file mode 100644 index 00000000..2614d95b --- /dev/null +++ b/pbmtoptx.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoptx User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoptx</H1> +Updated: 31 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtoptx - convert a PBM image into Printronix printer graphics + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoptx</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtoptx</b> reads a PBM image as input and produces a file of +Printronix printer graphics as output. + +<P>Note that there is no ptxtopbm tool - this transformation is one way. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtowbmp.html b/pbmtowbmp.html new file mode 100644 index 00000000..833987fb --- /dev/null +++ b/pbmtowbmp.html @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtowbmp User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtowbmp</H1> +Updated: 19 November 1999 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pbmtowbmp - convert a PBM image to a wireless bitmap (wbmp) file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtowbmp</B> +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pbmtowbmp</b> reads a PBM image as input and +produces a wbmp file as output. + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +<p><b>pbmtowbmp</b> can generate only WBMP type 0. This is the only +type specified in the WAP 1.1 specifications. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="wbmptopbm.html">wbmptopbm</A></B>, + +<B>Wireless Application Environment Specification</B>. + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1999 Terje Sannum <<A HREF="mailto:terje@looplab.com">terje@looplab.com</A>>. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">LIMITATIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtox10bm.html b/pbmtox10bm.html new file mode 100644 index 00000000..7dafb2bf --- /dev/null +++ b/pbmtox10bm.html @@ -0,0 +1,17 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pbmtox10bm User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtox10bm</H1> +<BR> +<p><b>pbmtox10bm</b> was replaced in Netpbm 10.37 (December 2006) by +<b><a href=pbmtoxbm.html>pbmtoxbm</a></b>. + +<P><B>pbmtoxbm</b> with the <b>-x10</b> option is backward compatible +with <b>pbmtox10bm</b>. <b>pbmtoxbm</b> also can generate X11 bitmaps. + +<P>You should not make any new use of <b>pbmtox10bm</b> and if you modify an +existing use, you should upgrade to <b>pbmtoxbm</b>. + +</BODY> +</HTML> diff --git a/pbmtoxbm.html b/pbmtoxbm.html new file mode 100644 index 00000000..256e2679 --- /dev/null +++ b/pbmtoxbm.html @@ -0,0 +1,75 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoxbm User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoxbm</H1> +Updated: 25 October 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pbmtoxbm - convert a PBM image to an X11 bitmap + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pbmtoxbm</B> + +[{<b>-x10</b>|<b>-x11</b>}] + +[<I>pbmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pbmtoxbm</b> reads a PBM image as input and produces an X10 or X11 bitmap +as output. + + +<h2 id="options">OPTIONS</h2> + +<dl> +<dt><b>-x10</b> + +<dd>This option causes <b>pbmtoxbm</b> to generate the X10 version of +XBM. + +<p>You may not specify this with <b>-x11</b>. + +<p>This option was new with Netpbm 10.37 (December 2006). Before that, +use <b>pbmtox10bm</b> instead. + +<dt><b>-x11</b> + +<dd>This option causes <b>pbmtoxbm</b> to generate the X11 version of +XBM. + +<p>You may not specify this with <b>-x10</b>. + +<p>The X11 version is the default, so this option has no effect. + +<p>This option was new with Netpbm 10.37 (December 2006). + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pbmtox10bm.html">pbmtox10bm</A>, +<A HREF="xbmtopbm.html">xbmtopbm</A>, +<A HREF="pbm.html">pbm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtoybm.html b/pbmtoybm.html new file mode 100644 index 00000000..7857a020 --- /dev/null +++ b/pbmtoybm.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtoybm User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtoybm</H1> +Updated: 06 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmtoybm - convert a PBM image into a Bennet Yee "face" file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtoybm</B> + +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pbmtoybm</b> reads a PBM image as input and produces as output a +file acceptable to the <B>face</B> and <B>xbm</B> programs by Bennet +Yee (<A HREF="mailto:bsy+@cs.cmu.edu">bsy+@cs.cmu.edu</A>). + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ybmtopbm.html">ybmtopbm</A>, +<A HREF="pbm.html">pbm</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmtozinc.html b/pbmtozinc.html new file mode 100644 index 00000000..cf336d7b --- /dev/null +++ b/pbmtozinc.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmtozinc User Manual</TITLE></HEAD> +<BODY> +<H1>pbmtozinc</H1> +Updated: 02 November 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmtozinc - convert a PBM image into a Zinc bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmtozinc</B> + +[<I>pbmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmtozinc</b> reads a PBM image as input and produces a bitmap +in the format used by the Zinc Interface Library (ZIL) Version 1.0 as +output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by James Darrell McCauley (<A HREF="mailto:jdm5548@diamond.tamu.edu">jdm5548@diamond.tamu.edu</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pbmupc.html b/pbmupc.html new file mode 100644 index 00000000..f6b9c27e --- /dev/null +++ b/pbmupc.html @@ -0,0 +1,86 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pbmupc User Manual</TITLE></HEAD> +<BODY> +<H1>pbmupc</H1> +Updated: 14 March 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pbmupc - create a Universal Product Code PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pbmupc</B> + +[<B>-s1</B> | <B>-s2</B>] + +<I>type</i> +<i>manufacturer</i> +<i>product</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pbmupc</b> generates an image of a Universal Product Code symbol. +The three arguments are: a one digit product type, a five digit +manufacturer code, and a five digit product code. +For example, "0 72890 00011" is the code for Heineken. + +<P>As presently configured, <b>pbmupc</b> produces an image 230 bits +wide and 175 bits high. The size can be altered by changing the +defines at the beginning of the program, or by running the output +through <B>pamenlarge</B> or <B>pamscale</B>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The <B>-s1</B> and <B>-s2</B> options select the style of UPC to +generate. The default, <B>-s1</B>, looks more or less like this: + +<PRE> + |||||||||||||||| + |||||||||||||||| + |||||||||||||||| + |||||||||||||||| +0||12345||67890||5 +</PRE> + +The other style, <B>-s2</B>, puts the product type digit higher up, +and doesn't display the checksum digit: + +<PRE> + |||||||||||||||| + |||||||||||||||| +0|||||||||||||||| + |||||||||||||||| + ||12345||67890|| +</PRE> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbm.html">pbm</A> +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pc1toppm.html b/pc1toppm.html new file mode 100644 index 00000000..8a6335d5 --- /dev/null +++ b/pc1toppm.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pc1toppm User Manual</TITLE></HEAD> +<BODY> +<H1>pc1toppm</H1> +Updated: 30 April 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pc1toppm - convert an Atari Degas .pc1 into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pc1toppm</B> + +[<I>pc1file</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pc1toppm</b> reads an Atari Degas .pc1 file as input and +produces a PPM image as output. + +<p>The .pc1 format is a compressed (run length encoded) variation on .pi1. + +<A NAME="history"></a> +<h2>HISTORY</h2> +<p><b>pc1toppm</b> was new in Netpbm 10.22 (April 2004) + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="pi1toppm.html">pi1toppm</A>, +<A HREF="pi3topbm.html">pi3topbm</A>, +<A HREF="pbmtopi3.html">pbmtopi3</A> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> + + diff --git a/pcdindex.html b/pcdindex.html new file mode 100644 index 00000000..def152d7 --- /dev/null +++ b/pcdindex.html @@ -0,0 +1,9 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pcdinex Renamed</TITLE></HEAD> + +<body> +The program <B>pcdindex</B> has been renamed <A +HREF="pcdovtoppm.html">pcdovtoppm</A>. +</body> + +</html> diff --git a/pcdovtoppm.html b/pcdovtoppm.html new file mode 100644 index 00000000..8d603f7d --- /dev/null +++ b/pcdovtoppm.html @@ -0,0 +1,114 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pcdovtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>pcdovtoppm</H1> +Updated: 01 June 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pcdovtoppm - create index image for a photo CD + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pcdovtoppm</B> +[<B>-m </B><I>width</I>] +[<B>-s </B><I>size</I>] +[<B>-a </B><I>across</I>] +[<B>-c </B><I>colors</I>] +[<B>-f </B><I>font</I>] +[<B>-b</B>|<B>-w</B>] +[<I>pcdfile</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>This program generates an index image in PPM format for a photo CD, +based on the photo CD overview file. + +<P>You can achieve a similar result with <B>hpcdtoppm -Overview</B> +followed by <B>pnmindex -black</B> on the generated PPM images. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-w</B><I>width</I> + +<DD> +Maximum width of the result image (default: 1152). +<DT><B>-s</B><I>size</I> + +<DD> +Maximum size of each of the images (default: 192). +<DT><B>-a</B><I>across</I> + +<DD> +Maximum number of images across (default: 6). +<DT><B>-c</B><I>colors</I> + +<DD> +Maximum number of colors, or +<B>n</B> + +to mean no quantization +<DT><B>-f</B><I>font</I> + +<DD> +Font to be used for annotation (default: internal font). +<DT><B>-b</B> + +<DD> +Black background color (default). +<DT><B>-w</B> + +<DD> +White background color. + +</DL> + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<PRE> +<B>pcdovtoppm -m 768 -s 96 -f smallfont.pbm overview.pcd > overview.ppm</B> +</prE> + +<PRE> +<B>pcdovtoppm /cdrom/photo_cd/overview.pcd | ppmtojpeg > overview.jpg</B> +</PRE> + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<P>This program was formerly called <b>pcdindex</b>, which did not fit +Netpbm naming conventions. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="hpcdtoppm.html">hpcdtoppm</A></B>, +<B><A HREF="pnmindex.html">pnmindex</A></B>, +<B><A HREF="ppmtojpeg.html">ppmtojpeg</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#history">HISTORY></A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pcxtoppm.html b/pcxtoppm.html new file mode 100644 index 00000000..4b629151 --- /dev/null +++ b/pcxtoppm.html @@ -0,0 +1,97 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pcxtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>pcxtoppm</H1> +Updated: 19 April 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pcxtoppm - convert a PCX file into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pcxtoppm</B> +[<B>-stdpalette</B>] +[<B>-verbose</B>] +[<I>pcxfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pcxtoppm</b> reads a PCX file as input and produces a PPM image +as output. + +<p><b>pcxtoppm</b> recognizes the following PCX types: + +<UL COMPACT> +<LI>Colormapped files with 2-16 colors. + +<P>"Packed pixel" format (1, 2 or 4 bits/pixel, 1 plane) or +bitplane format (1 bit/pixel, 1-4 planes). The program uses a +predefined standard palette if the image does not provide one. +"Does not provide one" means the palette in the PCX header is +completely black. + +<LI>Colormapped files with 256 colors. + +<P>8 bits/pixel, 1 plane, colormap at the end of the file. + +<LI>24bit truecolor files. + +<P>24bit RGB: 8 bits/pixel, 3 planes. + +<LI>32bit truecolor files. + +<P>24bit RGB + 8bit intensity: 8 bits/pixel, 4 planes. + +</UL> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-stdpalette</B> + +<DD>This option causes <b>pcxtoppm</b> to use its predefined standard +palette even if the PCX image provides its own. This is meaningful only +for an image in the 16 color paletted PCX format. + +<p>The image may appear to provide its own palette but in fact be created +by a program too primitive to understand palettes that created a random +palette by accident. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtopcx.html">ppmtopcx</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHORS</H2> + +<p>Copyright 1990 by Michael Davidson. + +<p>Modified 1994 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pfm.html b/pfm.html new file mode 100644 index 00000000..c08c3a53 --- /dev/null +++ b/pfm.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>PFM Format Description</TITLE></HEAD> +<BODY> +<H1>PFM Format</H1> +<p> +This document describes the PFM graphic image file format as understood by +the Netpbm converters <a href="pamtopfm.html"><b>pamtopfm</b></a> and +<a href="pfmtopam.html"><b>pfmtopam</b></a>. + +<p>There are multiple similar formats known as PFM in the world, none +of them authoritatively documented. The format described here is one +that Bryan Henderson deduced from a program he found somewhere that +dealt with a "PFM" format. + +<p>The PFM format is inspired by the Netpbm formats, and you will see +lots of similarity. It is not, however, an official Netpbm format. +Its goal is not consistent with those of Netpbm formats. + +<h2>The format</h2> + +<p>A PFM image is a stream of bytes. The stream consists of a header +followed immediately by a raster. These two components are described +below. There are no delimeters before or after the sections as +described. + +<h3>PFM header</h3> + +<p>The PFM header is 3 consecutive "lines" of ASCII text. +After each line is a white space character. That character is +typically a newline character, hence the term "line," but +doesn't have to be. + +<p><b>pamtopfm</b> uses a newline in the PFM it generates. + +<h4>Identifier Line</h4> + +<p>The identifier line contains the characters "PF" or +"Pf". PF means it's a color PFM. Pf means it's a grayscale +PFM. + +<h4>Dimensions Line</h4> + +<p>The dimensions line contains two positive decimal integers, +separated by a blank. The first is the width of the image; the second +is the height. Both are in pixels. + +<h4>Scale Factor / Endianness</h4> + +<p>The Scale Factor / Endianness line is a queer line that jams +endianness information into an otherwise sane description of a scale. +The line consists of a nonzero decimal number, not necessarily an +integer. If the number is negative, that means the PFM raster is +little endian. Otherwise, it is big endian. The absolute value of +the number is the scale factor for the image. + +<p>The scale factor tells the units of the samples in the raster. You +use somehow it along with some separately understood unit information +to turn a sample value into something meaningful, such as watts per +square meter. + + +<h3>PFM raster</h3> + +<p>The raster is a sequence of pixels, packed one after another, with no +delimiters of any kind. They are in standard Western reading order: +left to right and top to bottom within the image. + +<p>Each pixel consists of 1 or 3 samples, packed one after another, +with no delimiters of any kind. 1 sample for a grayscale PFM and 3 for a +color PFM (see the Identifier Line of the PFM header). + +<p>Each sample consists of 4 consecutive bytes. The bytes represent a +32 bit string, in either big endian or little endian format, as determined +by the Scale Factor / Endianness line of the PFM header. That string is +an IEEE 32 bit floating point number code. Since that's the same format +that most CPUs and compiler use, you can usually just make a program use +the bytes directly as a floating point number, after taking care of the +endianness variation. + +</BODY> +</HTML> + diff --git a/pfmtopam.html b/pfmtopam.html new file mode 100644 index 00000000..b8949b5b --- /dev/null +++ b/pfmtopam.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pfmtopam User Manual</TITLE></HEAD> +<BODY> +<H1>pfmtopam</H1> +Updated: 10 April 2004 + +<A HREF="#index">Table Of Contents</A> + +<A NAME="name"> </A> +<H2>NAME</H2> +pamtopfm - Convert PFM (Portable Float Map) image to Netpbm format + +<A NAME="synopsis"> </A> +<H2>SYNOPSIS</H2> +<B>pfmtopam</B> +[<b>-maxval=</b><i>n</i>] +[<b>-verbose</b>] +[<I>imagefile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pfmtopam</b> reads a PFM (Portable Float Map) image and converts +it to PAM. + +<p>See <a href="pamtopfm.html"><b>pamtopfm</b></a> for a description of +PFM. + +<p>If you want one of the older, more portable Netpbm formats, run the +output through <b>pamtopnm</b>. + +<b>pamtopfm</b> creates a PAM with tuple type "RGB" or +"GRAYSCALE" depending on whether or not the PFM is in the color +subformat. + +<p>Use <a href="pamtopfm.html"><b>pamtopfm</b></a> to convert a PFM +image to Netpbm format. + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-maxval=</b><i>n</i> + +<DD> + <P>This specifies the maxval for the PAM. Default is 255. + +<DT><B>-verbose</b> + +<DD> + <P>This causes <b>pfmtopam</b> to display messages describing + the PFM input file. + +</DL> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamtopfm.html">pamtopfm</A></B>, +<B><A HREF="pam.html">pam</A></B>, + +<A NAME="history"></a> +<h2>HISTORY</h2> + +<p><b>pfmtopam</b> was added to Netpbm in Release 10.22 (April 2004). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pgm.html b/pgm.html new file mode 100644 index 00000000..9e1a14d2 --- /dev/null +++ b/pgm.html @@ -0,0 +1,197 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>PGM Format Specification</TITLE> +<META NAME="manual_section" CONTENT="5"> +</HEAD> +<BODY> +<H1>pgm</H1> +Updated: 03 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgm - Netpbm grayscale image format + +<A NAME="lbAC"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>The PGM format is a lowest common denominator grayscale file format. +<A NAME="ixAAB"></A> +It is designed to be extremely easy to learn and write programs for. +(It's so simple that most people will simply reverse engineer it +because it's easier than reading this specification). + +<P>A PGM image represents a grayscale graphic image. There are many +psueudo-PGM formats in use where everything is as specified herein except +for the meaning of individual pixel values. For most purposes, a PGM +image can just be thought of an array of arbitrary integers, and all the +programs in the world that think they're processing a grayscale image +can easily be tricked into processing something else. + +<P>The name "PGM" is an acronym derived from "Portable Gray Map." + +<P>One official variant of PGM is the transparency mask. A transparency +mask in Netpbm is represented by a PGM image, except that in place of +pixel intensities, there are opaqueness values. See below. + +<P>The format definition is as follows. You can use the <a +href="libnetpbm.html">libnetpbm</a> C subroutine library to conveniently +and accurately read and interpret the format. + +<P>A PGM file consists of a sequence of one or more PGM images. There are +no data, delimiters, or padding before, after, or between images. + +<P>Each PGM image consists of the following: + +<OL> + +<LI>A "magic number" for identifying the file type. +A pgm image's magic number is the two characters "P5". + +<LI>Whitespace (blanks, TABs, CRs, LFs). + +<LI>A width, formatted as ASCII characters in decimal. + +<LI>Whitespace. + +<LI>A height, again in ASCII decimal. + +<LI>Whitespace. + +<LI>The maximum gray value (Maxval), again in ASCII decimal. Must be less +than 65536, and more than zero. + +<LI>Newline or other single whitespace character. + +<LI>A raster of Height rows, in order from top to bottom. Each row +consists of Width gray values, in order from left to right. Each gray +value is a number from 0 through Maxval, with 0 being black and Maxval +being white. Each gray value is represented in pure binary by either +1 or 2 bytes. If the Maxval is less than 256, it is 1 byte. +Otherwise, it is 2 bytes. The most significant byte is first. + +<P>A row of an image is horizontal. A column is vertical. The pixels +in the image are square and contiguous. + +<LI>Each gray value is a number proportional to the intensity of the +pixel, adjusted by the ITU-R Recommendation BT.709 gamma transfer +function. (That transfer function specifies a gamma number of 2.2 and +has a linear section for small intensities). A value of zero is +therefore black. A value of Maxval represents CIE D65 white and the +most intense value in the image and any other image to which the image +might be compared. + +<LI>Note that a common variation on the PGM format is to have the +gray value be "linear," i.e. as specified above except +without the gamma adjustment. <B>pnmgamma</B> takes such a PGM +variant as input and produces a true PGM as output. + +<LI>In the transparency mask variation on PGM, the value represents +opaqueness. It is proportional to the fraction of intensity of a +pixel that would show in place of an underlying pixel. So what +normally means white represents total opaqueness and what normally +means black represents total transparency. In between, you would +compute the intensity of a composite pixel of an "under" and +"over" pixel as under * (1-(alpha/alpha_maxval)) + over * +(alpha/alpha_maxval). Note that there is no gamma transfer function +in the transparency mask. + +<LI>Characters from a "#" to +the next end-of-line, before the maxval line, are comments and are +ignored. + +</OL> + +<P>Note that you can use <B>pamdepth</B> to convert between a the +format with 1 byte per gray value and the one with 2 bytes per gray +value. + +<P>There is actually another version of the PGM format that is fairly +rare: "plain" PGM format. The format above, which generally +considered the normal one, is known as the "raw" PGM format. +See <B><A HREF="pbm.html">pbm</A></B> for some commentary on how plain +and raw formats relate to one another and how to use them. + +<P>The difference in the plain format is: + +<DL COMPACT> +<DT>-<DD> +There is exactly one image in a file. +<DT>-<DD> +The magic number is P2 instead of P5. +<DT>-<DD> +Each pixel in the raster is represented as an ASCII decimal number +(of arbitrary size). +<DT>-<DD> +Each pixel in the raster has white space before and after it. There must +be at least one character of white space between any two pixels, but there +is no maximum. +<DT>-<DD> +No line should be longer than 70 characters. +</DL> +<P> + +Here is an example of a small image in the plain PGM format. +<PRE> +P2 +# feep.pgm +24 7 +15 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 +0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 +0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 +0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +</PRE> + +<P>There is a newline character at the end of each of these lines. + +<p>Programs that read this format should be as lenient as possible, +accepting anything that looks remotely like a PGM. + +<A NAME="lbAD"> </A> +<H2>COMPATIBILITY</H2> + +<P> +Before April 2000, a raw format PGM file could not have a maxval greater +than 255. Hence, it could not have more than one byte per sample. Old +programs may depend on this. +<P> +Before July 2000, there could be at most one image in a PGM file. As +a result, most tools to process PGM files ignore (and don't read) any +data after the first image. +<P> +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A>, +<A HREF="pbm.html">pbm</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="pam.html">pam</A>, +<A HREF="libnetpbm.html">libnetpbm</A>, +<A HREF="directory.html">programs that process PGM</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">DESCRIPTION</A> +<LI><A HREF="#lbAD">COMPATIBILITY</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmabel.html b/pgmabel.html new file mode 100644 index 00000000..31f170a2 --- /dev/null +++ b/pgmabel.html @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pgmabel User Manual</title></HEAD> + +<BODY> +<H1>pgmabel</H1> +Updated: June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pgmabel - create cross section using Abel Integration for Deconvolution + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>pgmabel</b> +[<b>-help</b>] +[<b>-axis</b> <i>axis</i>] +[<b>-factor</b> <i>factor</i>] +[<b>-pixsize</b> <i>pixsize</i>] +[<b>-left</b> | <b>-right</b>] +[<b>-verbose</b>] +[<I>filespec</I>] + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmabel</b> reads as input a PGM image, which it assumes to be an +image of a rotational symmetric transparent object. The image must have +a vertical symmetry axis. <b>pgmabel</b> produces as output an image of +a cross-section of the image. + +<b>pgmabel</b> does the calculation by performing the Abel Integration +for Deconvolution of an axial-symmetrical image by solving the system +of linear equations. + +After integration, <b>pgmabel</b> weights all gray-values of one side +by the surface area of the calculated ring in square pixels divided by +4*<i>factor</i> multiplied by the size of one pixel (<i>pixsize</i>). +With the <b>-verbose</b> option, <b>pgmabel</b> prints the weighting +factors. + +<P>Where the caculation generates a negative result, the output is black. + +<P>The computation is unstable against periodic structures with size 2 in +the vertical direction. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<dt><b>-help</b> +<dd>Prints a help message. + +<dt><b>-axis</b> <i>axis</i> +<dd>Position of the axis of symmetry in the image in pixels from the left +edge of the image. Default is the center of the image. + +<dt><b>-factor</b> <i>factor</i> +<dd>User defined factor for enhancement of the output. Use a <i>factor</i> +less than 1 for decreasing gary values. Default is 1.0. + +<dt><b>-pixsize</b> <i>pixsize</i> +<dd>The size of a pixel for getting scale invariant. Default is 0.1. + +<dt><b>-left</b> +Calculate only the left side of the image. You cannot specify both +<b>left</b> and <b>right</b>. + +<dt><b>-right</b> +Analogous to <b>-left</b>. + +<dt><b>-verbose</b> +<dd>print information about the calculation. + +</DL> + +<A NAME="example"> </A> +<h2>EXAMPLE</h2> + +<p>Rotate a PGM image to get an image with a vertical axis of symmetry, +then calculate the cross section: + +<pre> + pnmrotate 90 file.pgm | pgmabel -axis 140 >cross_section.pgm +</pre> + + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmrotate.html">pnmrotate</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p>This program was added to Netpbm in Release 10.3 (June 2002). + +<A NAME="author"></a> +<h2>AUTHOR</h2> + +<p>Volker Schmidt (lefti@voyager.boerde.de) + +<p>Copyright (C) 1997-2002 German Aerospace research establishment + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#example">EXAMPLE</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmbentley.html b/pgmbentley.html new file mode 100644 index 00000000..39e1d4bb --- /dev/null +++ b/pgmbentley.html @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmbentley User Manual</TITLE></HEAD> +<BODY> +<H1>pgmbentley</H1> +Updated: 11 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pgmbentley - Bentleyize a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmbentley</B> +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmbentley</b>reads a PTM image as input and performs the +Bentley Effect, and writes a PGM image as output. + +<p>The Bentley Effect is described in "Beyond Photography" +by Holzmann, chapter 4, photo 4. It's a vertical smearing based on +brightness. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmoil.html">pgmoil</A>, +<A HREF="ppmrelief.html">ppmrelief</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Wilson Bent (<A +HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>) + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmcrater.html b/pgmcrater.html new file mode 100644 index 00000000..7aa1fc43 --- /dev/null +++ b/pgmcrater.html @@ -0,0 +1,203 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmcrater User Manual</TITLE></HEAD> +<BODY> +<H1>pgmcrater</H1> +Updated: 15 October 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmcrater - create cratered terrain by fractal forgery + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + + +<B>pgmcrater</B> + +[<B>-number</B> <I>n</I>] + +[<B>-height</B>|<B>-ysize</B> <I>s</I>] + +[<B>-width</B>|<B>-xsize</B> <I>s</I>] + +[<B>-gamma</B> <I>g</I>] + + +<P>All options can be abbreviated to their shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pgmcrater</B> creates a PGM image which mimics cratered terrain. +The PGM image is created by simulating the impact of a given number of +craters with random position and size, then rendering the resulting +terrain elevations based on a light source shining from one side of +the screen. The size distribution of the craters is based on a power +law which results in many more small craters than large ones. The +number of craters of a given size varies as the reciprocal of the area +as described on pages 31 and 32 of Peitgen and Saupe[1]; cratered +bodies in the Solar System are observed to obey this relationship. +The formula used to obtain crater radii governed by this law from a +uniformly distributed pseudorandom sequence was developed by Rudy +Rucker. + +<P>High resolution images with large numbers of craters often benefit +from being piped through <B>pnmsmooth</B>. The averaging performed by +this process eliminates some of the jagged pixels and lends a mellow +``telescopic image'' feel to the overall picture. + +<P><B>pgmcrater</B> simulates only small craters, which are +hemispherical in shape (regardless of the incidence angle of the +impacting body, as long as the velocity is sufficiently high). Large +craters, such as Copernicus and Tycho on the Moon, have a ``walled +plain'' shape with a cross-section more like: + +<PRE> + /\ /\ +<BR> + _____/ \____________/\____________/ \_____ +</PRE> + + +Larger craters should really use this profile, including the central +peak, and totally obliterate the pre-existing terrain. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-number</B> <I>n</I> + +<DD>Causes <I>n</I> craters to be generated. If no <B>-number</B> +specification is given, 50000 craters will be generated. Don't expect +to see them all! For every large crater there are many, many more +tiny ones which tend simply to erode the landscape. In general, the +more craters you specify the more realistic the result; ideally you +want the entire terrain to have been extensively turned over again and +again by cratering. High resolution images containing five to ten +million craters are stunning but take quite a while to create. + +<DT><B>-height</B> <I>height</I> + +<DD>Sets the height of the generated image to <I>height</I> pixels. +The default height is 256 pixels. + +<DT><B>-width</B> <I>width</I> + +<DD>Sets the width of the generated image to <I>width</I> pixels. The +default width is 256 pixels. + +<DT><B>-xsize</B> <I>width</I> + +<DD>Sets the width of the generated image to <I>width</I> pixels. The +default width is 256 pixels. + +<DT><B>-ysize</B> <I>height</I> + +<DD>Sets the height of the generated image to <I>height</I> pixels. +The default height is 256 pixels. + +<DT><B>-gamma</B> <I>factor</I> + +<DD>The specified <I>factor</I> is used to gamma adjust the image in +the same manner as performed by <B>pnmgamma</B>. The default value is +1.0, which results in a medium contrast image. Values larger than 1 +lighten the image and reduce contrast, while values less than 1 darken +the image, increasing contrast. + +<P>Note that this is separate from the gamma correction that is part +of the definition of the PGM format. The image <B>pnmgamma</B> +generates is a genuine, gamma-corrected PGM image in any case. This +option simply changes the contrast and may compensate for a display +device that does not correctly render PGM images. + +</DL> + +<A NAME="lbAF"> </A> +<H2>DESIGN NOTES</H2> + +The<B>-gamma</B> option isn't really necessary since you can achieve +the same effect by piping the output from <B>pgmcrater</B> through +<B>pnmgamma</B>. However, <B>pgmcrater</B> performs an internal gamma +map anyway in the process of rendering the elevation array into the +PGM format, so there's no additional overhead in allowing an +additional gamma adjustment. + +<P>Real craters have two distinct morphologies. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmgamma.html">pnmgamma</A></B>, + +<B><A HREF="pnmsmooth.html">pnmsmooth</A></B> + +<B><A HREF="pgm.html">pgm</A></B>, + +<DL COMPACT> +<DT>[1] +<DD>Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images, +New York: Springer Verlag, 1988. + +</DL> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<PRE> +John Walker +Autodesk SA +Avenue des Champs-Montants 14b +CH-2074 MARIN +Suisse/Schweiz/Svizzera/Svizra/Switzerland + <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A> + <B>Fax:</B>038/33 88 15 + <B>Voice:</B>038/33 76 33 +</PRE> + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided +"as is" without express or implied warranty. + +<a name="history"></a> +<H2>HISTORY</H2> + + +<P>The original 1991 version of this manual contains the following: + +<h3>PLUGWARE!</h3> + +<p>If you like this kind of stuff, you may also enjoy "James Gleick's +Chaos--The Software" for MS-DOS, available for $59.95 from your +local software store or directly from Autodesk, Inc., Attn: Science +Series, 2320 Marinship Way, Sausalito, CA 94965, USA. Telephone: +(800) 688-2344 toll-free or, outside the U.S. (415) 332-2344 Ext +4886. Fax: (415) 289-4718. "Chaos--The Software" includes a more +comprehensive fractal forgery generator which creates +three-dimensional landscapes as well as clouds and planets, plus five +more modules which explore other aspects of Chaos. The user guide of +more than 200 pages includes an introduction by James Gleick and +detailed explanations by Rudy Rucker of the mathematics and algorithms +used by each program. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">DESIGN NOTES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pgmdeshadow.html b/pgmdeshadow.html new file mode 100644 index 00000000..6b54f7e6 --- /dev/null +++ b/pgmdeshadow.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmdeshadow User Manual</TITLE></HEAD> +<BODY> +<H1>pgmdeshadow</H1> +Updated: 06 July 2006 +<p> + +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pgmdeshadow - Deshadow a PGM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmdeshadow</B> + +[<I>pnmfile</I>] + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmdeshadow</b> removes gray shadows from an image. This is +useful for an image containing text, such as a scanned book pages, +where a shadow typically appears near the book crease or near one side +of the image. <b>pgmdeshadow</b> recognizes a gray shadow as an area +of smoothly changing color, starting from the outer edges of the +image. The program uses a simple image reconstruction algorithm to +determine the local shadow gray level, then divides each pixel's gray +level by the local shadow gray level. + +<p>The algorithm is the "fast hybrid grayscale reruction" +algorithm from Luc Vincent, "Morphological Grayscale Reruction in +Image Analysis: Applications and Efficient Algorithms. + + +<H2 id="options">OPTIONS</H2> + +<p>None. + +<H2 id="references">REFERENCES</H2> + +<ul> + +<li>Luc Vincent, "Morphological Grayscale Reruction in Image +Analysis: Applications and Efficient Algorithms," IEEE +Transactions on Image Processing, vol. 2, no. 2, April 1993, +pp. 176-201. + +</ul> + + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="ppmshadow.html">ppmshadow</A>, +<A HREF="pgm.html">pgm</A> + +<h2 id="history">HISTORY</h2> + +<P><b>pgmdeshadow</b> was added to Netpbm in Version 10.35 (August 2006). + + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#references">REFERENCES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> + +</BODY> +</HTML> diff --git a/pgmedge.html b/pgmedge.html new file mode 100644 index 00000000..b0ff54b4 --- /dev/null +++ b/pgmedge.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pgmedge User Manual</TITLE> +</HEAD><BODY> +<H1>pgmedge</H1> +Updated: March 2002 +<BR> +<H2>NAME</H2> +<B>pgmedge</B> - replaced by pamedge +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pgmedge</b> was replaced in Netpbm 10.14 (March 2002) by +<b><a href="pamedge.html">pamedge</a></b>. + +<P><B>pamedge</b> is backward compatible with <b>pgmedge</b>, but works on +color images too. + +</BODY> +</HTML> diff --git a/pgmenhance.html b/pgmenhance.html new file mode 100644 index 00000000..3d9eb98e --- /dev/null +++ b/pgmenhance.html @@ -0,0 +1,67 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmenhance User Manual</TITLE> +</HEAD><BODY> +<H1>pgmenhance</H1> +Updated: 13 January 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmenhance - edge-enhance a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmenhance</B> + +[-<I>N</I>] + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pgmenhance</b> reads a PGM image as input, enhances the edges, +and writes a PGM image as output. + +<P>The edge enhancing technique is taken from Philip R. Thompson's +"xim" program, which in turn took it from section 6 of +"Digital Halftones by Dot Diffusion", D. E. Knuth, ACM +Transaction on Graphics Vol. 6, No. 4, October 1987, which in turn got +it from two 1976 papers by J. F. Jarvis et. al. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The optional <b>-</b><I>N</I> option should be a digit from 1 to 9. +1 is the lowest level of enhancement; 9 is the highest. The default +is 9. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmedge.html">pgmedge</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmhist.html b/pgmhist.html new file mode 100644 index 00000000..fbe1e40f --- /dev/null +++ b/pgmhist.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmhist User Manual</TITLE></HEAD> +<BODY> +<H1>pgmhist</H1> +Updated: 28 February 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmhist - print a histogram of the values in a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmhist</B> + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmhist</b> reads a PGM image as input and +prints a histogram of the gray values. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmnorm.html">pgmnorm</A>, +<A HREF="ppmhist.html">ppmhist</A> +<A HREF="pgm.html">pgm</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmkernel.html b/pgmkernel.html new file mode 100644 index 00000000..2a65ecf9 --- /dev/null +++ b/pgmkernel.html @@ -0,0 +1,94 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmkernel User Manual</TITLE></HEAD> +<BODY> +<H1>pgmkernel</H1> +Updated: 10 December 1992 +<BR> +<A HREF="#index">Table Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmkernel - generate a convolution kernel + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmkernel</B> + +[<B>-weight</B> <I>w</I>] + +<I>width </I> + +[<I>height </I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmkernel</b> generates a convolution kernel that you can use +with <b>pnmconvol</b>. The kernel is one where the weight of each location +is inversely proportional to its distance from the center of the kernel. + +<p><b>pgmkernel</b> generates a PGM image of size <I>width</I> by +<I>height</I> (or <I>width</I> by <I>width</I> if you don't specify +<I>height</I>). + +<p><b>pgmkernel</b> computes the convolution function K as follows. + +<blockquote> +K(i,j) = 1 / ( 1 + w * sqrt(i^2 + j^2)) +</blockquote> + +where <I>w</I> is a coefficient specified via the <b>-weight</b> +option. <i>i</i> and <i>j</i> are measured in pixels. K is zero +everywhere beyond the specified kernel width and height. + +<P><b>pgmkernel</b> generates the output PGM file in the Plain (text) +variation of PGM. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +The optional <b>-weight</b> value should be a real number greater than +-1. The default value is 6.0. + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<P>The computation time is proportional to <I>width</I>*<I>height</I>. +This increases rapidly with the increase of the kernel size. A better +approach could be using a FFT in these cases. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmconvol.html">pnmconvol</A>, +<A HREF="pnmsmooth.html">pnmsmooth</A> +<A HREF="pamgauss.html">pamgauss</A> +<A HREF="pgm.html">pgm</A> + + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Alberto Accomazzi (<A +HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmmake.html b/pgmmake.html new file mode 100644 index 00000000..8874dd06 --- /dev/null +++ b/pgmmake.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pgmmake User Manual</title></HEAD> +<BODY> +<H1>pgmmake</H1> +Updated: 19 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pgmmake - create a PGM image of a specified gray level and dimensions + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmmake</B> +<b>-maxval=</b><i>maxval</i> +<I>graylevel</I> +<I>width</I> +<i>height</I> + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pgmmake</b> produces a PGM image of the specified gray level, width, +height, and maxval. + +<P>Specify the gray level (<i>graylevel</i>) as a decimal floating point +number in the range [0, 1]. E.g. 1 is white, 0 is black, and 0.5 is +half luminosity gray. + +<h2 id="example">EXAMPLES</H2> + +<pre> + pgmmake 1 50 50 +</pre> +<pre> + pgmmake .2 50 100 -maxval=5 +</pre> + + +<H2 id="options">OPTIONS</H2> + +<DL> +<DT><b>-maxval=</b><i>maxval</i> +<DD> + The maxval for the generated image. Default is 255. +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pbmmake.html">pbmmake</A>, +<A HREF="ppmmake.html">ppmmake</A>, +<A HREF="pgm.html">pgm</A> + +<h2 id="history">HISTORY</h2> + +<p>This program was new in Netpbm 10.32 (February 2006). + +<p>With older Netpbm, use <b>ppmmake</b> and <b>ppmtopgm</b>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#example">EXAMPLES</A> +<LI><A HREF="#options">OPTIONS</A> +</UL> +</BODY> +</HTML> diff --git a/pgmmedian.html b/pgmmedian.html new file mode 100644 index 00000000..8a2a1a1f --- /dev/null +++ b/pgmmedian.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmmedian User Manual</TITLE></HEAD> +<BODY> +<H1>pgmmedian</H1> +Updated: 28 August 2005 +<p> + +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pgmmedian - apply a median filter to a PGM file + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmmedian</B> + +[<b>-width=</b><i>n</i>] + +[<b>-height=</b><i>n</i>] + +[<B>-type=</B><I>median_type</I>] + +[<B>-cutoff=</B><I>int</I>] + +[<I>pnmfile</I>] + + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmmedian</b> applies a median filter to a PGM image, using either +the histogram sort of select kth value method to determine the median. + +<p>See the <b>-type</b> and <b>-cutoff</b> options for information on +how <b>pgmmedian</b> chooses between the two methods. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-cutoff</b> <i>int</i> + +<DD>This option provides the cutoff value that <b>pgmmedian</b> uses +to decide between using the histogram sort or select kth value method +to find the median. + +If (<i>maxval</i> / ((<i>width</i> * <i>height</i>) - 1)), where +<i>maxval</i> is the maxval of the image and <i>width</i> and +<i>height</i> are the dimensions of the mask, is less than the cutoff +value, <b>pgmmedian</b> uses histogram sort. Otherwise, it uses kth +value. + +<p>If expression is less than the cutoff, <b>pgmmedian</b> uses the +histogram sort. Otherwise it uses the select kth value method. + +<p>This option has no effect if you specify <b>-type</b>. + +<p>The default is 250 + +<DT><B>-width=</b><i>n</i> + +<DD>Width of the median mask to apply. + +<p>Default is 3. + +<DT><B>-height=</b><i>n</i> + +<DD>Height of the median mask to apply. + +<p>Default is 3. + +<DT><B>-type</b> <i>median_type</i> + +<DD>This option selects which method to use to find median regardless +of cutoff value. Choices are <b>histogram_sort</b> and <b>select</b>. + +<p>By default, <b>pgmmedian</b> decides which method to use as described +under the <b>-cutoff</b> option. + +</DL> + +<H2 id="references">REFERENCES</H2> + +<ul> + +<li>"Collected Algorithms from ACM" Volume II, Algorithm 489 +by Robert W. Floyd + +<li>"A Fast Two-Dimensional Median Filtering Algorithm" in +"IEEE Transactions on Acoustics, Speech, and Signal +Processing" Vol. ASSP-27, No. 1, February 1979 + +<li>"Digital Image Processing Algorithms" by Ioannis +Pitas, Prentice Hall, 1993 ISBN 0-13-145814-0 + +</ul> + + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pgmnoise.html">pgmnoise</A>, +<A HREF="pamaddnoise.html">pamaddnoise</A>, +<A HREF="pgm.html">pgm</A> + +<h2 id="history">HISTORY</h2> + +<P><b>pgmmedian</b> was added to Netpbm in Version 10.29 (August 2005). +It had been distributed by Mike Burns via his own web site before that +(and continued to be so). + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1996 by Mike Burns <<A +HREF="mailto:burns@cac.psu.edu">burns@cac.psu.edu</A>> + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#references">REFERENCES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> + +</BODY> +</HTML> diff --git a/pgmminkowski.html b/pgmminkowski.html new file mode 100644 index 00000000..29b03a64 --- /dev/null +++ b/pgmminkowski.html @@ -0,0 +1,98 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmminkowski User Manual</TITLE></HEAD> +<BODY> +<H1>pgmminkowski</H1> +Updated: 29 October 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmminkowski - compute Minkowski integral + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmminkowski</B> <I>pgmfile</I> + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pgmminkowski</b> computes the 3 Minkowski integrals of a PGM image. + +<p>The Minkowski integrals mathematically characterize the shapes in the +image and hence are the basis of "morphological image analysis." + +<p>Hadwiger's theorem has it that these integrals are the only +motion-invariant, additive and conditionally continuous functions of a +two-dimensional image, which means that they are preserved under +certain kinds of deformations of the image. On top of that, they are +very easy and quickly calculated. This makes them of interest for +certain kinds of pattern recognition. + +<p>Basically, the Minkowski integrals are the area, total perimeter +length, and the Euler characteristic of the image, where these metrics +apply to the foreground image, not the rectangular PGM image itself. The +foreground image consists of all the pixels in the image that are +white. For a grayscale image, there is some threshold of intensity +applied to categorize pixels into black and white, and the Minkowski +integrals are calculated as a function of this threshold value. The +total surface area refers to the number of white pixels in the PGM and +the perimeter is the sum of perimeters of each closed white region in +the PGM. + +<p>For a grayscale image, these numbers are a function of the threshold +of what you want to call black or white. <b>pgmminkowski</b> reports these +numbers as a function of the threshold for all possible threshold +values. Since the total surface area can increase only as a function +of the threshold, it is a reparameterization of the threshold. It +turns out that if you consider the other two functions, the boundary +length and the Euler characteristic, as a function of the first one, +the surface, you get two functions that are a fingerprint of the +picture. This fingerprint is e.g. sufficient to recognize the +difference between pictures of different crystal lattices under a +scanning tunnelling electron microscope. + +<p>For more information about Minkowski integrals, see e.g. +<ul> +<li><a +href="http://rugth30.phys.rug.nl/compphys0/2001.htm"> K. Michielsen and +H. De Raedt, "Integral-Geometry Morphological Image Analysis", +Phys. Rep. 347, 461-538 (2001).</a> + +<li><a href="http://rugth30.phys.rug.nl/pdf/prechaos.pdf"> +J.S. Kole, K. Michielsen, and H. De Raedt, +"Morphological Image Analysis of Quantum Motion in Billiards", +Phys. Rev. E 63, 016201-1 - 016201-7 (2001) +</a> +</ul> + +<p>The output is suitable for direct use as a datafile in <b>gnuplot</b>. + +<p>In addition to the three Minkowski integrals, <b>pgmminkowski</b> also +lists the horizontal and vertical edge counts. + + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pgmmorphconv.html">pgmmorphconv</A></B> +<B><A HREF="pgm.html">pgm</A></B> + +<H2 id="authors">AUTHORS</H2> + +Luuk van Dijk, 2001. + +<p>Based on work which is Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#authors">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pgmmorphconv.html b/pgmmorphconv.html new file mode 100644 index 00000000..524b06b7 --- /dev/null +++ b/pgmmorphconv.html @@ -0,0 +1,110 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pgmmorphconv User Manual</TITLE></HEAD> +<BODY> +<H1>pgmmorphconv</H1> +Updated: 29 October 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pgmmorphconv - perform morphological convolutions: dilation, erosion + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmmorphconv</B> +[ <b>-erode</b> | <b>-dilate</b> | <b>-open</b> | <b>-close</b> ] +<I>templatefile</I> +[<I>pgmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pgmmorphconv</b> performs morphological convolutions on a +PGM image: dilation and erosion. + +<p><b>pgmmorphconv</b> performs a "topological" convolution. For each +pixel of the input, <b>pgmmorphconv</b> generates an output pixel in +the same position. To determine the intensity of the output pixel, +<b>pgmmorphconv</b> lays the template image over the input image such +that the middle pixel of the template is over the input pixel in +question. <b>pgmmorphconv</b> looks at the input pixels underneath each +white pixel in the template. For a dilation, the maximum intensity of +all those pixels is the intensity of the output pixel. For an erosion, +it is the minimum. + +<p>Thus, the dilation effect is that bright areas of the input get bigger +and dark areas smaller. The erosion effect is the opposite. The simplest +template image would be one with a white pixel in the middle and the rest +black. This would produce an output image identical to the input. Another +simple template image is a fully white square. This causes bright or dark +areas to expand in all directions. A template image that is white on the +left side and black on the right would smear the image to the right. + +<p>The template file named by <i>templatefile</i> contains the +template image as a PBM image. It must have an odd number of rows and +an odd number of columns, so there is a definite middle pixel. It +must contain at least one white pixel. + +<p>This is similar to the continuous convolution done by +<b>pnmconvol</b>, except that with <b>pnmconvol</b> the output intensity is +a weighted average of nearby input pixels instead of a minimum or maximum. + +<p>This convolution changes the three Minkowski integrals in a predefined +way, and can be used to filter an image to enhance certain features, to +ease their automatic recognition. + +<p>The options <b>-erode</b> and <b>-dilate</b> obviously produce an +erosion or dilation, respectively. <p>The <b>-open</b> option causes +<b>pgmmorphconv</b> to perform first an erode and then a dilate +operation. The <b>-close</b> option causes a dilate first and then an +erode. If you specify none of these options, it is the same as +<b>-dilate</b>. + +<H2 id="seealso">SEE ALSO</H2> + +<ul> +<li><B><A HREF="pgmminkowski.html">pgmminkowski</A></B> +<li><B><A HREF="pnmconvol.html">pnmconvol</A></B> +<li><B><A HREF="pgm.html">pgm</A></B> +</ul> + +<p>For more information about morphological convolutions, see e.g. +<ul> +<li><a +href="http://rugth30.phys.rug.nl/compphys0/2001.htm"> K. Michielsen and +H. De Raedt, "Integral-Geometry Morphological Image Analysis", +Phys. Rep. 347, 461-538 (2001).</a> + +<li><a href="http://rugth30.phys.rug.nl/pdf/prechaos.pdf"> +J.S. Kole, K. Michielsen, and H. De Raedt, +"Morphological Image Analysis of Quantum Motion in Billiards", +Phys. Rev. E 63, 016201-1 - 016201-7 (2001) +</a> +</ul> + + +<H2 id="authors">AUTHORS</H2> + +Luuk van Dijk, 2001. + +<p>Based on work which is Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#authors">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pgmnoise.html b/pgmnoise.html new file mode 100644 index 00000000..20d4ab32 --- /dev/null +++ b/pgmnoise.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmnoise User Manual</TITLE> +</HEAD><BODY> +<H1>pgmnoise</H1> +Updated: 16 November 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmnoise - create a graymap made up of white noise + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmnoise </B> + +<I>width</i> <i>height</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pgmnoise</b> creates a portable graymap that is made up of +random pixels with gray values in the range of 0 to PGM_MAXMAXVAL +(depends on the compilation, either 255 or 65535). The graymap has a +size of width * height pixels. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgm.html">pgm</A> +<A NAME="lbAF"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmnorm.html b/pgmnorm.html new file mode 100644 index 00000000..b076b3bc --- /dev/null +++ b/pgmnorm.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pgmnorm User Manual</TITLE> +</HEAD><BODY> +<H1>pgmnorm</H1> +Updated: March 2002 +<BR> +<H2>NAME</H2> +<B>pgmnorm</B> - replaced by pnmnorm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pgmnorm</b> was replaced in Netpbm 9.25 (March 2002) by +<b><a href="pnmnorm.html">pnmnorm</a></b>. + +<P><B>pnmnorm</b> is backward compatible with <b>pgmnorm</b>, but it also +handles PPM images. + +</BODY> +</HTML> diff --git a/pgmoil.html b/pgmoil.html new file mode 100644 index 00000000..fd3b6f48 --- /dev/null +++ b/pgmoil.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pgmoil User Manual</TITLE> +</HEAD><BODY> +<H1>pgmoil</H1> +Updated: July 2001 +<BR> +<H2>NAME</H2> +<B>pgmoil</B> - replaced by pamoil +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pgmoil</b> was replaced in Netpbm 9.16 (July 2001) by +<b><a href="pamoil.html">pamoil</a></b>. + +<P><B>pamoil</b> is backward compatible with <b>pgmoil</b>, but works on +color images too. + +</BODY> +</HTML> diff --git a/pgmramp.html b/pgmramp.html new file mode 100644 index 00000000..1e1bc0b3 --- /dev/null +++ b/pgmramp.html @@ -0,0 +1,108 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pgmramp User Manual</title> +</HEAD><BODY> +<H1>pgmramp</H1> +Updated: 04 June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmramp - generate a grayscale ramp + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmramp</B> +<B>-lr</B>|<B>-tb</B>|<B>-rectangle</B>|<B>-ellipse</B> +<b>-maxval=</b><i>maxval</i> +<I>width</i> <i>height</I> + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>Generates a graymap of the specified size containing a +black-to-white ramp. These ramps are useful for multiplying with +other images, using <b>pamarith</b>. + +<p>The ramp is linear in brightness, not intensity. I.e. the +gamma-corrected sample values in the PGM rise linearly with distance +from the corner of the image. If you want a ramp that is linear in +light intensity, use <b>pnmgamma</b> with <b>pgmramp</b>. + +<P>To generate a simple ramp of all the values from 0 to maxval, and not +necessarily a graphic image, use <b><a href="pamseq.html">pamseq</a></b>. + +<p><b>ppmrainbow</b> does something similar to what <b>pgmramp</b> does, +but for color. The image fades between two colors of your choice. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +You must specify exactly one of the ramp type options. +<DL COMPACT> +<DT><B>-lr</B> +<DD> +A left to right ramp. + +<DT><B>-tb</B> +<DD> +A top to bottom ramp. + +<DT><B>-rectangle</B> +<DD> +An outside-in rectangular ramp. It is black around the edges and white +in the center. + +<DT><B>-ellipse</B> +<DD> +An outside-in elliptical ramp. It is black around the edge and white +in the center. + +<DT><b>-maxval=</b><i>maxval</i> +<DD> + The maxval for the generated image. Default is 255. +<p> + This option did not exist before June 2002. Before, the maxval was + always 255. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamarith.html"><b>pamarith</b></A>, +<A HREF="pnmgamma.html"><b>pnmgamma</b></A>, +<A HREF="pamseq.html"><b>pamseq</b></A>, +<A HREF="ppmrainbow.html"><b>ppmrainbow</b></A>, +<A HREF="pamgradient.html"><b>pamgradient</b></A>, +<A HREF="pgm.html">pgm</A> + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmslice.html b/pgmslice.html new file mode 100644 index 00000000..a71c044b --- /dev/null +++ b/pgmslice.html @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pgmslice User Manual</title> +</HEAD><BODY> +<H1>pgmslice</H1> +Updated: 22 June 2002 +<BR> +<H2>NAME</H2> +pgmslice - extract one line of pixel values out of a PGM + +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>Starting with Netpbm 10.3, <b>pgmslice</b> is obsolete. Use +<a href="pamslice.html"><b>pamslice</b></a> instead. It is backward +compatible. + +</BODY> +</HTML> + + + diff --git a/pgmtexture.html b/pgmtexture.html new file mode 100644 index 00000000..ebb37123 --- /dev/null +++ b/pgmtexture.html @@ -0,0 +1,89 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmtexture User Manual</TITLE></HEAD> +<BODY> +<H1>pgmtexture</H1> +Updated: 22 Aug 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmtexture - calculate textural features on a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmtexture</B> + +[<B>-d</B> <I>d</I>] + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmtexture</b> reads a PGM image as input and calculates +textural features based on spatial dependence matrices at 0, 45, 90, +and 135 degrees for a distance <I>d</I> (default = 1). + +<p>Textural features include: + +<UL> +<LI>Angular Second Moment +<LI>Contrast +<LI>Correlation +<LI>Variance +<LI>Inverse Difference Moment +<LI>Sum Average +<LI>Sum Variance +<LI>Sum Entropy +<LI>Entropy +<LI>Difference Variance +<LI>Difference Entropy +<LI>Information Measures of Correlation +<LI>Maximal Correlation Coefficient +</UL> + +<P>Algorithm taken from: <CITE>Haralick, R.M., K. Shanmugam, and +I. Dinstein. 1973. Textural features for image classification. +<I>IEEE Transactions on Systems, Man, and Cybertinetics,</I> +SMC-3(6):610-621.</cite> + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +<p>The program can run incredibly slow for large images (larger than +64 x 64) and command line options are limited. The method for finding +the Maximal Correlation Coefficient, which requires finding the second +largest eigenvalue of a matrix Q, does not always converge. + +<H2>SEE ALSO</H2> + +<A HREF="pgm.html">pgm</A>, +<A HREF="pamsharpness.html">pamsharpness</A>, +<A HREF="pamsharpmap.html">pamsharpmap</A>, +<A HREF="pgmedge.html">pgmedge</A>, +<A HREF="pgmminkowski.html">pgmminkowski</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Texas Agricultural Experiment Station, employer for +hire of James Darrell McCauley. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmtofs.html b/pgmtofs.html new file mode 100644 index 00000000..204c17ae --- /dev/null +++ b/pgmtofs.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmtofs User Manual</TITLE></HEAD> +<BODY> +<H1>pgmtofs</H1> +Updated: 18 May 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmtofs - convert PGM image to Usenix FaceSaver(tm) format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmtofs</B> + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmtofs</b> reads a PGM image as input and produces Usenix +FaceSaver(tm) format as output. + +<P>FaceSaver is a registered trademark of Metron Computerware Ltd. of +Oakland, CA. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="fstopgm.html">fstopgm</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmtolispm.html b/pgmtolispm.html new file mode 100644 index 00000000..2cec5109 --- /dev/null +++ b/pgmtolispm.html @@ -0,0 +1,73 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmtolispm User Manual</TITLE></HEAD> +<BODY> +<H1>pgmtolispm</H1> +Updated: 06 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmtolispm - convert a PGM image to Lisp Machine format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmtolispm</B> + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmtolispm</b> reads a PGM image as input and produces a Lisp +Machine bitmap as output. + +<P>This is the file format read by the tv:read-bit-array-file function +on TI Explorer and Symbolics lisp machines. + +<P>Given a PGM (instead of a PBM), <b>pgmtolispm</b> outputs a +multi-plane image. This is probably not useful unless you have a +color lisp machine. + +<P>Multi-plane bitmaps on lisp machines are color; but the lispm image +file format does not include a color map, so we must treat it as a +graymap instead. This is unfortunate. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="lispmtopgm.html">lispmtopgm</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p>Output width is always rounded up to the nearest multiple of 32; +this might not always be what you want, but it probably is (arrays +which are not modulo 32 cannot be passed to the Lispm BITBLT function, +and thus cannot easily be displayed on the screen). + +<P>No color. + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pgmtopbm.html b/pgmtopbm.html new file mode 100644 index 00000000..39377764 --- /dev/null +++ b/pgmtopbm.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>pgmtopbm</H1> +Updated: 20 June 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pgmtopbm - convert a PGM image to PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmtopbm</B> + +[<B>-floyd</B> | <B>-fs</B> | <B>-threshold</B> +| <B>-hilbert</B> +| <B>-dither8</B> | <B>-d8</B> | <B>-cluster3</B> +| <B>-c3</B> | <B>-cluster4</B> | <B>-c4</B> +| <B>-cluster8</B> | <B>-c8</B>] + +[<B>-value</B> <I>val</I>] + +[<B>-clump</B> <I>size</I>] + +[<I>pgmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This program is obsolete since Netpbm 10.23 (July 2004). Use <a +href="pamditherbw.html"><b>pamditherbw</b></a> to do what this program +used to do. + +<p><b>pgmtopbm</b> never was the simple converter it appeared to be. +It was a dithering program. Unfortunately, it didn't do the dithering +properly because it treated the PGM input samples as if they were +directly proportional to light intensity, but they are actually +gamma-adjusted. + +<p><b>pamditherbw</b> is backward compatible with <b>pgmtopbm</b> +except that it does the correct gamma adjustments. + +</BODY> +</HTML> diff --git a/pgmtopgm.html b/pgmtopgm.html new file mode 100644 index 00000000..6a9555ac --- /dev/null +++ b/pgmtopgm.html @@ -0,0 +1,65 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pgmtopgm User Manual</title></HEAD> + +<BODY> +<H1>pgmtopgm</H1> +Updated: September 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pgmtopgm - copy PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pgmtopgm</B> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pgmtopgm</b> simply copies a PGM image from Standard Input to +Standard Output. This may seem an unnecessary duplication of +<b>cat</b>, but remember that a PGM program can read a PBM image as +if it were PGM. So <b>pgmtopgm</b> can read either a PBM or PGM +image and produce a PGM image as output. + +<p>Even that is of limited usefulness because of the fact that almost +any program to which you would feed the resulting PGM image could also +just take the original image directly. However, sometimes you really +need a true PGM image. + +<p>When you know you have a PBM image and want a PGM image, +<b>pbmtopgm</b> is a more general way to do that conversion. + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtoppm.html">ppmtoppm</A></B>, +<B><A HREF="pnmtopnm.html">pnmtopnm</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>, +<B><A HREF="pbm.html">pgm</A></B>, +<B><A HREF="pgm.html">pgm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p>This program was added to Netpbm in Release 10.9 (September 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pgmtoppm.html b/pgmtoppm.html new file mode 100644 index 00000000..ea93a60c --- /dev/null +++ b/pgmtoppm.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pgmtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>pgmtoppm</H1> +Updated: 10 December 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pgmtoppm - colorize a PGM (grayscale) image into a PPM (color) image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pgmtoppm</B> + +<I>colorspec</I> + +[<I>pgmfile</I>] + +<BR> + +<B>pgmtoppm</B> + +<I>colorspec1</I><B>-</B><I>colorspec2</I> + +[<I>pgmfile</I>] + +<BR> + +<B>pgmtoppm</b> +<b>-map=</B><I>mapfile</I> + +[<I>pgmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pgmtoppm</b> reads a PGM as input and produces a PPM file as +output with a specific color assigned to each gray value in the input. + +<P>If you specify one color argument, black in the pgm file stays +black and white in the pgm file turns into the specified color in the +ppm file. Gray values in between are linearly mapped to differing +intensities of the specified color. + +<P>If you specify two color arguments (separated by a hyphen), then +black gets mapped to the first color and white gets mapped to the +second and gray values in between get mapped linearly (across a three +dimensional space) to colors in between. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>Also, you can specify an entire colormap with the <B>-map</B> +option. The mapfile is just a <B>ppm</B> file; it can be any shape, +all that matters is the colors in it and their order. In this case, +black gets mapped into the first color in the map file, and white gets +mapped to the last and gray values in between are mapped linearly onto +the sequence of colors in between. The maxval of the output image is +the maxval of the map image. + +<p>A more direct way to specify a particular color to replace each +particular gray level is to use <b>pamlookup</b>. You make an index +file that explicitly associates a color with each possible gray level. + +<H2 id="maxval">NOTE - MAXVAL</H2> + +<P>When you don't use <b>-map</b>, the "maxval," or depth, +of the output image is the same as that of the input image. The +maxval affects the color resolution, which may cause quantization +errors you don't anticipate in your output. For example, you have a +simple black and white image as a PGM with maxval 1. Run this image +through <B>pgmtoppm 0f/00/00</B> to try to make the image black and +faint red. Because the output image will also have maxval 1, there is +no such thing as faint red. It has to be either full-on red or black. +<B>pgmtoppm</B> rounds the color 0f/00/00 down to black, and you get +an output image that is nothing but black. + +<P>The fix is easy: Pass the input through <B>pamdepth</B> on the way +into <B>pgmtoppm</B> to increase its depth to something that would +give you the resolution you need to get your desired color. In this +case, <B>pamdepth 16</B> would do it. Or spare yourself the +unnecessary thinking and just say <B>pamdepth 255</B>. + +<p>PBM input is a special case. While you might think this would be +equivalent to a PGM with maxval 1 since only two gray levels are +necessary to represent a PBM image, <b>pgmtoppm</b>, like all Netpbm +programs, in fact treats it as a maxval of 255. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="rgb3toppm.html">rgb3toppm</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, +<B><A HREF="ppmtorgb3.html">ppmtorgb3</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pgm.html">pgm</A></B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#maxval">NOTE - MAXVAL</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pi1toppm.html b/pi1toppm.html new file mode 100644 index 00000000..097bf696 --- /dev/null +++ b/pi1toppm.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pi1toppm User Manual</TITLE></HEAD> +<BODY> +<H1>pi1toppm</H1> +Updated: 19 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pi1toppm - convert an Atari Degas .pi1 into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pi1toppm</B> + +[<I>pi1file</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pi1toppm</b> reads an Atari Degas .pi1 file as input and +produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtopi1.html">ppmtopi1</A>, +<A HREF="pc1toppm.html">pc1toppm</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="pi3topbm.html">pi3topbm</A>, +<A HREF="pbmtopi3.html">pbmtopi3</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pi3topbm.html b/pi3topbm.html new file mode 100644 index 00000000..514bd05b --- /dev/null +++ b/pi3topbm.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pi3topbm User Manual</TITLE></HEAD> +<BODY> +<H1>pi3topbm</H1> +Updated: 11 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pi3topbm - convert an Atari Degas .pi3 file into a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pi3topbm</B> + +[<I>pi3file</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pi3topbm</b> reads an Atari Degas .pi3 file as input and +produces a PBM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtopi3.html">pbmtopi3</A>, +<A HREF="pbm.html">pbm</A>, +<A HREF="pi1toppm.html">pi1toppm</A>, +<A HREF="ppmtopi1.html">ppmtopi1</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1988 by David Beckemeyer (bdt!david) and Diomidis D. Spinellis. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/picttoppm.html b/picttoppm.html new file mode 100644 index 00000000..67e0d98d --- /dev/null +++ b/picttoppm.html @@ -0,0 +1,175 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Picttoppm User Manual</TITLE></HEAD> +<BODY> +<H1>picttoppm</H1> +Updated: 17 June 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +picttoppm - convert a Macintosh PICT file to a PPM + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>picttoppm</B> + +[<B>-verbose</B>] + +[<B>-fullres</B>] + +[<B>-noheader</B>] + +[<B>-quickdraw</B>] + +[<B>-fontdir</B>file<B>]</B> + +[<I>pictfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>picttoppm</b> reads a PICT file (version 1 or 2) and outputs a PPM +image. + +<p>This is useful as the first step in converting a scanned image to +something that can be displayed on Unix. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-fontdir </B><I>file</I> + +<DD>Make the list of BDF fonts in <i>file</i> available for use by +<b>picttoppm</b> when drawing text. See below for the format of the +fontdir file. This is in addition to the built-in fonts and those in +the file <b>fontdir</b>. + +<DT><B>-fullres</B> + +<DD>Force any images in the PICT file to be output with at least their +full resolution. A PICT file may indicate that a contained +image is to be scaled down before output. This option forces images +to retain their sizes and prevent information loss. +This option disables all PICT operations except images. + +<DT><B>-noheader</B> + +<DD>Do not skip the 512 byte header that is present on all PICT files. +This is useful when you have PICT data that was not stored in +the data fork of a PICT file. + +<DT><B>-quickdraw</B> + +<DD>Execute only pure quickdraw operations. In particular, turn off +the interpretation of special PostScript printer operations. + +<DT><B>-verbose</B> + +<DD>Print a whole bunch of information about the PICT file and the +conversion process that only <b>picttoppm</b> hackers really care +about. + +</DL> + +<H2 id="limitations">LIMITATIONS</H2> + +The PICT file format is a general drawing format. <b>picttoppm</b> +does not recognize all the drawing commands, but it does fully +implement all image commands and mostly implement line, rectangle, +polgon and text drawing. It is useful for converting scanned images +and some drawing conversion. + +<P>Memory is used very liberally with at least 6 bytes needed for +every pixel. Large bitmap PICT files will likely run your computer +out of memory. + +<h2 id="fonts">FONTS</h2> + +<p>Some of the information in a PICT file is text, with a number +indicating the font in which the text is supposed to rendered. +<b>picttoppm</b> has one built-in font, but you can add others by +directing <b>picttoppm</b> to BDF font files, which you do with font +directory files. + +<p><b>picttoppm</b> automatically uses the file named <b>fontdir</b> +in the current directory, if it exists. You may specify an additional +font directory file with the <b>-fontdir</b> option. + +<P>Obviously the font defintions are strongly related to the +Macintosh. You can find more font numbers and information about fonts +in Macintosh documentation. + +<H3 id="fontdir">FONT DIR FILE FORMAT</H3> + +<p>Each line in the file is either a comment or font information. A +comment begins with <b>#</b>. The font information consists of 4 +whitespace spearated fields. The first is the font number, the second +is the font size in pixels, the third is the font style and the fourth +is the name of a BDF file containing the font. The BDF format is +defined by the X Window System and is beyond the scope of this document. + +<P>The font number indicates the type face. Here is a list of known +font numbers and their faces. + +<dl> +<dt>0 <dd>Chicago +<dt>1 <dd>application font +<dt>2 <dd>New York +<dt>3 <dd>Geneva +<dt>4 <dd>Monaco +<dt>5 <dd>Venice +<dt>6 <dd>London +<dt>7 <dd>Athens +<dt>8 <dd>San Franciso +<dt>9 <dd>Toronto +<dt>11 <dd>Cairo +<dt>12 <dd>Los Angeles +<dt>20 <dd>Times Roman +<dt>21 <dd>Helvetica +<dt>22 <dd>Courier +<dt>23 <dd>Symbol +<dt>24 <dd>Taliesin +</dl> + +<P>The font style indicates a variation on the font. Multiple +variations may apply to a font and the font style is the sum of the +variation numbers which are: + +<dl> +<dt>1 <dd>Boldface +<dt>2 <dd>Italic +<dt>4 <dd>Underlined +<dt>8 <dd>Outlined +<dt>16 <dd>Shadow +<dt>32 <dd>Condensed +<dt>64 <dd>Extended +</dl> + + +<H2 id="seealso">SEE ALSO</H2> + +Inside Macintosh volumes 1 and 5, +<A HREF="ppmtopict.html">ppmtopict</A>, +<A HREF="ppm.html">ppm</A> + + +<H2 id="author">AUTHOR</H2> + +Copyright 1993 George Phillips + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#limitations">BUGS</A> +<LI><A HREF="#fonts">FONTS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pjtoppm.html b/pjtoppm.html new file mode 100644 index 00000000..4610281e --- /dev/null +++ b/pjtoppm.html @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pjtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>pjtoppm</H1> +Updated: 14 July 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pjtoppm - convert an HP PaintJet file to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pjtoppm</B> + +[<I>paintjet</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pjtoppm</b> reads an HP PaintJet file as input and converts it +into a PPM image. This was a quick hack to save some trees, and it +only handles a small subset of the paintjet commands. In particular, +it will only handle enough commands to convert most raster image +files. + +<A NAME="lbAE"> </A> +<H2>REFERENCES</H2> + +HP PaintJet XL Color Graphics Printer User's Guide + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtopj.html">ppmtopj</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Christos Zoulas. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">REFERENCES</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pktopbm.html b/pktopbm.html new file mode 100644 index 00000000..709e27af --- /dev/null +++ b/pktopbm.html @@ -0,0 +1,79 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pktopbm User Manual</TITLE></HEAD> +<BODY> +<H1>pktopbm</H1> +Updated: 6 August 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pktopbm - convert packed (PK) format font into PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +pktopbm pkfile[.pk] [ -x width ] [ -y height ] [-c num] pbmfile ... + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pktopbm</b> reads a packed (PK) font file as input, and produces +PBM images as output. If the filename "-" is used for any of +the filenames, the standard input stream (or standard output where +appropriate) will be used. If either the width or height is specified, +this value will be used for all bitmaps produced. Also if one or both +values are specified, the bitmap will be relocated with the hoffset +and voffset given in the pkfile. The basepoint will be placed in the +lower left corner of the bitmap if the bitmap is bigger than the +specified size it will be truncated at the top or right. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><b>-c</b> <i>num</i> +<DD> +Sets the character number of the next bitmap written to <i>num</i>. + +<DT><b>-x</b> <i>width</i> +<DD> +Sets the width of the image in columns. + +<DT><b>-y</b> <i>width</i> +<DD> +Sets the height of the image in rows. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtopk.html">pbmtopk</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Adapted from Tom Rokicki's pxtopk by Angus Duggan <<A +HREF="mailto:ajcd@dcs.ed.ac.uk">ajcd@dcs.ed.ac.uk</A>>. <<A +HREF="mailto:bartel@informatik.tu-muenchen.de">bartel@informatik.tu-muenchen.de</A>> +in March 1995. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pngtopnm.html b/pngtopnm.html new file mode 100644 index 00000000..3c3d5c23 --- /dev/null +++ b/pngtopnm.html @@ -0,0 +1,172 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pngtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>pngtopnm</H1> +Updated: 24 March 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pngtopnm - convert a PNG image into a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pngtopnm</B> +[<b>-verbose</b>] +[<b>-alpha</b> | <b>-mix</b>] +[<b>-background</b>=<i>color</i>] +<BR> +[<b>-gamma</b>=<i>value</i>] +[<b>-text</b>=<i>filename</i>] +[<b>-time</b>] +[<I>pngfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pngtopnm</b> reads a PNG image (Portable Network Graphics) as +input and produces a PPM image as output. The type of the output file +depends on the input file - if it's black & white, <b>pngtopnm</b> +creates a PBM file. If it's grayscale, <b>pngtopnm</b> creates a PGM +file. Otherwise, it creates a PPM file. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-verbose</B> + +<DD>Display various information about the input PNG image and the +conversion process. + +<p>If you want even more information about the PNG image, use +<b>pngcheck</b> (not part of Netpbm). + +<DT><B>-alpha</B> + +<DD>Output the alpha channel or transparency mask of the image. The +result is either a PBM file or a PGM file, depending on whether +different levels of transparency appear. + +<DT><B>-mix</B> + +<DD>Compose the image with the transparency or alpha mask against a +background. The background color is determined by the bKGD chunk in +the PNG, except that you can override it with <b>-background</b>. +If the PNG has no bKGD chunk and you don't specify <b>-background</b>, +the background color is white. + +<DT><B>-background=</b><i>color</i> + +<DD> +This option specifies the background color with which to mix the image +when you specify <b>-mix</b>. + +<P><i>color</i> is as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>Examples: + +<ul> +<li><tt>-background=rgb:01/ff/80</tt> +<li><tt>-background=rgbi:1/255/128</tt> +</ul> + +<p>If you don't specify <b>-background</b>, the background color is what +is specified in the PNG image, and if the PNG doesn't specify anything, +white. + +<p>You cannot specify <b>-background</b> unless you also specify +<b>-mix</b>. Before Netpbm 10.27 (March 2005), you could specify +<b>-background</b> with <b>-mix</b> and it was just ignored. (This caused +a usability problem). + + +<DT><B>-gamma=</b> <i>value</i> + +<DD>Converts the image to a new display-gamma value. If a gAMA chunk +is present in the <I>png-file</I>, <b>pngtopnm</b> uses the specified +image-gamma value. If not, <b>pngtopnm</b> considers the image-gamma +to be 1.0. Based on the image-gamma and the display-gamma given with +this option, <b>pngtopnm</b> adjusts the colors written to the +<I>pnm-file</I>. + +<p>Because the gammas of uncompensated monitors are around 2.6, which results +in an image-gamma of 0.45, some typical situations are: +when the image-gamma is 0.45 (use -verbose to check) and the picture is too +light, your system is gamma-corrected, so convert with "-gamma 1.0". +When no gAMA chunk is present or the image-gamma is 1.0, use 2.2 to make the +picture lighter and 0.45 to make the picture darker. + +<DT><B>-text=</b><i>file</i> + +<DD>Writes the tEXt and zTXt chunks to a file, in a format as +described in the <b>pnmtopng</b> user manual. These chunks contain +text comments or annotations. + +<DT><B>-time</B> + +<DD>Prints the tIME chunk to stderr. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtopng.html">pnmtopng</A>, +<b>ptot</b>, +<A HREF="pnmgamma.html">pnmgamma</A>, +<A HREF="pnm.html">pnm</A> + +<p>For information on the PNG format, see <a +href="http://schaik.com/png">http://schaik.com/png</a>. + +<A NAME="lbAG"> </A> +<H2>NOTE</H2> + +<p>A PNG image contains a lot of information that can't be represented in +Netpbm formats. Therefore, you lose information when you convert to +another format with "pngtopnm | pnmtoxxx". If there is a specialized +converter that converts directly to the other format, e.g. <b>ptot</b> +to convert from PNG to TIFF, you'll get better results using that. + +<A NAME="lbAH"> </A> +<H2>LIMITATIONS</H2> + +There could be an option to read the comment text from pnm comments instead +of a separate file. + +<P>The program could be much faster, with a bit of code optimizing. +As with any Netpbm program, speed always takes a back seat to quick +present and future development. + +<A NAME="lbAI"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1995-1997 by Alexander Lehmann and Willem van Schaik. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">NOTE</A> +<LI><A HREF="#lbAH">LIMITATIONS</A> +<LI><A HREF="#lbAI">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pnm.html b/pnm.html new file mode 100644 index 00000000..6223f1d3 --- /dev/null +++ b/pnm.html @@ -0,0 +1,62 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>The PNM Format</TITLE> +<META NAME="manual_section" CONTENT="5"> +</HEAD> +<BODY> + +<H1>pnm</H1> +Updated: 03 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnm - Netpbm superformat + +<H2 id="description">DESCRIPTION</H2> + +<P>The PNM format is just an abstraction of the PBM, PGM, and PPM +formats. I.e. the name "PNM" refers collectively to +PBM, PGM, and PPM. + +<P>The name "PNM" is an acronym derived from "Portable +Any Map." This derivation makes more sense if you consider +it in the context of the other Netpbm format names: PBM, PGM, and PPM. + +<P>The more general term "Netpbm format" refers to the PNM +formats plus PAM. + +<p>PNM is principally used with <a href="index.html">Netpbm</a>. + +<P>Note that besides being names of formats, PBM, PGM, PPM, and PNM +are also classes of programs. A PNM program can take PBM, PGM, or PPM +input. That's nothing special -- a PPM program can too. But a PNM +program can often produce multiple output formats as well, and a PNM +program can see the difference between PBM, PGM, and PPM input and +respond to each differently whereas a PPM program sees everything as +if it were PPM. This is discussed more in <a href="index.html">the +description of the netpbm programs</a>. + +<P>"pnm" also appears in the names of the most general <a +href="libnetpbm.html">Netpbm library routines</a>, some of which aren't even +related to the PNM format. + +<H2 id="seealso">SEE ALSO</H2> +<A HREF="ppm.html">ppm</A>, +<A HREF="pgm.html">pgm</A>, +<A HREF="pbm.html">pbm</A>, +<A HREF="pam.html">pam</A>, +<A HREF="directory.html">programs that process PNM</A>, +<A HREF="libnetpbm.html">libnetpbm</A> + + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pnmalias.html b/pnmalias.html new file mode 100644 index 00000000..e8e0528e --- /dev/null +++ b/pnmalias.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmalias User Manual</TITLE></HEAD> +<BODY> +<H1>pnmalias</H1> +Updated: 15 March 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmalias - antialias a PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmalias</B> + +[<B>-bgcolor</B> <I>color</I>] + +[<B>-fgcolor</B> <I>color</I>] + +[<B>-bonly</B>] + +[<B>-fonly</B>] + +[<B>-balias</B>] + +[<B>-falias</B>] + +[<B>-weight</B> <I>w</I>] + +[<I>pnmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmalias</b> reads a PNM image as input, and applies +anti-aliasing to background and foreground pixels. If the input file +is a PBM, <b>pnmalias</b> promotes the output anti-aliased image to a +PGM, and prints a message informing the user of the change in format. + +<H2 id="options">OPTIONS</H2> + +<P><B>-bgcolor</B> <I>colorb</I> sets the background color the +<i>colorb</i>. + +<p><B>-fgcolor</B> <I>colorf</I> sets the foreground color to +<i>colorf</i>. + +<p>Pixels with these values will be anti-aliased. By default, +<b>pnmalias</b> takes the background color to be black, and foreground +color to be white. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<P>Note that even when dealing with PGMs, background and foreground +colors need to be specified in the fashion described above. In this +case, <b>pnmalias</b> takes the background and foreground pixel values +to be the value of the red component for the specified color. + +<P><B>-bonly</B> says to apply anti-aliasing only to the background pixels. + +<p><B>-fonly</B> says to apply anti-aliasing only to the foreground pixels. + +<P><B>-balias</B> says to apply anti-aliasing to all pixels surrounding +background pixels. + +<P><B>-falias</B> says to apply anti-aliasing to all pixels surrounding +foreground pixels. + +<p>If you specify neither <b>-balias</b> nor <b>-falias</b>, +<b>pnmalias</b> applies anti-aliasing only among neighboring +background and foreground pixels. + +<P><B>-weight</B> <I>w</I> says to use <I>w</I> as the central weight +for the aliasing filter. <I>w</I> must be a real number in the range +0 < <I>w</I> < 1. The lower the value of <I>w</I> is, the +"blurrier" the output image is. The default is w = 1/3. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pbmtext.html">pbmtext</A>, +<A HREF="pnmsmooth.html">pnmsmooth</A>, +<A HREF="pnm.html">pnm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1992 by Alberto Accomazzi, Smithsonian Astrophysical Observatory. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmarith.html b/pnmarith.html new file mode 100644 index 00000000..41439084 --- /dev/null +++ b/pnmarith.html @@ -0,0 +1,29 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pnmarith User Manual</title></HEAD> + +<BODY> +<H1>pnmarith</H1> +Updated: 22 June 2002 +<BR> +<H2>NAME</H2> +pnmarith - perform arithmetic on two PNM images + +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>Starting with Netpbm 10.3, <b>pnmarith</b> is obsolete. Use +<a href="pamarith.html"><b>pamarith</b></a> instead. + +<b>pamarith</b> is backward compatible with <b>pnmarith</b> except where +your input images have different depths. <b>pnmarith</b> would convert +the one with the lesser depth to have the higher depth before doing the +arithmetic. With <b>pamarith</b>, you must do that step separately, using +<b>pgmtoppm</b>. + +</BODY> +</HTML> + + + diff --git a/pnmcat.html b/pnmcat.html new file mode 100644 index 00000000..e47b9b51 --- /dev/null +++ b/pnmcat.html @@ -0,0 +1,91 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmcat User Manual</TITLE></HEAD> +<BODY> +<H1>pnmcat</H1> +Updated: 12 March 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmcat - concatenate Netpbm images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmcat</B> + +{<B>-leftright</B> | <B>-lr</B> | <B>-topbottom</b> | <b>-tb</b>} + +[<B>-white</B>|<B>-black</B>] + +[<B>-jtop</B>|<B>-jbottom</B>|<B>-jcenter</b>] + +<I>pnmfile</i> ... + + +<P> +Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmcat</b> reads one or more PNM images as input, concatenates them +either left to right or top to bottom, and produces a single PNM image +as output. + +<p>To do the reverse, you might use <B>pamdice</B> to split an image +up into smaller ones of equal size or <B>pamcut</B> to chop off part +of an image or extract part of an image. + +<P><B>pnmtile</B> concatenates a single input image to itself repeatedly. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>If the PNM images are not all the same height (left-right) or width +(top-bottom), the smaller ones have to be justified with the largest. +By default, <b>pnmcat</b> centers them, but you can specify +justification to one side or the other with one of the +<b>-j</b><i>xxx</i> options. So, <B>-topbottom -jleft</B> would stack +the PNMs on top of each other, flush with the left edge. + +<P>The <B>-white</B> and <B>-black</B> options specify what color to +use to fill in the extra space when doing this justification. If +neither is specified, <b>pnmcat</b> chooses whichever seems to be +right for the images. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamdice.html">pamdice</A></B>, + +<B><A HREF="pnmtile.html">pnmtile</A></B>, + +<B><A HREF="pamcut.html">pamcut</A></B>, + +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmcolormap.html b/pnmcolormap.html new file mode 100644 index 00000000..a7752d18 --- /dev/null +++ b/pnmcolormap.html @@ -0,0 +1,229 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmcolormap User Manual</TITLE></HEAD> +<BODY> +<H1>pnmcolormap</H1> +Updated: 23 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmcolormap - create quantization color map for a Netpbm image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmcolormap</B> + +[<B>-center</B>|<B>-meancolor</B>|<B>-meanpixel</B>] + +[<B>-spreadbrightness</B>|<B>-spreadluminosity</B>] + +[<B>-sort</B>] + +[<B>-square</B>] + +<I>ncolors</I>|<B>all</B> + +[<I>pnmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and +its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmcolormap</b> reads a PNM or PAM image as input, chooses +<I>ncolors</I> colors to best represent the image and writes a PNM +color map defining them as output. A PAM image may actually contain +tuples of any kind, but <b>pnmcolormap</b>'s concept of the tuple values +that best represent the ones present in the image may not make sense if +the tuple type isn't RGB or GRAYSCALE. The design of the program, and +the rest of this manual, assumes the tuples represent colors. + +<P>You can use this map as input to <B>pnmremap</B> on the same input +image to quantize the colors in that image, I.e. produce a similar +image with fewer colors. <B>pnmquant</B> does both the <B>pnmcolormap</B> +and <B>pnmremap</B> steps for you. + +<P>A PNM colormap is a PNM image of any dimensions that contains at +least one pixel of each color in the set of colors it represents. The +ones <b>pnmcolormap</b> generates have exactly one pixel of each color, +except where padding is necessary with the <b>-square</b> option. + +<P>The quantization method is Heckbert's "median cut". +See <a href="#quant">QUANTIZATION METHOD</a>. + +<P>The output image is of the same format (PBM, PGM, PPM, PAM) as the +input image. Note that a colormap of a PBM image is not very +interesting. + +<P>The colormap generally has the same maxval as the input image, but +<B>pnmcolormap</B> may reduce it if there are too many colors in the +input, as part of its quantization algorithm. + +<p><b>pnmcolormap</b> works on a multi-image input stream. In that +case, it produces one colormap that applies to all of the colors in +all of the input images. All the images must have the same format, +depth, and maxval (but may have different height and width). This is +useful if you need to quantize a bunch of images that will form a +movie or otherwise be used together -- you generally want them all to +draw from the same palette, whereas computing a colormap separately +from each image would make the same color in two images map to +different colors. Before Netpbm 10.31 (December 2005), <b>pnmcolormap</b> +ignored any image after the first. + +<P>If you want to create a colormap without basing it on the colors in +an input image, <B>pamseq</B>, <b>ppmmake</b>, and <b>pnmcat</b> can +be useful. + +<A NAME="lbAE"> </A> +<H2>PARAMETERS</H2> + +<P>The single parameter, which is required, is the number of colors you want +in the output colormap. <B>pnmcolormap</B> may produce a color map with slightly fewer colors than that. You may +specify <B>all</B> to get a colormap of every color in the input image (no quantization). + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-sort</B> + +<DD>This option causes the output colormap to be sorted by the red +component intensity, then the green, then the blue in ascending order. +This is an insertion sort, so it is not very fast on large colormaps. +Sorting is useful because it allows you to compare two sets of colors. + +<DT><B>-square</B> + +<DD>By default, <B>pnmcolormap</B> produces as the color map a PPM +image with one row and one column for each color in the colormap. +This option causes <B>pnmcolormap</B> instead to produce a PPM image +that is within one row or column of being square, with the last pixel +duplicated as necessary to create a number of pixels which is such an +almost-perfect square. + +<DT><B>-verbose</B> + +<DD>This option causes <B>pnmcolormap</B> to display messages to +Standard Error about the quantization. <DT><B>-center</B> + +<DT><B>-meancolor</B> + +<DT><B>-meanpixel</B> + +<DT><B>-spreadbrightness</B> + +<DT><B>-spreadluminosity</B> + +<DD>These options control the quantization algorithm. See <a +href="#quant">QUANTIZATION METHOD</a>. + +</DL> + + +<A NAME="quant"> </A> +<H2>QUANTIZATION METHOD</H2> + +<P>A quantization method is a way to choose which colors, being fewer +in number than in the input, you want in the output. +<B>pnmcolormap</B> uses Heckbert's "median cut" quantization +method. + +<P>This method involves separating all the colors into +"boxes," each holding colors that represent about the same +number of pixels. You start with one box and split boxes in two until +the number of boxes is the same as the number of colors you want in +the output, and choose one color to represent each box. + +<P>When you split a box, you do it so that all the colors in one +sub-box are "greater" than all the colors in the other. +"Greater," for a particular box, means it is brighter in the +color component (red, green, blue) which has the largest spread in +that box. <B>pnmcolormap</B> gives you two ways to define +"largest spread.": 1) largest spread of brightness; 2) +largest spread of contribution to the luminosity of the color. +E.g. red is weighted much more than blue. Select among these with the +<B>-spreadbrightness</B> and <B>-spreadluminosity</B> options. The +default is <B>-spreadbrightness</B>. + +<P><B>pnmcolormap</B> provides three ways of choosing a color to +represent a box: 1) the center color - the color halfway between the +greatest and least colors in the box, using the above definition of +"greater"; 2) the mean of the colors (each component +averaged separately by brightness) in the box; 3) the mean weighted by +the number of pixels of a color in the image. + +<P>Note that in all three methods, there may be colors in the output +which do not appear in the input at all. + +<P>Select among these with the <B>-center</B>, <B>-meancolor</B>, and +<B>-meanpixel</B> options. The default is <B>-center</B>. + +<A NAME="lbAG"> </A> +<H2>REFERENCES</H2> + +"Color Image Quantization for Frame Buffer Display" by Paul Heckbert, +SIGGRAPH '82 Proceedings, page 297. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="ppmquantall.html">ppmquantall</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="pamseq.html">pamseq</A></B>, +<B><A HREF="ppmmake.html">ppmmake</A></B>, +<B><A HREF="pnmcat.html">pnmcat</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<P>Before Netpbm 10.15 (April 2003), <b>pnmcolormap</b> used a lot +more memory for large images because it kept the entire input image in +memory. Now, it processes it a row at a time, but because it +sometimes must make multiple passes through the image, it first copies +the input into a temporary seekable file if it is not already in a seekable +file. + +<p><b>pnmcolormap</b> first appeared in Netpbm 9.23 (January 2002). +Before that, its function was available only as part of the function +of <b>pnmquant</b> (which was derived from the much older +<b>ppmquant</b>). Color quantization really has two main subfunctions, so +Netpbm 9.23 split it out into two separate programs: +<b>pnmcolormap</b> and <b>pnmremap</b> and then Netpbm 9.24 replaced +<b>pnmquant</b> with a program that simply calls <b>pnmcolormap</b> and +<b>pnmremap</b>. + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">PARAMETERS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#quant">QUANTIZATION METHOD</A> +<LI><A HREF="#lbAG">REFERENCES</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmcomp.html b/pnmcomp.html new file mode 100644 index 00000000..5b5641e5 --- /dev/null +++ b/pnmcomp.html @@ -0,0 +1,69 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmcomp User Manual</TITLE></HEAD> +<BODY> +<H1>pnmcomp</H1> +Updated: 15 February 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmcomp - composite (overlay) two PNM images together + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmcomp</B> + +[<B>-align=</B>{<B>left</B>|<B>center</B>|<B>right</B>| +<B>beyondleft</b>|<b>beyondright</b>}] +<BR> +[<B>-valign=</B>{<B>top</B>|<B>middle</B>|<B>bottom</B>| +<b>above</b>|<b>below</b>}] +<BR> +[<B>-xoff=</B><I>X</I>] +[<B>-yoff=</B><I>Y</I>] +<BR> +[<B>-alpha=</B><I>alpha-pgmfile</I>] +[<B>-invert</B>] +[<B>-opacity=<i>opacity</i></B>] +<BR> +<I>overlay_file</I> +[<I>underlying_file</I> [<I>output_file</I>]] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmcomp</b> was obsoleted by <a +href="pamcomp.html"><b>pamcomp</b></a>, introduced with Netpbm 10.21 +(March 2004). <b>pamcomp</b> is backward compatible with +<b>pnmcomp</b>, plus adds many additional functions, including the +ability to process PAM images, and tends to produce better transparency +results. + +<p><b>pnmcomp</b> remains in the Netpbm package because it probably +has fewer bugs for now than <b>pamcomp</b>, and is faster. Some day, +<b>pnmcomp</b> will probably become an alias for <b>pamcomp</b>. + +<p>You can use the <b>pamcomp</b> documentation for <b>pnmcomp</b>, +considering the following differences: + +<ul> +<li><b>pnmcomp</b> options are a subset of <b>pamscale</b>'s, as + documented above. +<li><b>pnmcomp</b> always assumes the input is linear, as <b>pamcomp</b> + does when you specify its <b>-linear</b> option. +<li><b>pnmcomp</b> cannot process PAM images. +</ul> + +</BODY> +</HTML> + diff --git a/pnmconvol.html b/pnmconvol.html new file mode 100644 index 00000000..cce61cde --- /dev/null +++ b/pnmconvol.html @@ -0,0 +1,163 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmconvol User Manual</TITLE></HEAD> +<BODY> +<H1>pnmconvol</H1> +Updated: 29 June 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmconvol - general MxN convolution on a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmconvol</B> + +<I>convolution_matrix_file</I> +[-nooffset] +[<I>pnmfile</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmconvol</b> reads two PNM images as input, convolves the +second using the first, and writes a PNM image as output. + +<P>Convolution means replacing each pixel with a weighted average of +the nearby pixels. The weights and the area to average are determined +by the convolution matrix (sometimes called a convolution kernel), +which you supply by way of the PNM image in the file you identify with +the <i>convolution_matrix_file</i> argument. There are two ways +<b>pnmconvol</b> interprets the PNM convolution matrix image pixels as +weights: with offsets, and without offsets. + +<p>The simpler of the two is without offsets. That is what happens +when you specify the <b>-nooffset</b> option. In that case, +<b>pnmconvol</b> simply normalizes the sample values in the PNM image +by dividing by the maxval. + +<p>For example, here is a sample convolution file that causes an output pixel +to be a simple average of its corresponding input pixel and its 8 neighbors, +resulting in a smoothed image: + +<PRE> + P2 + 3 3 + 18 + 2 2 2 + 2 2 2 + 2 2 2 +</PRE> + +<p>(Note that the above text is an actual PGM file -- you can cut and paste +it. If you're not familiar with the plain PGM format, see +<a href="pgm.html">the PGM format specification</a>). + +<p><b>pnmconvol</b> divides each of the sample values (2) by the maxval +(18) so the weight of each of the 9 input pixels gets is 1/9, which is +exactly what you want to keep the overall brightness of the image the +same. <b>pnmconvol</b> creates an output pixel by multiplying the +values of each of 9 pixels by 1/9 and adding. + +<p>Note that with maxval 18, the range of possible values is 0 to 18. +After scaling, the range is 0 to 1. + +<p>For a normal convolution, where you're neither adding nor +subtracting total value from the image, but merely moving it around, +you'll want to make sure that all the scaled values in (each plane of) +your convolution PNM add up to 1, which means all the actual sample +values add up to the maxval. + +<p>When you <em>don't</em> specify <b>-nooffset</b>, <b>pnmconvol</b> +applies an offset, the purpose of which is to allow you to indicate +negative weights even though PNM sample values are never negative. In +this case, <b>pnmconvol</b> subtracts half the maxval from each sample +and then normalizes by dividing by half the maxval. So to get the +same result as we did above with <b>-nooffset</b>, the convolution +matrix PNM image would have to look like this: + +<PRE> + P2 + 3 3 + 18 + 10 10 10 + 10 10 10 + 10 10 10 +</PRE> + +<P>To see how this works, do the above-mentioned offset: 10 - 18/2 +gives 1. The normalization step divides by 18/2 = 9, which makes it +1/9 - exactly what you want. The equivalent matrix for 5x5 smoothing +would have maxval 50 and be filled with 26. + +<p>Note that with maxval 18, the range of possible values is 0 to 18. +After offset, that's -9 to 9, and after normalizing, the range is -1 to 1. + +<p>For a normal convolution, where you're neither adding nor +subtracting total value from the image, but merely moving it around, +you'll want to make sure that all the offset, scaled values in (each +plane of) your convolution PNM add up to 1. That means the actual +sample values, less half the maxval, add up to half the maxval as in +the example above. + +<P>The convolution file will usually be a PGM, so that the same +convolution gets applied to each color component. However, if you +want to use a PPM and do a different convolution to different +colors, you can certainly do that. + +<P>At the edges of the convolved image, where the convolution matrix +would extend over the edge of the image, <B>pnmconvol</B> just copies +the input pixels directly to the output. + +<p>The convolution computation can result in a value which is outside the +range representable in the output. When that happens, <b>pnmconvol</b> just +clips the output, which means brightness is not conserved. + +<A NAME="history"> </A> +<H2>HISTORY</H2> +<p>The <b>-nooffset</b> option was new in Netpbm 10.23 (July 2004). + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>, +<B><A HREF="pgmmorphconv.html">pgmmorphconv</A></B>, +<B><A HREF="pnmnlfilt.html">pnmnlfilt</A></B>, +<B><A HREF="pgmkernel.html">pgmkernel</A></B>, +<B><A HREF="pamgauss.html">pamgauss</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. +<BR> + +Modified 26 November 1994 by Mike Burns, <A +HREF="mailto:burns@chem.psu.edu">burns@chem.psu.edu</A> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAF">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pnmcrop.html b/pnmcrop.html new file mode 100644 index 00000000..2d1542d5 --- /dev/null +++ b/pnmcrop.html @@ -0,0 +1,188 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmcrop User Manual</TITLE></HEAD> +<BODY> +<H1>pnmcrop</H1> +Updated: 30 November 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmcrop - crop a PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmcrop</B> + +[<B>-white</B>|<B>-black</B>|<B>-sides</B>] + +[<B>-left</B>] + +[<B>-right</B>] + +[<B>-top</B>] + +[<B>-bottom</B>] + +[<B>-margin=</B><i>pixels</i>] + +[<B>-borderfile=</B><i>filename</i>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmcrop</b> reads a PBM, PGM, or PPM image as input, removes +borders that are the background color, and produces the same type of +image as output. + +<P>If you don't specify otherwise, <B>pnmcrop</B> assumes the +background color is whatever color the top left and right corners of +the image are and if they are different colors, something midway +between them. You can specify that the background is white or black +with the <B>-white</B> and <B>-black</B> options or make +<B>pnmcrop</B> base its guess on all four corners instead of just two +with <B>-sides</B>. + +<P>By default, <B>pnmcrop</B> chops off any stripe of background color +it finds, on all four sides. You can tell <B>pnmcrop</B> to remove +only specific borders with the <B>-left</B>, <B>-right</B>, +<B>-top</B>, and <B>-bottom</B> options. + +<p>If you want to leave some border, use the <b>-margin</b> option. It +will not only spare some of the border from cropping, but will fill in +(with what <b>pnmcrop</b> considers the background color) if necessary +to get up to that size. + +<p>If the input is a multi-image stream, <b>pnmcrop</b> processes each +one independently and produces a multi-image stream as output. It chooses +where to crop independently for each image. So if you start with a stream +of images of the same dimensions, you may end up with images of differing +dimensions. Before Netpbm 10.37 (December 2006), <b>pnmcrop</b> ignored +all input images but the first. + +<P>If you want to chop a specific amount off the side of an image, use +<B>pamcut</B>. + +<P>If you want to add different borders after removing the existing +ones, use <B>pnmcat</B> or <B>pamcomp</B>. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-white</B> + +<DD>Take white to be the background color. <B>pnmcrop</B> removes +borders which are white. + +<DT><B>-black</B> + +<DD>Take black to be the background color. <B>pnmcrop </B> removes +borders which are black. + +<DT><B>-sides</B> + +<DD>Determine the background color from the colors of the four corners +of the input image. <B>pnmcrop</B> removes borders which are of the +background color. + +<P>If at least three of the four corners are the same color, +<B>pnmcrop </B> takes that as the background color. If not, +<B>pnmcrop</B> looks for two corners of the same color in the +following order, taking the first found as the background color: top, +left, right, bottom. If all four corners are different colors, +<B>pnmcrop</B> assumes an average of the four colors as the background +color. + +<P>The <B>-sides</B> option slows <B>pnmcrop</B> down, as it reads the +entire image to determine the background color in addition to the up +to three times that it would read it without <B>-sides</B>. + +<DT><B>-left</B> + +<DD>Remove any left border. + +<DT><B>-right</B> + +<DD>Remove any right border. + +<DT><B>-top</B> + +<DD>Remove any top border. + +<DT><B>-bottom</B> + +<DD>Remove any bottom border. + +<dt><b>-margin=</b><i>pixels</i> + +<dd>Leave <i>pixels</i> pixels of border. Expand the border to this size +if necessary. + +<p>This option was new in Netpbm 10.29 (August 2005). + +<dt><b>-borderfile=</b><i>filename</i> + +<dd>Use the image in the file named <i>filename</i> instead of the input +image to determine where the borders of the input image are. + +<p>Without this option, <b>pnmcrop</b> examines the input image and +figures out what part of the image is border and what part is +foreground (not border). With this option, <b>pnmcrop</b> finds the +borders in one image, then uses the those four border sizes (left, +right, top, bottom) in cropping a different image. + +<p>The point of this is that you may want to help <b>pnmcrop</b> to +come to a different conclusion as to where the border are by +preprocessing the input image. For example, consider an image that +has speckles of noise in its borders. <b>pnmcrop</b> isn't smart +enough to recognize these as noise; it sees them as foreground image. +So <b>pnmcrop</b> considers most of your borders to be foreground and +does not crop them off as you want. To fix this, run the image +through a despeckler such as <b>pbmclean</b> and tell <b>pnmcrop</b> +to use the despeckled version of the image as the <b>-borderfile</b> +image, but the original speckled version as the input image. That +way, you crop the borders, but retain the true foreground image, +speckles and all. + +<p>This option was new in Netpbm 10.29 (August 2005). + +<DT><B>-verbose</B> + +<DD>Print on Standard Error information about the processing, +including exactly how much is being cropped off of which sides. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamcut.html">pamcut</A></B>, + +<B><A HREF="pamfile.html">pamfile</A></B>, + +<B><A HREF="pnm.html">pnm</A></B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmcut.html b/pnmcut.html new file mode 100644 index 00000000..fed6b74d --- /dev/null +++ b/pnmcut.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmcut User Manual</TITLE></HEAD> +<BODY> +<H1>pnmcut</H1> +Updated: 15 March 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmcut - cut a rectangle out of a PBM, PGM, or PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmcut</B> + +[<B>-left </B><I>leftcol</I>] + +[<B>-right </B><I>rightcol</I>] + +[<B>-top </B><I>toprow</I>] + +[<B>-bottom </B><I>bottomrow</I>] + +[<B>-width </B><I>width</I>] + +[<B>-height </B><I>height</I>] + +[<B>-pad</B>] + +[<B>-verbose</B>] + +[<I>left top width height</I>] + +[<I>pnmfile</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmcut</b> was obsoleted by <a +href="pamcut.html"><b>pamcut</b></a>, introduced with Netpbm 9.20 (May +2001). <b>pamcut</b> is backward compatible with <b>pnmcut</b>, plus +adds many additional functions, including the ability to process PAM +images. + +<p><b>pnmcut</b> remains in the Netpbm package because it probably has +fewer bugs for now than <b>pamcut</b>. Some day, <b>pnmcut</b> will +probably become an alias for <b>pamcut</b>. + +<p>You can use the <b>pamcut</b> documentation for <b>pnmcut</b>, as long +as you avoid any function which it says was added after Netpbm 9.20. + +</BODY> +</HTML> + + + diff --git a/pnmdepth.html b/pnmdepth.html new file mode 100644 index 00000000..f0ff2048 --- /dev/null +++ b/pnmdepth.html @@ -0,0 +1,31 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pnmdepth User Manual</title></HEAD> + +<BODY> +<H1>pnmdepth</H1> +Updated: 06 March 2006 +<BR> +<H2>NAME</H2> +pnmdepth - change the maxval in a PNM image + +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>Starting with Netpbm 10.32 (Februrary 2006), <b>pnmdepth</b> is +obsolete. Use <a href="pamdepth.html"><b>pamdepth</b></a> instead. + +<b>pamdepth</b> is backward compatible with <b>pnmdepth</b>. You can +use the <b>pamdepth</b> manual for <b>pnmdepth</b> as long as you ignore +features that were added after Netpbm 10.31. + +<p>For backward compatibility, the name 'pnmdepth' continues to exist +as an alias for 'pamdepth'. But due to a bug, that name doesn't work +in Netpbm 10.32. You have to fix the symbolic link. + +</BODY> +</HTML> + + + diff --git a/pnmenlarge.html b/pnmenlarge.html new file mode 100644 index 00000000..50d0367f --- /dev/null +++ b/pnmenlarge.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnmenlarge User Manual</TITLE> +</HEAD><BODY> +<H1>pgmedge</H1> +Updated: September 2004 +<BR> +<H2>NAME</H2> +<B>pnmenlarge</B> - replaced by pamenlarge +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pnmenlarge</b> was replaced in Netpbm 10.25 (October 2004) by +<b><a href="pamenlarge.html">pamenlarge</a></b>. + +<P><B>pamenlarge</b> is backward compatible with <b>pnmenlarge</b>, +but works on PAM images too. + +</BODY> +</HTML> diff --git a/pnmfile.html b/pnmfile.html new file mode 100644 index 00000000..47945d11 --- /dev/null +++ b/pnmfile.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnmfile User Manual</TITLE></HEAD> +<BODY> +<H1>pnmfile</H1> +Updated: September 2002 +<BR> +<H2>NAME</H2> +<b>pnmfile</b> - replaced by pamfile +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pnmfile</b> was replaced in Netpbm 10.9 (September 2002) by +<b><a href="pamfile.html">pamfile</a></b>. + +<P><B>pamfile</b> is backward compatible with <b>pnmfile</b>, but works on +PAM images too. + +</BODY> +</HTML> diff --git a/pnmflip.html b/pnmflip.html new file mode 100644 index 00000000..7fc07294 --- /dev/null +++ b/pnmflip.html @@ -0,0 +1,25 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnmflip User Manual</TITLE></HEAD> +<BODY> +<H1>pnmflip</H1> +<BR> +<p><b>pnmflip</b> was replaced in Netpbm 10.13 (December 2002) by +<b><a href=pamflip.html>pamflip</a></b>. + +<P><B>pamflip</b> is mostly backward compatible with <b>pnmflip</b>, +but works on PAM images too. + +<P>One way <b>pamflip</b> is not backward compatible with <b>pnmflip</b> +is that <b>pnmflip</b> lets you specify any number of basic flip options, +whereas <b>pamflip</b> requires exactly one. (<b>pamflip</b> provides +the <b>-xform</b> option for requesting multiple transformations, though). +Because of this incompatibility, <b>pnmflip</b> still exists as a +separate program, and all it does is translate its options to <b>pamflip</b> +style and run <b>pamflip</b>. + +<P>You should not make any new use of <b>pnmflip</b> and if you modify an +existing use, you should upgrade to <b>pamflip</b>. + +</BODY> +</HTML> diff --git a/pnmgamma.html b/pnmgamma.html new file mode 100644 index 00000000..5ce9ceae --- /dev/null +++ b/pnmgamma.html @@ -0,0 +1,314 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmgamma User Manual</TITLE></HEAD> +<BODY> +<H1>pnmgamma</H1> +Updated: 18 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmgamma - perform gamma correction on a PNM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmgamma </B> + +<br> +[ + <B>-bt709ramp</B> | + <B>-srgbramp</B> | +] +[<b>-ungamma</b>] +<br> +[<I>gamma</I> | <i>redgamma</i> <i>greengamma</i> <i>bluegamma</i> +[<I>pnmfile</I>]] + +<b>pnmgamma</b> +{ + <b>-bt709tolinear</b> | + <b>-lineartobt709</b> | + <b>-bt709tosrgb</b> | + <b>-srgbtobt709</b> +} +[<b>-gamma=</b><i>float</i>] +[<b>-rgamma=</b><i>float</i>] +[<b>-ggamma=</b><i>float</i>] +[<b>-bgamma=</b><i>float</i>] + +[<i>pnmfile</i>] + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>Pnmgamma</b> performs gamma correction on pseudo-PNM images. + +<P>The PPM format specification specifies that certain sample values +in a file represent certain light intensities in an image. In +particular, they specify that the sample values are directly +proportional to luminance as defined by ITU-R Recommendation BT.709. + +<P>However, people sometimes work with approximations of PPM and PGM +where the sample values represent intensity in different ways. For +example, the sample value might be directly proportional to radiance +(often called "linear intensity"). Or a different gamma +transfer function may be used. The relationship between the sample +values and radiance is often called a gamma transfer function. + +<P><B>pnmgamma</B> allows you to manipulate the gamma transfer +function, thus working with and/or creating pseudo-PPM files that are +useful for various things. + +<P>For example, if you feed a true PPM to <kbd>pnmgamma -bt709tolinear +</kbd>, you get as output a file which is PPM in every respect except +that the sample values are radiances. If you feed such a file to +<kbd>pnmgamma -linearto709</kbd>, you get back a true PPM. + +<P>The situation for PGM images is analogous. And <B>pnmgamma</B> +treats PBM images as PGM images. + +<P>When you feed a radiance-proportional pseudo-PPM image to a display +program that expects a true PPM, the display appears darker than it +should, so <B>pnmgamma</B> has the effect of lightening the image. +When you feed a true PPM to a display program that expects +radiance-proportional sample values, and therefore does a gamma +correction of its own on them, the display appears lighter than it +should, so <B>pnmgamma</B> with a gamma value less than one (the +multiplicative inverse of whatever gamma value the display program +uses) has the effect of darkening the image. + +<H2 id="parameters">PARAMETERS</H2> + +<p>The form of the parameters depends on whether you're using the old +syntax or the new syntax. With the old syntax, the parameters are +a mixture of gamma values and the input file name. With the new +syntax, the only parameter is the input file name and you specify gamma +values with option. + +<p>You use the old syntax if you specify <b>-bt709ramp</b> (or +its synonym <b>-cieramp</b>) or <b>-srgramp</b> or if you don't specify +any transfer function at all (and thus default to a simple exponential). +Otherwise, you use the new syntax. + +<p>With the old syntax, you may specify a single gamma value or 3 +separate gamma values (red, green, and blue) or no gamma values. In +any case, the meanings of those parameters is the same as the more +modern <b>-gamma</b>, <b>-rgamma</b>, <b>-ggamma</b>, and +<b>-bgamma</b> options described below. + + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<dt><b>-bt709tolinear</b> + +<dd>Convert the image from ITU Recommendation BT.709 luminance to +radiance (sometimes called "linear"). I.e. convert from +true PPM or PGM to a radiance-linear variation that can be used with +certain tools that need it. + +<p>This option was new in Netpbm 10.32 (February 2006). + +<dt><b>-lineartobt709</b> + +<dd>Convert the image from radiance to ITU Recommendation BT.709 +luminance. I.e. convert to true PPM or PGM from a "linear" +variation. + +<p>This option was new in Netpbm 10.32 (February 2006). + +<dt><b>-bt709tosrgb</b> + +<dd>Convert the image from ITU Recommendation BT.709 luminance to SRGB +luminance. I.e. convert from true PPM or PGM to an SRGB-based +variation that is required by certain tools and display devices. + +<p>This option was new in Netpbm 10.32 (February 2006). + +<dt><b>-srgbtobt709</b> + +<dd>Convert the image from SRGB luminance to ITU Recommendation BT.709 +luminance. I.e. convert to true PPM or PGM from an SRGB-based +variation. + +<p>This option was new in Netpbm 10.32 (February 2006). + + +<DT><B>-bt709ramp</B> + +<DD>Use the ITU-R Recommendation BT.709 gamma transfer function. Note +that it is true BT.709 only if you use the default gamma value +(i.e. don't specify any gamma parameters). This transfer function is +a power function modified with a linear ramp near black. + +<P>If you specify none of the transfer functions the transfer function +defaults to a simple power function. + +<P>This option was renamed in Netpbm 10.32 (February 2006). Before that, +its name is <b>-cieramp</b>. + +<dt><b>-cieramp</b> + +<dd>This is an obsolete synonym for <b>-bt709ramp</b>. + +<P>The name of this option comes from a former belief that this was a +standard of CIE (International Commission On Illumination), but it now +(August 2005) looks like it never was. + +<DT><B>-srgbramp </B> + +<DD>Use the Internation Electrotechnical Commission (IEC) SRGB gamma +transfer function (as specified in the standard IEC 61966-2-1). Note +that it is true SRGB only if you use the default gamma value +(i.e. don't specify any gamma parameters). This transfer function is +like the one selected by <B>-bt709ramp</B>, but with different constants +in it. + +<P>Note that SRGB is often spelled "sRGB". In this +document, we use standard English typography, though, which doesn't +allow for that kind of capitalization. + +<P>If you specify neither <B>-bt709ramp</B> nor <B>-srgbramp</B>, the +transfer function defaults to a simple power function. + +<DT><B>-ungamma</B> + +<DD>Apply the inverse of the specified transfer function (i.e. go from +gamma-corrected luminance to radiance). + +<p>This is valid only with <b>-bt709ramp</b> (aka <b>-cieramp</b>), +<b>-srgbramp</b>, and the default exponential transfer function. + + +<dt><b>-gamma=</b><i>float</i> + +<dd>This specifies the gamma value to use in the transfer function. All +of the transfer functions involve an exponent, and the gamma value is that +exponent. + +<p>The standards specify a particular gamma value. If you use anything +else, you are varying from the standard. + +<p>The default is the standard value. For the simple exponential transfer +function (which is not a standard), the default is 2.2. + +<p>If you specify one of the component-specific options (<b>-rgamma</b>, +etc.), that overrides the <b>-gamma</b> value. + +<p>With the <b>-bt709ramp</b> (aka <b>-cieramp</b>), <b>-srgbramp</b>, +or the default exponentional transfer function, you can't actually use +this option, but you specify the same thing with <a +href="#parameters">parameters.</a> + +<p>This option was new in Netpbm 10.32 (February 2006). + +<dt><b>-rgamma=</b><i>float</i> +<dt><b>-ggamma=</b><i>float</i> +<dt><b>-bgamma=</b><i>float</i> + +<dd>These options are just like <b>-gamma</b>, except they specify the +value for a particular one of the color components. + +<p>If you don't specify this option for a particular color component, +the default is the <b>-gamma</b> value (or <b>-gamma</b>'s default if +you didn't specify that either). + +<p>With the <b>-bt709ramp</b> (aka <b>-cieramp</b>), <b>-srgbramp</b>, +or the default exponentional transfer function, you can't actually use +this option, but you specify the same thing with <a +href="#parameters">parameters.</a> + +<p>This option was new in Netpbm 10.32 (February 2006). + +<dt><b>-maxval=</b><i>maxval</i> + +<dd>This is the maxval of the output image. By default, the maxval of +the output is the same as that of the input. + +<p>Because the transformation is not linear, you need a greater maxval +in the output in order not to lose any information from the input. +For example, if you convert to radiance-linear sample values with with +<kbd>-ungamma -bt709ramp</kbd> and default gamma value, and your maxval is +255 on both input and output, 3 different input sample values all +generate output sample value 254. In order to have a different output +sample value for each input sample value, you would need an output +maxval at least 3 times the input maxval. + +<p>This option was new in Netpbm 10.32 (February 2006). Before that, +you can achieve the same result by increasing the maxval of the input +or decreasing the maxval of the output using <b>pnmdepth</b>. + +</DL> + +<H2 id="gamma">WHAT IS GAMMA?</H2> + +<P>A good explanation of gamma is in Charles Poynton's Gamma FAQ at +<A HREF="http://www.poynton.com/GammaFAQ.html"> +http://www.poynton.com/GammaFAQ.html</A> and Color FAQ at <A +HREF="http://www.poynton.com/ColorFAQ.html"> +http://www.poynton.com/ColorFAQ.html</A>. + +<P>In brief: The simplest way to code an image is by using sample +values that are directly proportional to the radiance of the color +components. Radiance is a physical quantification based on the amount +of power in the light; it is easily measurable in a laboratory, but +does not take into account what the light looks like to a person. It +wastes the sample space because the human eye can't discern +differences between low-radiance colors as well as it can between +high-radiance colors. So instead, we pass the radiance values +through a transfer function that makes it so that changing a sample +value by 1 causes the same level of perceived color change anywhere in +the sample range. We store those resulting values in the image file. +That transfer function is called the gamma transfer function and the +transformation is called gamma correcting. + +<p>The gamma-corrected value, proportional to subjective brightness, +are known as the luminance of the pixel. + +<p>There is no precise objective way to measure luminance, since it's +psychological. Also, perception of brightness varies according to a +variety of factors, including the surrounding in which an image is +viewed. Therefore, there is not just one gamma transfer function. + +<P>Virtually all image formats, either specified or de facto, use +gamma-corrected values for their sample values. + +<P>What's really nice about gamma is that by coincidence, the inverse +function that you have to do to convert the gamma-corrected values +back to radiance is done automatically by CRTs. You just apply a +voltage to the CRT's electron gun that is proportional to the +gamma-corrected sample value, and the radiance of the light that comes +out of the screen is close to the radiance value you had before you +applied the gamma transfer function! + +<P>And when you consider that computer video devices usually want you +to store in video memory a value proportional to the signal voltage +you want to go to the monitor, which the monitor turns into a +proportional drive voltage on the electron gun, it is really +convenient to work with gamma-corrected sample values. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1991 by Bill Davidson and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#parameters">PARAMETERS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#gamma">WHAT IS GAMMA?</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmhisteq.html b/pnmhisteq.html new file mode 100644 index 00000000..458b3389 --- /dev/null +++ b/pnmhisteq.html @@ -0,0 +1,198 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmhisteq User Manual</TITLE></HEAD> +<BODY> +<H1>pnmhisteq</H1> +Updated: 10 September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmhisteq - histogram equalize a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmhisteq</B> + +[<B>-gray</B>] + +[<B>-rmap</B> <I>pgmfile</I>] + +[<B>-wmap</B> <I>pgmfile</I>] + +[<B>-verbose</B>] + +[<I>pnmfile</I>] + + +<P>You can abbreviate any option to its shortest unique prefix. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pnmhisteq</B> increases the contrast of a PGM or PPM image +through the technique of "histogram equalization."[1] + +<p><b>pnmhisteq</b> computes a histogram of the luminosity of the +pixels in the image. It then calculates a mapping between each +luminosity and a new luminosity such that it spreads out intensity +levels around histogram peaks and compresses them at troughs. I.e. +it moves pixels around in the histogram so as to make it flat. It +applies that mapping to the input image to produce the output image. +The effect of this is that the image has equal numbers of pixels at each +possible intensity level, which means it uses the available levels of +intensity more efficiently and thereby has more visible detail. + +<P>Mathematically, the luminosity mapping is this: Assume the pixels +are sorted by luminosity into <i>B</i> buckets numbered from 0 (lowest +luminosity) to <i>B</i>-1. <i>N[i]</I> is the number of pixels in +bucket <I>i</I>. <I>T</I> is the total number of pixels (sum of +<i>N[i]</i> over all <i>i</i>). <i>W</i> is the luminosity of white. + +<p><b>pnmhisteq</b> replaces an input pixel whose luminosity falls into +bucket <i>j</i> with one whose luminosity is: + +<pre> + + j + --- + \ + > (N[i] / T) * W + / + --- + i=0 +</pre> + +<p>Considering a grayscale image for simplicity, this means that +pixels in the most luminous bucket become white. Pixels in the 10th +per centile of luminosity become 10% of white. + + +<P>If you're processing a related set of images, for example frames of +an animation, it's generally best to apply the same luminosity mapping +to every frame, since otherwise you'll get distracting frame-to-frame +changes in the brightness of objects. <B>pnmhisteq</B>'s <B>-wmap</B> +option allows you to save, as a PGM image, the luminosity map it +computes from an image. The <b>-rmap</b> option causes <b>pnmisteq</b> +to use such an image as its luminosity map. + +<p>So you can run <b>pnmhisteq</b> with <b>-wmap</b> on a composite +you created with <b>pnmcat</b> of the images you intend to process. +Then, you can run <b>pnmisteq</b> with <b>-rmap</b> on each of the +individual images, using the luminosity map you generated from the +composite. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-gray</B> + +<DD>When processing a pixmap, only gray pixels (those with identical +red, green, and blue values) are included in the histogram and +modified in the output image. This is a special purpose option +intended for images where the actual data are gray scale, with color +annotations you don't want modified. Weather satellite images that +show continent outlines in color are best processed using this option. +The option has no effect when the input is a graymap. + +<DT><B>-rmap</B> <I>mapfile</I> + +<DD>Process the image using the luminosity map specified by the PGM +file <I>mapfile</I>. + +The PGM image, usually created by an earlier run of <B>pnmhisteq</B> +with the <B>-wmap</B> option, contains a single row with number of +columns equal to the maxval (greatest intensity value) of the image +plus one. Each pixel in the image is transformed by looking up its +luminosity in the corresponding column in the map file (column number += luminosity) and changing it to the value given by that column. + +<DT><B>-wmap</B> <I>mapfile</I> + +<DD>Creates a PGM file <I>mapfile</I>, containing the luminosity map +computed from the histogram of the input image. This map file can be +read on subsequent runs of <B>pnmhisteq</B> with the <B>-rmap</B> +option, allowing a group of images to be processed with an identical +map. + +<DT><B>-verbose</B> + +<DD>Prints the histogram and luminosity map on Standard Error. + +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p>Histogram equalization is effective for increasing the visible +detail in scientific imagery and in some continuous-tone pictures. It +is often too drastic, however, for scanned halftone images, where it +does an excellent job of making halftone artifacts apparent. You +might want to experiment with <B>pnmnorm</B> and <B>pnmgamma</B> for +more subtle contrast enhancement. + +<P>The luminosity map file supplied by the <B>-rmap</B> option must +have the same maxval as the input image. This is always the case when +the map file was created by the <B>-wmap</B> option of +<B>pnmhisteq</B>. If this restriction causes a problem, simply adjust +the maxval of the map with <B>pamdepth</B> to agree with the input +image. + +<P>If the input is a PBM file (on which histogram equalization is an +identity operation), the only effect of passing the file through +<B>pnmhisteq</B> will be the passage of time. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmnorm.html">pnmnorm</A></B>, + +<B><A HREF="pnmcat.html">pnmcat</A></B>, + +<B><A HREF="pamdepth.html">pamdepth</A></B>, + +<B><A HREF="pnmgamma.html">pnmgamma</A></B>, + +<B><A HREF="pnm.html">pnm</A></B>, + +<DL COMPACT> +<DT>[1] + +<DD>Russ, John C. The Image Processing Handbook. Boca Raton: CRC +Press, 1992. Pages 105-110. + +</DL> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1995 by John Walker (<A +HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>). WWW home +page: <A HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A> + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided +"as is" without express or implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmhistmap.html b/pnmhistmap.html new file mode 100644 index 00000000..45d70663 --- /dev/null +++ b/pnmhistmap.html @@ -0,0 +1,188 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmhistmap User Manual</TITLE></HEAD> +<BODY> +<H1>pnmhistmap</H1> +Updated: 25 October 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmhistmap - draw a histogram for a PGM or PPM file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmhistmap</B> + +[<B>-black</B>] + +[<B>-white</B>] + +[<B>-max</B> <I>N</I>] + +[<B>-verbose</B>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmhistmap</b> reads a PNM image as input and produces an image +showing a histogram of the color (or gray) values in the input. A PGM +input results in a PBM output. A PPM input results in a PPM output +with three overlaid histograms: a red one for the red input, a green +one for the green input, and a blue one for the blue input. + +<p>For example, from the following image produces the following histogram: + +<p><img src="testimg.png" alt="image"> +<img src="testimg_histbar.png" alt="histogram from image"> + +<p>If the input is PBM, <b>pnmhistmap</B> produces an error message +and no output image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<dl> + +<dt><b>-red</b> +<dt><b>-green</b> +<dt><b>-blue</b> + +<dd>Include the indicated color component in the output. If you +specify none of these, <b>pnmhistmap</b> include all three. + +<p>These options are meaningless if the input is PGM. + +<p>These options were new in Netpbm 10.26 (January 2005). Before +that, <b>pnmhistmap</b> always included all three color components. + +<dt><b>-dots</b> + +<dd>Plot the histogram as dots. By default, <b>pnmhistmap</b> plots +bars. + +<p>Example of dots: <img src="testimg_histdot.png" alt="-dots example"> + +<p>This option was new in Netpbm 10.26 (January 2005). Before that, +<b>pnmhistmap</b> always plotted bars. + +<dt><b>-lval</b> <i>minpixval</i> +<dt><b>-rval</b> <i>maxpixval</i> + +<dd>These options specify the range of intensity values to include. +<b>pnmhistmap</b> ignores intensities less than <i>minpixval</i> and +greater than <i>maxpixval</i>. So the left side of the histogram +corresponds to <i>minpixval</i> and the right side corresponds to +<i>maxpixval</i>. + +<p>By default, <b>pnmhistmap</b> plots the entire possible range: zero +to the maxval. + +<p>These options were new in Netpbm 10.26 (January 2005). Before that, +<b>pnmhistmap</b> always plotted from zero to the maxval. + +<dt>-height +<dt>-width + +<dd>These options specify the dimensions, in pixels of the histogram image. + +<p>The default height is 200 pixels. + +<p>The default width is one pixel for each plotted intensity value (so it's +controlled by the maxval of the image and the <b>-lval</b> and <b>-rval</b> +options). The "count buckets" in the histogram are always +one pixel wide. If you specify a width less than the number of plotted +intensity values, a bucket represents more than one intensity value. +If you specify a width greater that the number of plotted intensity values, +some buckets represent no color (the count is zero). + +<p>This option was new in Netpbm 10.26 (January 2005). Before that, +the dimensions were always what the default is today. + +</dl> + + +<DL COMPACT> +<DT><B>-black </B> + +<DD>Ignore the count of black pixels when scaling the histogram. + +<DT><B>-white</B> + +<DD>Ignore the count of white pixels when scaling the histogram. + +</DL> + +<P>The -black and -white options, which can be used separately or +together, are useful for images with a large percentage of pixels +whose value is zero or 255, which can cause the remaining histogram +data to become unreadbaly small. Note that, for pixmap inputs, these +options apply to all colors; if, for example, the input has a large +number of bright-red areas, you will probably want to use the -white +option. + +<DL COMPACT> +<DT><B>-max N</B> + +<DD>Force the scaling of the histogram to use N as the largest-count value. +This is useful for inputs with a large percentage of single-color pixels +which are not black or white. + +<DT><B>-verbose</B> + +<DD>Report the progress of making the histogram, including the largest-count +value used to scale the output. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<P><b>pnmhistmap</b> assumes maxval is always 255. Images with a +smaller maxval will only use the lower-value side of the histogram. +You can overcome this either by piping the input through +<b>pamdepth</b> or by cutting and scaling the lower-value side of the +histogram. Neither is a particularly elegant solution to the problem. + +<P>The program does not allow you to specify the output size. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmhist.html">pgmhist</A>, +<A HREF="ppmhist.html">ppmhist</A>, +<A HREF="pgm.html">pgm</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<p>Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmindex.html b/pnmindex.html new file mode 100644 index 00000000..5512ae4b --- /dev/null +++ b/pnmindex.html @@ -0,0 +1,138 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmindex User Manual</TITLE></HEAD> +<BODY> +<H1>pnmindex</H1> +Updated: 9 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmindex - build a visual index of a bunch of PNM images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmindex</B> + +[<B>-size</B> <I>N</I>] + +[<B>-across</B> <I>N</I>] + +[<B>-colors</B> <I>N</I>] + +[<B>-black</B>] + +[<B>-title</B> <I>title</I>] + +[<B>-quant</B>|<B>-noquant</B>] + +<I>pnmfile</I>... + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pnmindex</B> creates an index image containing thumbnail (small) +versions of a bunch of PNM files you supply. + +<P><B>pnmindex</B> labels each thumbnail and, optionally, contains a +title. + +<P>If you just want to concatenate some images together, use +<B>pnmcat</b> for that. If you want to make a grid of the same image +repeated over and over, that's <b>pnmtile</b>. + +<p>If you want to take apart the image you generated with <b>pnmindex</b>, +use <b>pamdice</b> or <b>pamcut</b>. + +<A NAME="ixAAC"></A> +<P> +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-size</B> <I>N</I> + +<DD>The size of each thumbnail. The image is scaled to fit maximally +inside a <I>N</I> x <I>N</I> pixel box without changing its aspect +ratio. Default is 100. + +<DT><B>-across</B> <I>N</I> + +<DD>The number of thumbnails in each row. Default is 6. + +<DT><B>-colors</B> <I>N</I> + +<DD>The maximum number of colors allowed in the overall image. If it +would otherwise have more colors than these, <B>pnmindex</B> quantizes +the result. The default is 256. + +<P>However, this value is meaningless if you specify the +<B>-noquant</B> option. + +<DT><B>-black</B> + +<DD>This controls the color of the padding between the images; +normally it's white and the labels are black lettering on white +background, but the <B>-black</B> option reverses this. + +<DT><B>-title </B><I>title</I> + +<DD> +Specifies a title top place at the top of the image. +Default is no title. + +<DT><B>-quant</B> + +<DD>Enables quanization (to the number of colors specified by +<B>-colors</B>). Quantization is on by default but you can disable +it with <B>-noquant.</B> + +<DT><B>-noquant</B> + +<DD>See <B>-quant</B>. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamscale.html">pamscale</A></B>, + +<B><A HREF="pnmcat.html">pnmcat</A></B>, + +<B><A HREF="pbmtext.html">pbmtext</A></B>, + +<B><A HREF="pnmquant.html">pnmquant</A></B>, + +<B><A HREF="pamcut.html">pamcut</A></B>, + +<B><A HREF="pamdice.html">pamdice</A></B>, + +<B><A HREF="pnmtile.html">pnmtile</A></B>, + +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1991 by Jef Poskanzer. + +<p><B>-title</B> and <B>-noquant</B> added 2000 by John Heidemann. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnminterp.html b/pnminterp.html new file mode 100644 index 00000000..6c21fa30 --- /dev/null +++ b/pnminterp.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnminterp User Manual</TITLE> +</HEAD><BODY> +<H1>pnminterp</H1> +Updated: December 2001 +<BR> +<H2>NAME</H2> +<B>pnminterp</B> - replaced by pamstretch +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pnminterp</b> was replaced in Netpbm 9.21 (December 2001) by +<b><a href="pamstretch.html">pamstretch</a></b>. + +<P><B>pamstretch</b> is backward compatible with <b>pnminterp</b>, but +also recognizes PAM input, including that with an alpha channel. + +</BODY> +</HTML> diff --git a/pnminvert.html b/pnminvert.html new file mode 100644 index 00000000..ff858dfc --- /dev/null +++ b/pnminvert.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnminvert User Manual</TITLE></HEAD> +<BODY> +<H1>pnminvert</H1> +Updated: 08 August 1989 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnminvert - invert a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnminvert</B> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnminvert</b> reads a PNM image as input, inverts it black for +white, and produces a PNM image as output. + +<p>If the image is grayscale, <b>pnminvert</b> replaces a pixel with +one of complementary brightness, i.e. if the original pixel has gamma-adjusted +gray value G, the output pixel has gray value maxval - G. + +<p>If the image is color, <b>pnminvert</b> inverts each individual RGB +component the same as for a grayscale image. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmmargin.html b/pnmmargin.html new file mode 100644 index 00000000..f9f3c223 --- /dev/null +++ b/pnmmargin.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmmargin User Manual</TITLE></HEAD> +<BODY> +<H1>pnmmargin</H1> +Updated: 01 June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmmargin - add a border to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmmargin</B> + +[<B>-white</B>|<B>-black</B>|<B>-color</B> + +<I>colorspec</I>] + +<I>size</I> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmmargin</b> adds a border around a PNM image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>You can specify the border color with the <B>-white</B>, +<B>-black</B>, and <B>-color</B> options. If no color is specified, +the program makes a guess. + +<P>To remove a border of a specified size from an image, use +<B>pamcut</B>. <b>pnmcrop</b> also removes borders, but determines by itself +what is border and what is subject. + +<P>For lower level control, including to add different size borders to +different sides of the image, look at <b>pnmcat</b>. + +<P>If all you're trying to do is get the image up to a certain required +size, <b>pamcut</b> may be what you want. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamcut.html">pamcut</A> +<A HREF="pnmcrop.html">pnmcrop</A> +<A HREF="pnmcat.html">pnmcat</A> +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmmontage.html b/pnmmontage.html new file mode 100644 index 00000000..7273cb93 --- /dev/null +++ b/pnmmontage.html @@ -0,0 +1,123 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmmontage User Manual</TITLE></HEAD> +<BODY> +<H1>pnmmontage</H1> +Updated: 31 December 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmmontage - create a montage of PNM images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmmontage</B> + +[<B>-header=</B><I>headerfile</I>] + +[<B>-quality=</B><I>n</I>] + +[<B>-prefix=</B><I>prefix</I>] + +[<B>-0</B>|<B>-1</B>|<B>-2</B>|<B>...</B>|<B>-9</B>] + +<i>pnmfile</I>... + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmmontage</b> packs images of differing sizes into a +minimum-area composite image, optionally producing a C header file +with the locations of the subimages within the composite image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-header</B> + +<DD>Tells <B>pnmmontage</B> to write a C header file of the locations +of the original images within the packed image. Each original image +generates four #defines within the packed file: xxxX, xxxY, xxxSZX, +and xxxSZY, where xxx is the name of the file, converted to all +uppercase. The ouput also includes #defines OVERALLX and OVERALLY, which +specifies the total size of the montage image. + +<DT><B>-prefix</B> + +<DD>Tells <B>pnmmontage</B> to use the specified prefix on all of the +#defines it generates. + +<DT><B>-quality</B> + +<DD>Before attempting to place the subimages, <B>pnmmontage</B> will +calculate a minimum possible area for the montage; this is either the +total of the areas of all the subimages, or the width of the widest +subimage times the height of the tallest subimage, whichever is +greater. <B>pnmmontage</B> then initiates a problem-space search to +find the best packing; if it finds a solution that is (at least) as +good as the minimum area times the quality as a percent, it will break +out of the search. Thus, <B>-q 100</B> will find the best possible +solution; however, it may take a very long time to do so. The default +is <B>-q 200.</B> + +<DT><B>-0</b>, <b>-1</b>, ... <b>-9</B> + +<DD>These options control the quality at a higher level than +<B>-q</B>; <B>-0</B> is the worst quality (literally pick the first +solution found), while <B>-9</B> is the best quality (perform an +exhaustive search of problem space for the absolute best packing). +The higher the number, the slower the computation. The default is +<B>-5</B>. + +</DL> +<A NAME="lbAF"> </A> +<H2>NOTES</H2> + +<p>Using <B>-9</B> is excessively slow on all but the smallest image +sets. If the anymaps differ in maxvals, then pnmmontage will pick the +smallest maxval which is evenly divisible by each of the maxvals of +the original images. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmcat.html">pnmcat</A></B>, + +<B><A HREF="pnmindex.html">pnmindex</A></B>, + +<B><A HREF="pnm.html">pnm</A></B>, + +<B><A HREF="pam.html">pam</A></B>, + +<B><A HREF="pbm.html">pbm</A></B>, + +<B><A HREF="pgm.html">pgm</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2000 by Ben Olmstead. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">NOTES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmnlfilt.html b/pnmnlfilt.html new file mode 100644 index 00000000..401472c0 --- /dev/null +++ b/pnmnlfilt.html @@ -0,0 +1,178 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmnlfilt User Manual</TITLE></HEAD> +<BODY> +<H1>pnmnlfilt</H1> +Updated: 24 October 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmnlfilt - non-linear filters: smooth, alpha trim mean, optimal +estimation smoothing, edge enhancement. + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmnlfilt</B> +<I>alpha</I> +<I>radius</I> +[<I>pnmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>pnmnlfilt</B> produces an output image where the pixels are a +summary of multiple pixels near the corresponding location in an input +image. + +<P>This program works on multi-image streams. + +<P>This is something of a swiss army knife filter. It has 3 distinct +operating modes. In all of the modes <b>pnmnlfilt</b> examines each +pixel in the image and processes it according to the values of it and +its surrounding pixels. Rather than using a square block of +surrounding pixels (e.g. the subject pixel and its 8 immediate +neighbors, in a 3x3 square), <b>pnmnlfilt</b> uses 7 hexagonal areas. +You choose the size of the hexagons with the radius parameter. A +radius value of 1/3 means that the 7 hexagons essentially fit into the +subject pixel (ie. there will be no filtering effect). A radius +value of 1.0 means that the 7 hexagons essentially cover the 3x3 +immediate neighbor square. + +<p>Your choice of "alpha" parameter selects among the three +modes. + +<H3 id="alphatrimmedmean"> +Alpha trimmed mean filter (0.0 <= alpha <= 0.5)</H3> + +<P>The value of the center pixel will be replaced by the mean of +the 7 hexagon values, but the 7 values are sorted by size and the top +and bottom alpha portion of the 7 are excluded from the mean. This +implies that an alpha value of 0.0 gives the same sort of output as a +normal convolution (ie. averaging or smoothing filter), where radius +will determine the "strength" of the filter. A good value to +start from for subtle filtering is alpha = 0.0, radius = 0.55 For a +more blatant effect, try alpha 0.0 and radius 1.0 + +<P>An alpha value of 0.5 will cause the median value of the 7 hexagons +to be used to replace the center pixel value. This sort of filter is +good for eliminating "pop" or single pixel noise from an +image without spreading the noise out or smudging features on the +image. Judicious use of the radius parameter will fine tune the +filtering. Intermediate values of alpha give effects somewhere between +smoothing and "pop" noise reduction. For subtle filtering +try starting with values of alpha = 0.4, radius = 0.6 For a more +blatant effect try alpha = 0.5, radius = 1.0 + +<H3 id="optimalestsmooth"> +Optimal estimation smoothing. (1.0 <= alpha <= 2.0)</H3> + +<P>This type of filter applies a smoothing filter adaptively over the +image. For each pixel the variance of the surrounding hexagon values +is calculated, and the amount of smoothing is made inversely +proportional to it. The idea is that if the variance is small then it +is due to noise in the image, while if the variance is large, it is +because of "wanted" image features. As usual the radius +parameter controls the effective radius, but it probably advisable to +leave the radius between 0.8 and 1.0 for the variance calculation to +be meaningful. The alpha parameter sets the noise threshold, over +which less smoothing will be done. This means that small values of +alpha will give the most subtle filtering effect, while large values +will tend to smooth all parts of the image. You could start with +values like alpha = 1.2, radius = 1.0 and try increasing or decreasing +the alpha parameter to get the desired effect. This type of filter is +best for filtering out dithering noise in both bitmap and color +images. + +<H3 id="edgeenhance">Edge enhancement. (-0.1 >= alpha >= -0.9)</H3> + +<P>This is the opposite type of filter to the smoothing filter. It +enhances edges. The alpha parameter controls the amount of edge +enhancement, from subtle (-0.1) to blatant (-0.9). The radius +parameter controls the effective radius as usual, but useful values +are between 0.5 and 0.9. Try starting with values of alpha = 0.3, +radius = 0.8 + +<H3 id="combination">Combination use.</H3> + +<P>The various modes of <B>pnmnlfilt</B> can be used one after the +other to get the desired result. For instance to turn a monochrome +dithered image into a grayscale image you could try one or two passes +of the smoothing filter, followed by a pass of the optimal estimation +filter, then some subtle edge enhancement. Note that using edge +enhancement is only likely to be useful after one of the non-linear +filters (alpha trimmed mean or optimal estimation filter), as edge +enhancement is the direct opposite of smoothing. + +<P>For reducing color quantization noise in images (ie. turning .gif +files back into 24 bit files) you could try a pass of the optimal +estimation filter (alpha 1.2, radius 1.0), a pass of the median filter +(alpha 0.5, radius 0.55), and possibly a pass of the edge enhancement +filter. Several passes of the optimal estimation filter with +declining alpha values are more effective than a single pass with a +large alpha value. As usual, there is a tradeoff between filtering +effectiveness and loosing detail. Experimentation is encouraged. + +<H2 id="references">References:</H2> + +<P>The alpha-trimmed mean filter is based on the description in IEEE +CG&A May 1990 Page 23 by Mark E. Lee and Richard A. Redner, and +has been enhanced to allow continuous alpha adjustment. + +<P>The optimal estimation filter is taken from an article +"Converting Dithered Images Back to Gray Scale" by Allen +Stenger, Dr Dobb's Journal, November 1992, and this article references +"Digital Image Enhancement and Noise Filtering by Use of Local +Statistics", Jong-Sen Lee, IEEE Transactions on Pattern Analysis +and Machine Intelligence, March 1980. + +<P>The edge enhancement details are from <A +HREF="pgmenhance.html">pgmenhance</A>, which is taken from Philip +R. Thompson's "xim" program, which in turn took it from +section 6 of "Digital Halftones by Dot Diffusion", +D. E. Knuth, ACM Transaction on Graphics Vol. 6, No. 4, October 1987, +which in turn got it from two 1976 papers by J. F. Jarvis et. al. + +<h2 id="parameters"></h2> + +<p>The parameters are: + +<dl> +<dt><i>alpha</i> +<dd>The alpha value (described above), in decimal. May be fractional. + +<dt><i>radius</i> +<dd>The radius (described above), in decimal. May be fractional. +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pgmenhance.html">pgmenhance</A>, +<A HREF="pnmconvol.html">pnmconvol</A>, +<A HREF="pnm.html">pnm</A> + +<H2 id="author">AUTHOR</H2> + +Graeme W. Gill <A HREF="mailto:graeme@labtam.oz.au">graeme@labtam.oz.au</A> + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<ul> + <LI><A HREF="#alphatrimmedmean"> + Alpha trimmed mean filter.(0.0 <= alpha <= 0.5)</A> + <LI><A HREF="#optimalestsmooth"> + Optimal estimation smoothing. (1.0 <= alpha <= 2.0)</A> + <LI><A HREF="#edgeenhance"> + Edge enhancement. (-0.1 >= alpha >= -0.9)</A> + <LI><A HREF="#combination">Combination use.</A> + </ul> +<LI><A HREF="#references">References:</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmnoraw.html b/pnmnoraw.html new file mode 100644 index 00000000..06bbbced --- /dev/null +++ b/pnmnoraw.html @@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnmnoraw User Manual</TITLE></HEAD> +<BODY> +<H1>pnmnoraw</H1> +Updated: March 2000 +<BR> +<H2>NAME</H2> +<B>pnmnoraw</B> - replaced by pnmtoplainpnm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pnmnoraw</b> was replaced in Netpbm 8.2 (March 2000) by <b><a +href="pnmtoplainpnm.html">pnmtoplainpnm</a></b>, which was obsoleted by +<b>pnmtopnm</b> in Netpbm 10.23 (July 2004). + +<P><B>pnmtoplainpnm</b> was actually the same program; it was just renamed +to make it clear that is just a format converter. + +<P><B>pnmtopnm</b> is more general, in that it can go both directions. +<b>pnmtopnm -plain</b> is the same as <b>pnmnoraw</b>. + +</BODY> +</HTML> diff --git a/pnmnorm.html b/pnmnorm.html new file mode 100644 index 00000000..6ade6a3f --- /dev/null +++ b/pnmnorm.html @@ -0,0 +1,241 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmnorm User Manual</TITLE></HEAD> +<BODY> +<H1>pnmnorm</H1> +Updated: 6 January 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmnorm - normalize the contrast in a Netbpm image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmnorm</B> + +[<B>-bpercent=</B><I>N</I> | <B>-bvalue=</B><I>N</I>] + +[<B>-wpercent=</B><I>N</I> | <B>-wvalue=</B><I>N</I>] + +[<b>-maxexpand</b> + +[<B>-keephues</B>] + +[<B>-luminosity</B> | <B>-colorvalue</B> | <B>-saturation</B>] + +[<I>ppmfile</I>] + + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmnorm</b> reads a PNM image (PBM, PGM, or PPM). It normalizes +the contrast by forcing the brightest pixels to white, the darkest +pixels to black, and linearly rescaling the ones in between; and +produces the same kind of file as output. This is pretty useless for +a PBM image. + +<P>The program first determines a mapping of old brightness to new +brightness. For each possible brightness of a pixel, the program +determines a corresponding brightness for the output image. + +<P>Then for each pixel in the image, the program computes a color which has +the desired output brightness and puts that in the output. With a color +image, it is not always possible to compute such a color and retain any +semblance of the original hue, so the brightest and dimmest pixels may only +approximate the desired brightness. + +<p>For a PPM image, you have a choice of three different ways to +define brightness: +<ol> +<li>luminosity +<li>color value +<li>saturation +</ol> + +In the case of saturation, "brightness" is pretty much a +misnomer, but you can use the brightness analogy to see what it does. +In the analogy, bright means saturated and dark means unsaturated. + +<P>Note that all of these are different from separately normalizing +the individual color components. + +<p>An alternative way to spread out the brightnesses in an image is +<b>pnmhisteq</b>. <b>pnmhisteq</b> stretches the brightest pixels to +white and the darkest pixels to black, but rather than linearly +adjusting the ones in between, it adjusts them so that there are an +equal number of pixels of each brightness throughout the range. This +gives you more contrast than <b>pnmnorm</b> does, but can considerably +change the picture in exchange. + + +<H2 id="options">OPTIONS</H2> + +<P>By default, the darkest 2 percent of all pixels are mapped to +black, and the brightest 1 percent are mapped to white. You can +override these percentages by using the <B>-bpercent</B> and +<B>-wpercent</B> options, or you can specify the exact pixel values to +be mapped by using the <B>-bvalue</B> and <B>-wvalue</B> options. +You can get appropriate numbers for the options from +<b>ppmhist</b>. If you just want to enhance the contrast, then +choose values at elbows in the histogram; e.g. if value 29 represents +3% of the image but value 30 represents 20%, choose 30 for +<I>bvalue</I>. If you want to brighten the image, then set +<I>bvalue</I> to 0 and just fiddle with <I>wvalue</I>; similarly, to +darken the image, set <I>wvalue</I> to maxval and play with +<I>bvalue</I>. + +<p>If you specify both <b>-bvalue</b> and <b>-bpercent</b>, <b>pnmnorm</b> +uses the one that produces the least change. The same goes for +<b>-wvalue</b> and <b>-wpercent</b>. + +<p>If you want to maximize the change instead of minimizing it, just +cascade two runs of <b>pnmnorm</b>, specifying values for the first +and percentages for the second. + +<p>This is further constrained by the <b>-maxexpand</b> option. +Sometimes, too much contrast is a bad thing. If your intensities are +all concentrated in the middle, <b>-bpercent=2</b> and +<b>-wpercent=1</b> might mean that an intensity of 60 gets stretched +up to 100 and and intensity of 40 gets stretched down to zero, for a +range expansion of 150% (from a range of 40 to a range of 100). That +much stretching means two adjacent pixels that used to differ in +intensity by 4 units now differ by 10, and that might be unsightly. + +<p>So that you can put a limit on the amount of expansion without +having to examine the image first, there is the <b>-maxexpand</b> +option. It specifies the maximum expansion you will tolerate, as an +additional per centage. In the example above, you could say +<b>-maxexpand=50</b> to say you want the range to expand by at most +50%, regardless of your other options. <b>pnmnorm</b> figures out +what intensity to stretch to full intensity and what intensity to +stretch to zero intensity as described above, and then raises the +former and lowers the latter as needed to limit the expansion to the +amount you specified. + +<p>When <b>pnmnorm</b> limits the expansion due to <b>-maxexpand</b>, +it tells you about it with a message like this: +<pre> +<tt> + limiting expansion of 150% to 50% +</tt> +</pre> + +<p>In any case, <b>pnmnorm</b> tells you exactly what expansion it's +doing, like this: + +<pre> +<tt> + remapping 25..75 to 0..100 +</tt> +</pre> + +<p>Before Netpbm 10.26 (December 2004), it was not valid to specify both +<b>-bvalue</b> and <b>-bpercent</b> or <b>-wvalue</b> and <b>-wpercent</b>. + +<p><b>-maxexpand</b> was new in Netpbm 10.32 (February 2006). + +<P>The <B>-keephues</B> option says to keep each pixel the same hue as +it is in the input; just adjust its brightness. You normally want this; +the only reason it is not the default behavior is backward compatibility +with a design mistake. + +<p>By default, <B>pnmnorm</B> normalizes contrast in each component +independently (except that the meaning of the <B>-wpercent</B> and +<B>-bpercent</B> options are based on the overall brightnesses of the +colors, not each component taken separately). So if you have a color +which is intensely red but dimly green, <B>pnmnorm</B> would make the +red more intense and the green less intense, so you end up with a +different hue than you started with. + +<P>If you specify <B>-keephues</B>, <B>pnmnorm</B> would likely leave +this pixel alone, since its overall brightness is medium. + +<P><B>-keephues</B> can cause clipping, because a certain color may be +below a target intensity while one of its components is saturated. +Where that's the case, <B>pnmnorm</B> uses the maximum representable +intensity for the saturated component and the pixel ends up with less +overall intensity, and a different hue, than it is supposed to have. + +<P>This option is meaningless on grayscale images. + +<p>When you <em>don't</em> specify <b>-keephues</b>, the +<b>-luminosity</b>, <b>-colorvalue</b>, and <b>-saturation</b> options +affect the transfer function (which is the same for all three RGB +components), but are meaningless when it comes to applying the +transfer function (since it is applied to each individual RGB +component). + +<P>Before Netpbm 9.25 (March 2002), there was no <B>-keephues</B> option. + +<p><b>-luminosity</b>, <b>-colorvalue</b>, and <b>-saturation</b> determine +what property of the pixels <b>pnmnorm</b> normalizes. I.e., what kind of +brightness. You cannot specify more than one of these. + +<P>The <B>-luminosity</B> option says to use the luminosity (i.e. the +"Y" in the YUV or YCbCr color space) as the pixel's brightness. The +luminosity is a measure of how bright a human eye would find the color, +taking into account the fact that the human eye is more sensitive to some +RGB components than others. + +<p>This option is default. + +<P>This option is meaningless on grayscale images. + +<P>Before Netpbm 10.28 (August 2005), there was no <B>-luminosity</B> option, +but its meaning was still the default. + +<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option. + +<P>The <B>-colorvalue</B> option says to use the color value (i.e. the +"V" in the HSV color space) as the pixel's brightness. The +color value is the gamma-adjusted intensity of the most intense RGB +component. + +<P>This option is meaningless on grayscale images. + +<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option. + +<p>The <b>-saturation</b> option says to use the saturation (i.e. the +"S" in the HSV color space) as the pixel's brightness. The +saturation is the ratio of the intensity of the most intense RGB +component to the difference between the intensities of the most and least +intense RGB component (all intensities gamma-adjusted). + +<p>In this case, "brightness" is more of a metaphor than anything. +"bright" means saturated and "dark" means unsaturated. + +<p>This option is meaningless on grayscale images. + +<P>Before Netpbm 10.28 (August 2005), there was no <B>-colorvalue</B> option. + + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmhisteq.html">pnmhisteq</A></B>, +<B><A HREF="ppmhist.html">ppmhist</A></B>, +<B><A HREF="pgmhist.html">pgmhist</A></B>, +<B><A HREF="pnmgamma.html">pnmgamma</A></B>, +<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>, +<B><A HREF="ppmdim.html">ppmdim</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pnmpad.html b/pnmpad.html new file mode 100644 index 00000000..3b5f556f --- /dev/null +++ b/pnmpad.html @@ -0,0 +1,167 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmpad User Manual</TITLE></HEAD> +<BODY> +<H1>pnmpad</H1> +Updated: 26 January 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmpad - add borders to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmpad </B> +[<B>-verbose</B>] +[<B>-white</B>|<B>-black</B>] +<BR> +[<B>-width=</B><I>pixels</I>] +[<B>-halign=</B><I>ratio</I>] +<BR> +[<B>-left=</B><I>pixels</I>] +[<B>-right=</B><I>pixels</I>] +<BR> +[<B>-height=</B><I>pixels</I>] +[<B>-valign=</B><I>ratio</I>] +<BR> +[<B>-top=</B><I>pixels</I>] +[<B>-bottom=</B><I>pixels</I>] +<BR> +[<I>pnmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and +its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pnmpad</b> reads a PNM image as input and outputs a PNM image +that is the input image plus black or white borders of the sizes +specified. + +<P>If you just need to convert an image to a certain size regardless +of the original dimensions, <B>pamcut</B> with the <B>-pad</B> option +may be a better choice. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL> +<DT><B>-verbose</B> + +<DD> +Verbose output. + +<dt><B>-white</B> +<dt><B>-black</B> + +<dd>Set pad color. Default is <b>-black</b>. + + +<dt><B>-left=</B><I>pixels</I> +<dt><B>-right=</B><I>pixels</I> +<dt><B>-width=</B><I>width</I> +<dt><B>-halign=</B><I>ratio</I> + +<dd>Specify amount of left and right padding in pixels. + +<p><b>-left</b> and <b>-right</b> directly specify the amount of +padding added to the left and right sides, respectively, of the image. + +<p>Alternatively, you can specify <b>-width</b> and just one of +<b>-left</b> and <b>-right</b> and <b>pnmpad</b> calculates the required +padding on the other side based on the width of the input image. If +the <b>-width</b> value is less than the width of the image plus the +specified padding, the <b>-width</b> values is ignored. + +<p>If you specify all three of <b>-width</b>, <b>-left</b>, and +<b>-right</b>, you must ensure that the <b>-left</b> and <b>-right</b> +padding are sufficient to make the image at least as wide as +<b>-width</b> specifies. Otherwise, <b>pnmpad</b> fails. + +<p>When you specify <b>-width</b> without <b>-left</b> or +<b>-right</b>, and <b>-width</b> is larger than the input image, +<b>pnmpad</b> chooses left and right padding amounts in a certain +ratio. That ratio defaults to half, but you can set it to anything +(from 0 to 1) with the <b>-halign</b> option. If the input image is +already at least as wide as <b>-width</b> specifies, <b>pnmpad</b> +adds no padding. + +<p>Common values for <b>-halign</b> are: +<DL COMPACT> +<DT><B>0.0</B> <DD>left aligned + +<DT><B>0.5</B> <DD>center aligned (default) + +<DT><B>1.0</B> <DD>right aligned +</DL> + +<p>Before Netpbm 10.23 (July 2004), <b>pnmpad</b> did not allow the +<b>-left</b> or <b>-right</b> option together with <b>-width</b>. + +<dt><B>-top=</B><I>pixels</I> +<dt><B>-bottom=</B><I>pixels</I> +<dt><B>-height=</B><I>height</I> +<dt><B>-valign=</B><I>ratio</I> + +<dd> +These options determine the vertical padding. They are analogous +to the horizontal padding options above. + +</dl> + +<A NAME="lbAF"> </A> +<H2>HISTORY</H2> + +<p>Before February 2002, <B>pnmpad</B> had a different option syntax +which was less expressive and not like conventional Netpbm programs. +That syntax is still understood by <B>pnmpad</B> for backward +compatibility, but not documented or supported for future use. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbmmake.html">pbmmake</A></B>, +<B><A HREF="pnmpaste.html">pnmpaste</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmcrop.html">pnmcrop</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pbm.html">pbm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 2002 by Martin van Beilen + +<p>Copyright (C) 1990 by Angus Duggan + +<p>Copyright (C) 1989 by Jef Poskanzer. + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. This software is provided "as is" +without express or implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">HISTORY</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmpaste.html b/pnmpaste.html new file mode 100644 index 00000000..62ffd9f7 --- /dev/null +++ b/pnmpaste.html @@ -0,0 +1,100 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmpaste User Manual</TITLE></HEAD> +<BODY> +<H1>pnmpaste</H1> +Updated: 21 February 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmpaste - paste a rectangle into a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmpaste</B> + +[<B>-replace</B>|<B>-or</B>|<B>-and</B>|<B>-xor</B>] + +<I>frompnmfile x y</I> + +[<I>intopnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmpaste</b> reads two PNM images as input and inserts the first +image (the "pasted image") into the second (the "base image") at the +specified location, and produces a PNM image the same size and type as +the base image as output. If you don't specify the second file, +<b>pnmpaste</b> reads the base image from Standard Input. + +<p><i>x</i> and <i>y</i> specify the location in the base image at +which to put the top left corner of the pasted image, <i>x</i> giving +the horizontal position and <i>x</i> giving the vertical position. A +nonnegative value indicates the number of pixels right of the right +edge or below the top edge of the base image, while a negative value +indicates the number of pixels right of the right edge or below the +bottom edge (so x = -5 means 5 pixels left of the right edge). + +<P>If any part of the pasted image does not fit within the base image, +<b>pnmpaste</b> fails. + +<p>This tool is most useful in combination with <I>pamcut</I>. For +instance, if you want to edit a small segment of a large image, and +your image editor cannot edit the large image, you can cut out the +segment you are interested in, edit it, and then paste it back in. + +<P>Another useful companion tool is <B>pbmmask</B>. + +<P><B>pamcomp</B> is a more general tool, except that it lacks the +"or," "and," and "xor" functions. +<B>pamcomp</B> allows you to specify an alpha mask in order to have +only part of the inserted image get inserted. So the inserted pixels +need not be a rectangle. You can also have the inserted image be +translucent, so the resulting image is a mixture of the inserted image +and the base image. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<P>The option specifies the operation to use when doing the +paste. The default is <B>-replace</B>. The other logical operations +are only allowed if both input images are PBM images. These operations +act as if white is TRUE and black is FALSE. + +<P>You can abbreviate all options to their shortest unique prefix. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnminvert.html">pnminvert</A></B>, +<B><A HREF="pnmarith.html">pnmarith</A></B>, +<B><A HREF="pbmmask.html">pbmmask</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmpsnr.html b/pnmpsnr.html new file mode 100644 index 00000000..296a8dca --- /dev/null +++ b/pnmpsnr.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmpsnr User Manual</TITLE></HEAD> +<BODY> +<H1>pnmpsnr</H1> +Updated: 04 March 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmpsnr - compute the difference between two images (the PSNR) + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmpsnr</B> + +[<I>pnmfile1</I>] + +[<I>pnmfile2</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmpsnr</b> reads two PBM, PGM, or PPM files, or PAM +equivalents, as input and prints the peak signal-to-noise ratio (PSNR) +difference between the two images. This metric is typically used in +image compression papers to rate the distortion between original and +decoded image. + +<P>If the inputs are PBM or PGM, <B>pnmpsnr</B> prints the PSNR of the +luminance only. Otherwise, it prints the separate PSNRs of the +luminance, and chrominance (Cb and Cr) components of the colors. + +<P>The PSNR of a given component is the ratio of the mean square +difference of the component for the two images to the maximum mean +square difference that can exist between any two images. It is +expressed as a decibel value. + +<P>The mean square difference of a component for two images is the +mean square difference of the component value, comparing each pixel +with the pixel in the same position of the other image. For the +purposes of this computation, components are normalized to the scale +[0..1]. + +<P>The maximum mean square difference is identically 1. + +<P>So the higher the PSNR, the closer the images are. A luminance +PSNR of 20 means the mean square difference of the luminances of the +pixels is 100 times less than the maximum possible difference, +i.e. 0.01. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pnmquant.html b/pnmquant.html new file mode 100644 index 00000000..cf97e37a --- /dev/null +++ b/pnmquant.html @@ -0,0 +1,76 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmquant User Manual</TITLE></HEAD> +<BODY> +<H1>pnmquant</H1> +Updated: 22 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmquant - quantize the colors in a Netpbm image to a smaller set + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmquant</B> +[<B>-center</B>|<B>-meancolor</B>|<B>-meanpixel</B>] +[<B>-floyd</B>|<B>-fs</B>] +[<B>-nofloyd</B>|<B>-nofs</B>] +[<B>-spreadbrightness</B>|<B>-spreadluminosity</B>] +<I>ncolors</I> +[<I>pnmfile</I>] + +<P> +All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmquant</b> reads a PNM image as input. It chooses <I>ncolors</I> +colors to best represent the image, maps the existing colors +to the new ones, and writes a PNM image as output. + +<P>This program is simply a combination of <B>pnmcolormap</B> and +<B>pnmremap</B>, where the colors of the input are remapped using a +color map which is generated from the colors in that same input. The +options have the same meaning as in those programs. See their +documentation to understand <B>pnmquant</B>. + +<P>It is much faster to call <B>pnmcolormap</B> and <B>pnmremap</B> +directly than to run <B>pnmquant</B>. You save the overhead of the +Perl interpreter and creating two extra processes. <B>pnmquant</B> is +just a convenience. + +<p><b>pnmquant</b> did not exist before Netpbm 9.21 (January 2001). +Before that, <b>ppmquant</b> did the same thing, but only on PPM +images. <b>ppmquant</b> continues to exist, but is only a front end +(for name compatibility) to <b>pnmquant</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>, +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<B><A HREF="ppmquantall.html">ppmquantall</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="ppmquant.html">ppmquant</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pnmremap.html b/pnmremap.html new file mode 100644 index 00000000..6343f43c --- /dev/null +++ b/pnmremap.html @@ -0,0 +1,267 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmremap User Manual</TITLE></HEAD> +<BODY> +<H1>pnmremap</H1> +Updated: 01 January 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmremap - replace colors in a PNM image with colors from another set + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmremap</B> + +<B>-mapfile=</B><I>palettefile</I> + +[<B>-floyd</B>|<B>-fs</B>|<B>-nfloyd</B>|<B>-nofs</B>] + +[<B>-firstisdefault</B>] + +[<B>-verbose</B>] + +[<B>-missingcolor=</B><I>color</I>] + +[<I>pnmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>pnmremap</B> replaces the colors in an input image with those +from a palette you specify. Where colors in the input are present in +the palette, they just stay the same in the output. But where the +input contains a color that is not in the palette, <b>pnmremap</b> +gives you these choices: +<ul> + +<li>Choose the closest color from the palette. + +<li>Choose the first color from the palette. + +<li>Use a color specified by a command option (<b>-missing</b>). + +<li>Dither. This means rather than mapping pixel by pixel, +<b>pnmremap</b> uses colors from the palette to try to make +multi-pixel regions of the output have the same average color as the +input (for another kind of dithering, see <b>ppmdither</b>). + +</ul> + +<P>Two reasons to use this program are: 1) you want to reduce the +number of colors in the input image; and 2) you need to feed the image +to something that can handle only certain colors. + +<P>To reduce colors, you can generate the palette with +<B>pnmcolormap</B>. + +<p>By default, <b>pnmremap</b> maps an input color that is not in the +palette to the closest color that <em>is</em> in the palette. Closest +means with the smallest cartesian distance in the red, green, blue +brightness space (smallest sum of the squares of the differences in +red, green, and blue ITU-R Recommedation BT.709 gamma-adjusted +intensities). + +<p>You can instead specify a single default color for <b>pnmremap</b> +to use for any color in the input image that is not in the palette. +Use the <b>-missing</b> option for this. + +<p>You can also specify that the first color in the palette image +is the default. Use the <b>-firstisdefault</b> option for this. + +<p>The palette is simply a PNM image. The colors of the pixels in the +image are the colors in the palette. Where the pixels appear in the +image, and the dimensions of the image, are irrelevant. Multiple +pixels of the same color are fine. However, a palette image is +typically a single row with one pixel per color. + +<p>If you specify <b>-missing</b>, the color you so specify is in +the palette in addition to whatever is in the palette image. + +<p>For historical reasons, Netpbm sometimes calls the palette a +"colormap." But it doesn't really map anything. +<b>pnmremap</b> creates its own map, based on the palette, to map +colors from the input image to output colors. + +<h3 id="mismatch">Palette/Image Type Mismatch</h3> + +<p>In the simple case, the palette image is of the same depth (number +of planes, i.e. number of components in each tuple (pixel)) as the +input image and <b>pnmremap</b> just does a straightforward search of +the palette for each input tuple (pixel). In fact, <b>pnmremap</b> +doesn't even care if the image is a visual image. + +<p>But what about when the depths differ? In that case, +<b>pnmremap</b> converts the input image (in its own memory) to match +the palette and then proceeds as above. + +<p>There are only two such cases in which <b>pnmremap</b> knows how to +do the conversion: when one of them is tuple type RGB, depth 3, and the +other is tuple type GRAYSCALE or BLACKANDWHITE, depth 1; and vice +versa. + +<p>In any other case, <b>pnmremap</b> issues and error message and fails. + +<p>Note that as long as your input and palette images are PNM, they'll +always fall into one of the cases <b>pnmremap</b> can handle. There's an +issue only if you're using some exotic PAM image. + +<p>Before Netpbm 10.27 (March 2005), <b>pnmremap</b> could not handle +the case of a palette of greater depth than the input image. (It would +issue an error message and fail in that case). + +<p>In any case, the output image has the same tuple type and depth as +the palette image. + +<h3 id="multiple">Multiple Image Stream</h3> + +<p><b>pnmremap</b> handles a multiple image input stream, producing a +multiple image output stream. The input images need not be similar in +any way. + +<p>Before Netpbm 10.30 (October 2005), <b>pnmremap</b> ignored any image +after the first. + + +<h3 id="example">Examples</h3> + +<pre> +pnmcolormap testimg.ppm 256 >palette.ppm + +pnmremap -map=palette.ppm testimg.ppm >reduced_testimg.ppm +</pre> + +<P>To limit colors to a certain set, a typical example is to create an +image for posting on the World Wide Web, where different browsers know +different colors. But all browsers are supposed to know the 216 +"web safe" colors which are essentially all the colors you +can represent in a PPM image with a maxval of 5. So you can do this: + +<PRE> +pamseq 3 5 >websafe.pam + +pnmremap -map=websafe.pam testimg.ppm >websafe_testimg.ppm +</PRE> + +<p>Another useful palette is one for the 8 color IBM TTL color set, which +you can create with +<pre> +pamseq 3 1 >ibmttl.pam +</pre> + +<p>If you want to quantize one image to use the colors in another one, +just use the second one as the palette. You don't have to reduce it +down to only one pixel of each color, just use it as is. + +<P>The output image has the same type and maxval as the palette image. + +<H2 id="parameters">PARAMETERS</H2> + +<P>There is one parameter, which is required: The file specification of +the input PNM file. + + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-mapfile=</B><i>palettefilename</i> +<DD> +This names the file that contains the palette image. + +<P>This option is mandatory. + +<DT><B>-floyd</B> +<DT><B>-fs</B> +<DT><B>-nofloyd</B> +<DT><B>-nofs</B> +<DD> +These options determine whether Floyd-Steinberg dithering is done. +Without Floyd-Steinberg, the selection of output color of a pixel is based +on the color of only the corresponding input pixel. With Floyd-Steinberg, +multiple input pixels are considered so that the average color of an area +tends to stay more the same than without Floyd-Steinberg. For example, +if you map an image with a black, gray, gray, and white pixel +adjacent, to a palette that contains only black and white, it might +result in an output of black, black, white, white. Pixel-by-pixel +mapping would instead map both the gray pixels to the same color. + + +<p>Floyd-Steinberg gives vastly better results on images where +unmodified quantization has banding or other artifacts, especially +when going to a small number of colors such as the above IBM set. +However, it does take substantially more CPU time. + +<P><B>-fs</B> is a synomym for <B>-floyd</B>. <B>-nofs</B> is a +synonym for <B>-nofloyd</B>. + +<P>The default is <B>-nofloyd</B>. + +<DT><B>-firstisdefault</B> + +<DD>This tells <b>pnmremap</b> to map any input color that is not in +the palette to the first color in the palette (the color of the pixel +in the top left corner of the palette image) + +<p>See <a href="#description">DESCRIPTION</a>. + +<P>If you specify <B>-firstisdefault</B>, the maxval of your input +must match the maxval of your palette image. + +<DT><B>-missingcolor=</B><I>color</I> + +<DD>This specifies the default color for <b>pnmremap</b> to map to a +color in the input image that isn't in the palette. <I>color</I> may +or may not be in the palette image; it is part of the palette +regardless. + +<P>If you specify <B>-missingcolor</B>, the maxval of your input must +match the maxval of your palette image. + +<DT><B>-verbose</B> + +<DD>Display helpful messages about the mapping process. + +</DL> + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>, +<B><A HREF="pamseq.html">pamseq</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="ppmquantall.html">ppmquantall</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="ppmquant.html">ppmquant</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<ul> + <LI><A HREF="#mismatch">Palette/Image Type Mismatch</A> + <LI><A HREF="#multiple">Multiple Image Stream</A> + <LI><A HREF="#example">Examples</A> + </ul> +<LI><A HREF="#parameters">PARAMETERS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmrotate.html b/pnmrotate.html new file mode 100644 index 00000000..bb80240f --- /dev/null +++ b/pnmrotate.html @@ -0,0 +1,138 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmrotate User Manual</TITLE></HEAD> +<BODY> +<H1>pnmrotate</H1> +Updated: 30 August 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pnmrotate - rotate a PNM image by some angle + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmrotate</B> +[<B>-noantialias</B>] +[<B>-background=</B><I>color</I>] +<I>angle</I> +[<I>pnmfile</I>] + +<P> +All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pnmrotate</b> reads a PNM image as input. It rotates it by the +specified angle and produces the same kind of PNM image as output. + +<p>The input is the file named by <i>pnmfile</i> or Standard Input if you +don't specify <i>pnmfile</i>. The output goes to Standard Output. + +<p>The resulting image is a rectangle that contains the (rectangular) +input image within it, rotated with respect to its bottom edge. The +containing rectangle is as small as possible to contain the rotated +image. The background of the containing image is a single color that +<b>pnmrotate</b> determines to be the background color of the original +image, or that you specify explicitly. + +<p><i>angle</i> is in decimal degrees (floating point), measured +counter-clockwise. It can be negative, but it should be between -90 +and 90. + +<p>You should use <b>pamflip</b> instead for rotations that are a +multiple of a quarter turn. It is faster and more accurate. + +<p>For rotations greater than 45 degrees you may get better results if +you first use <I>pamflip</I> to do a 90 degree rotation and then +<I>pnmrotate</I> less than 45 degrees back the other direction. + +<P>The rotation algorithm is Alan Paeth's three-shear method. Each +shear is implemented by looping over the source pixels and +distributing fractions to each of the destination pixels. This has an +"anti-aliasing" effect - it avoids jagged edges and similar +artifacts. However, it also means that the original colors or gray +levels in the image are modified. If you need to keep precisely the +same set of colors, you can use the <B>-noantialias</B> option. + +<p>The program runs faster and uses less real memory with the +<b>-noantialias</b> option. It uses a large amount of virtual memory +either way, as it keeps a copy of the input image and a copy of the +output image in memory, using 12 bytes per pixel for each. But with +<b>-noantialias</b>, it accesses this memory sequentially in half a +dozen passes, with only a few pages of memory at a time required in +real memory. + +<p>In contrast, without <b>-noantialias</b>, the program's real memory +working set size is one page per input image row plus one page per output +image row. Before Netpbm 10.16 (June 2003), <b>-noantialias</b> had the +same memory requirement. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><b>-background=</b><i>color</i> + +<DD>This determines the color of the background on which the rotated image +sits. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>By default, if you don't specify this option, <b>pnmrotate</b> selects +what appears to it to be the background color of the original image. It +determines this color rather simplisticly, by taking an average of the colors +of the two top corners of the image. + +<p>This option was new in Netpbm 10.15. Before that, <b>pnmrotate</b> +always behaved as is the default now. + +<dt><b>-noantialias</b> + +<dd>This option forces <b>pnmrotate</b> to simply move pixels around instead +of synthesizing output pixels from multiple input pixels. The latter could +cause the output to contain colors that are not in the input, which may not +be desirable. It also probably makes the output contain a large number of +colors. If you need a small number of colors, but it doesn't matter if they +are the exact ones from the input, consider using <b>pnmquant</B> on the +output instead of using <b>-noantialias</b>. + +<p>Note that to ensure the output does not contain colors that are not +in the input, you also must consider the background color. See the +<b>-background</b> option. + +</dl> + +<H2 id="references">REFERENCES</H2> + +"A Fast Algorithm for General Raster Rotation" by Alan Paeth, +Graphics Interface '86, pp. 77-81. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnmshear.html">pnmshear</A>, +<A HREF="pamflip.html">pamflip</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="pnm.html">pnm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#references">REFERENCES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmscale.html b/pnmscale.html new file mode 100644 index 00000000..428fb8a6 --- /dev/null +++ b/pnmscale.html @@ -0,0 +1,65 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmscale User Manual</TITLE></HEAD> +<BODY> +<H1>pnmscale</H1> +Updated: 25 January 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmscale - scale a PNM image +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<pre> + <B>pnmscale</B> + [ + <I>scale_factor</I> + | + <b>-xysize</b> <I>cols</i> <i>rows</I> + | + <B>-reduce</B> <I>reduction_factor</I> + | + [<B>-xsize=</B><I>cols</I> | <B>-width=</B><I>cols</I> | <B>-xscale=</B><I>factor</I>] + [<B>-ysize=</B><I>rows</I> | <B>-height=</B><I>rows</I> | <B>-yscale=</B><I>factor</I>] + | + <b>-pixels</B> <I>n</I> + ] + [<B>-verbose</b>] + [<b>-nomix</B>] + [<I>pnmfile</I>] + +</pre> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmscale</b> was obsoleted by <a +href="pamscale.html"><b>pamscale</b></a>, introduced with Netpbm 10.20 +(January 2004). <b>pamscale</b> is backward compatible with +<b>pnmscale</b>, plus adds many additional functions, including the +ability to process PAM images, and tends to produce better results. + +<p><b>pnmscale</b> remains in the current Netpbm package because it +probably has fewer bugs for now than <b>pamscale</b>, and may have +superior performance characteristics in some cases. Some day, +<b>pnmscale</b> will probably become an alias for <b>pamscale</b>. + +<p>You can use the <b>pamscale</b> documentation for <b>pnmscale</b>, +considering the following differences: + +<ul> +<li><b>pnmscale</b> options are a subset of <b>pamscale</b>'s, as + documented above. +<li><b>pnmscale</b> always assumes the input is linear, as <b>pamscale</b> + does when you specify its <b>-linear</b> option. +<li><b>pnmscale</b> cannot process PAM images. +</ul> + +</BODY> +</HTML> + diff --git a/pnmscalefixed.html b/pnmscalefixed.html new file mode 100644 index 00000000..58dfde35 --- /dev/null +++ b/pnmscalefixed.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmscalefixed User Manual</TITLE></HEAD> +<BODY> +<H1>pnmscalefixed</H1> +Updated: 18 November 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmscale - scale a PNM file quickly + +<A NAME="lbAC"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pnmscalefixed</B> is the same thing as <B>pnmscale</B> except that +it uses fixed point arithmetic internally instead of floating point, +which makes it run faster. In turn, it is less accurate and may +distort the image. + +<P>Use the <B>pnmscale</B> user manual with <B>pnmscalefixed</B>. This +document only describes the difference. + +<P><B>pnmscalefixed</B> uses fixed point 12 bit arithmetic. By +contrast, <B>pnmscale</B> uses floating point arithmetic which on most +machines is probably 24 bit precision. This makes +<B>pnmscalefixed</B> run faster (30% faster in one experiment), but +the imprecision can cause distortions at the right and bottom edges. + +<P>The distortion takes the following form: One pixel from the edge of +the input is rendered larger in the output than the scaling factor +requires. Consequently, the rest of the image is smaller than the +scaling factor requires, because the overall dimensions of the image +are always as requested. This distortion will usually be very hard to +see. + +<P><B>pnmscalefixed</B> with the <B>-verbose</B> option tells you how +much distortion there is. + +<P>The amount of distortion depends on the size of the input image and how +close the scaling factor is to an integral 1/4096th. + +<P>If the scaling factor is an exact multiple of 1/4096, there is no +distortion. So, for example doubling or halving an image causes no +distortion. But reducing it or enlarging it by a third would cause +some distortion. To consider an extreme case, scaling a 100,000 row +image down to 50,022 rows would create an output image with all of the +input squeezed into the top 50,000 rows, and the last row of the input +copied into the bottom 22 rows of output. + +<P><B>pnmscalefixed</B> could probably be modified to use 16 bit or +better arithmetic without losing anything. The modification would +consist of a single constant in the source code. Until there is a +demonstrated need for that, though, the Netpbm maintainer wants to +keep the safety cushion afforded by the original 12 bit precision. + +<P><B>pnmscalefixed</B> does not have <B>pnmscale</b>'s <B>-nomix</B> +option. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">DESCRIPTION</A> +</UL> +</BODY> +</HTML> diff --git a/pnmshear.html b/pnmshear.html new file mode 100644 index 00000000..2be0cf74 --- /dev/null +++ b/pnmshear.html @@ -0,0 +1,128 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmshear User Manual</TITLE></HEAD> +<BODY> +<H1>pnmshear</H1> +Updated: 27 November 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmshear - shear a PNM image by a specified angle + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmshear</B> + +[<B>-noantialias</B>] + +[<B>-background=</B><I>color</I>] + +<I>angle</I> + +[<I>pnmfile</I>] + +<P> +All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmshear</b> reads a PNM image as input and shears it by the +specified angle and produce a PNM image as output. If the input file +is in color, the output will be too, otherwise it will be grayscale. +The angle is in degrees (floating point), and measures this: + +<PRE> + +-------+ +-------+ + | | |\ \ + | OLD | | \ NEW \ + | | |an\ \ + +-------+ |gle+-------+ +</PRE> + +If the angle is negative, it shears the other way: +<PRE> + +-------+ |-an+-------+ + | | |gl/ / + | OLD | |e/ NEW / + | | |/ / + +-------+ +-------+ +</PRE> + +The angle should not get too close to 90 or -90, or the resulting +anymap will be unreasonably wide. + +<P><b>pnmshear</b> does the shearing by looping over the source pixels +and distributing fractions to each of the destination pixels. This +has an "anti-aliasing" effect - it avoids jagged edges and +similar artifacts. However, it also means that the original colors in +the image are modified and there are typically more of them than you +started with. If you need to keep precisely the same set of colors, +see the <B>-noantialias</B> option. If the expanded palette is a +problem, you can run the result through <b>pnmquant</b>. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><b>-background=</b><i>color</i> + +<DD>This determines the color of the background on which the sheared image +sits. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>By default, if you don't specify this option, <b>pnmshear</b> selects +what appears to it to be the background color of the original image. It +determines this color rather simplisticly, by taking an average of the colors +of the two top corners of the image. + +<p>This option was new in Netpbm 10.37 (December 2006). Before that, +<b>pnmshear</b> always behaved as is the default now. + +<dt><b>-noantialias</b> + +<dd>This option forces <b>pnmrotate</b> to simply move pixels around instead +of synthesizing output pixels from multiple input pixels. The latter could +cause the output to contain colors that are not in the input, which may not +be desirable. It also probably makes the output contain a large number of +colors. If you need a small number of colors, but it doesn't matter if they +are the exact ones from the input, consider using <b>pnmquant</B> on the +output instead of using <b>-noantialias</b>. + +<p>Note that to ensure the output does not contain colors that are not +in the input, you also must consider the background color. See the +<b>-background</b> option. + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnmrotate.html">pnmrotate</A>, +<A HREF="pamflip.html">pamflip</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="pnm.html">pnm</A> + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmsmooth.html b/pnmsmooth.html new file mode 100644 index 00000000..4eb6f837 --- /dev/null +++ b/pnmsmooth.html @@ -0,0 +1,113 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmsmooth User Manual</TITLE></HEAD> +<BODY> +<H1>pnmsmooth</H1> +Updated: 4 December 1994 +<BR> +<A HREF="#index">Table Of Contents</A> + +<h2>NAME</H2> + +pnmsmooth - smooth out an image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmsmooth</B> + +[<b>-width=</b><i>cols</i>] +[<b>-height=</b><i>rows</i>] + +[<B>-dump</B>=<I>dumpfile</I>] + +[<I>pnmfile</I>] + +<p>Deprecated backward-compatibility option: + +[<b>-size</b>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmsmooth</b> smoothes out an image by replacing each pixel with +the average of its width X height neighbors. It is implemented as a +progam that generates a PGM convolution matrix and then invokes +<b>pnmconvol</b> with it. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<dt><b>-width=</b><i>cols</i> +<dt><b>-height</b>=<i>rows</i> + +<dd> +These options specify the dimensions of the convolution matrix. +Default dimensions are 3 wide and 3 high. Each dimension must be odd. +The maximum size of the convolution matrix is limited by the maxval of +the image such that width * height * 2 must not exceed the maxval. +(use <b>pamdepth</b> to increase the maxval if necessary). + +<p>These options were new in Netpbm 10.32 (February 2006). Before that, +use <b>-size</b>. + +<DT><B>-size</b> + +<DD>This deprecated option exists in current Netpbm for backward +compatibility. It was obsoleted by <b>-width</b> and <b>-height</b> +in Netpbm 10.32 (February 2006). + +<p>When you use this option, the first two program arguments are the width +and height, respectively, of the convolution matrix and do the same thing +as the <b>-width</b> and <b>-height</b> option values. The third +(optional) program argument is the input file name. + +<p>In reality, in old <b>pnmsmooth</b>, the width and height are two +values of the <b>-size</b> option, but the modern Netpbm command syntax +paradigm doesn't allow an option with multiple values, so instead +<b>-size</b> is an option with no value and width and height are program +arguments. That has the fortunate effect of making the following command +mean the same in current <b>pnmsmooth</b> as in old <b>pnmsmooth</b>: +<pre> +<kbd> + pnmsmooth -size 5 5 infile.ppm >outfile.ppm +</kbd> +</pre> + +<DT><B>-dump=</b><i>dumpfile</i> + +<DD>This options makes <b>pnmsmooth</b> only generate and save the +convolution file. It does not invoke <b>pnmconvol</B> and does not +produce an output image. + +</DL> + + + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnmconvol.html">pnmconvol</A>, +<A HREF="pnm.html">pnm</A> + +<h2 id="history">HISTORY</h2> + +<p>Before Netpbm 10.32 (February 2006), <b>pnmsmooth</b> did not use +the modern Netpbm command line parser, so had an unconventional command line +syntax. Most importantly, you could not use an equal size or double +hyphens in the options. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pnmsplit.html b/pnmsplit.html new file mode 100644 index 00000000..733a2c96 --- /dev/null +++ b/pnmsplit.html @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Pnmsplit User Manual</title></HEAD> + +<BODY> +<H1>pnmsplit</H1> +Updated: 23 October 2005 +<BR> +<H2>NAME</H2> +pnmsplit - split a multi-image PNM file into multiple single-image files + +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>Starting with Netpbm 10.31 (December 2005), <b>pnmsplit</b> is +obsolete. Use <a href="pamsplit.html"><b>pamsplit</b></a> instead. + +<b>pamsplit</b> is backward compatible with <b>pnmsplit</b>. You can +use the <b>pamsplit</b> manual for <b>pnmsplit</b> as long as you ignore +features that were added after Netpbm 10.30. + +</BODY> +</HTML> + + + diff --git a/pnmstitch.html b/pnmstitch.html new file mode 100644 index 00000000..d9398747 --- /dev/null +++ b/pnmstitch.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Pnmstitch User Manual</title></HEAD> + +<BODY> +<H1>pnmstitch</H1> +Updated: July 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmstitch - stitch together two panoramic (side-by-side) photographs + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmstitch</B> +[ +[<i>left_filespec</i>] <i>right_filespec</i> | +<br> +<i>left_filespec</i> <i>right_filespec</i> <i>output_filespec</i> +] +<br> +[<b>-width=</b><i>width</i>] +[<b>-height=</b><i>height</i>] +[<b>-xrightpos=</b><i>column</i>] +[<b>-yrightpos=</b><i>row</i>] +[<b>-stitcher=</b>{<b>RotateSliver</b>, +<b>BiLinearSliver</b>,<b>LinearSliver</b>}] +[<b>-filter=</b>{<b>LineAtATime</b>,<b>HorizontalCrop</b>}] +[<b>-output=</b><i>output_filespec</i>] +[<b>-verbose</b>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pnmstitch</b> stitches together two panoramic photographs. This +means if you have photographs of the left and right side of something +that is too big for a single camera frame, <b>pnmstitch</b> can join them +into one wide picture. + +<p><b>pnmstitch</b> works only on side-by-side images, not top and bottom +(though you could certainly use <b>pnmrotate</b> in combination with +<b>pnmstitch</b> to achieve this). It stitches together two images, but +you can use it repeatedly to stitch together as many as you need to. + +<p>Your photographs must overlap in order for <b>pnmstitch</b> to +work, and the overlap should be substantial. <b>pnmstitch</b> shifts +and stretches the right hand image to match it up the left hand image. +You probably want to crop the result with <b>pamcut</b> to make a nice +rectangular image. + +<p>If you're just trying to join (concatenate) two images at their edges, use +<b>pnmcat</b>. + +<p>The <i>left_filespec</i> and <i>right_filespec</i> arguments are the +specifications (names) of the PNM files containing the left hand and +right hand images. If you specify only <i>right_filespec</i>, the +left hand image comes from Standard Input. If you specify neither, both +images come from Standard Input as a multi-image file containing first the +left and then the right image. + +<p><i>output_filespec</i> is the specification (name) of the output PNM file. +The <b>-output</b> option also specifies the output file. You cannot specify +both the argument and the option. If you specify neither, the output goes to +Standard Output. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-width=<i>width</i></B> +<DT><B>-height=<i>height</i></B> +<DT><B>-xrightpos=<i>column</i></B> +<DT><B>-yrightpos=<i>row</i></B> +<DD> +These are constraints on where <b>pnmstitch</b> stitches the images together. +For the <b>LinearSliver</b> method, <i>column</i> and <i>row</i> tell what +location in the right hand image matches up to the top right corner of the +left hand image. + +<DT><b>-stitcher=</b>{<b>RotateSliver</b>,<b>BiLinearSliver</b>, + <b>LinearSliver</b>} +<DD> +The default is <b>RotateSliver</b>. + +<dt><b>-filter=</b>{<b>LineAtATime</b>,<b>HorizontalCrop</b>} +<DD> +No details available. + +<dt><b>-output=</b><i>output_filespec</i> +<DD> +Name of output file. If you don't specify this option, the output image +goes to Standard Output. + +<DT><B>-verbose</B> + +<DD>This option causes <b>pnmstitch</b> to issue messages to Standard Error + about the stitching process. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pnmcat.html">pnmcat</A></B>, +<B><A HREF="pnmrotate.html">pnmrotate</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p>This program was added to Netpbm in Release 10.7 (August 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtile.html b/pnmtile.html new file mode 100644 index 00000000..ebc00dec --- /dev/null +++ b/pnmtile.html @@ -0,0 +1,62 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtile User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtile</H1> +Updated: 06 March 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmtile - replicate an image to fill a specified region +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtile</B> +<I>width</I> +<i>height</I> +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtile</b> reads a PNM image as input. Replicates it to fill +an area of the specified dimensions and produces an image in the same +format as output. + +<p>You can do pretty much the reverse with <b>pamdice</b>. + +<p>You can explicitly concatenate an image to itself (or anything else) +with <b>pnmcat</b>. + +<p>If you're trying to tile multiple images into a superimage (such as +a thumbnail sheet), see <b>pnmindex</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmcat.html">pnmcat</A>, +<A HREF="pamdice.html">pamdice</A>, +<A HREF="pnmindex.html">pnmindex</A>, +<A HREF="pampop9.html">pampop9</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtoddif.html b/pnmtoddif.html new file mode 100644 index 00000000..987cabf2 --- /dev/null +++ b/pnmtoddif.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtoddif User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtoddif</H1> +Updated: 2003 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtoddif - Convert a PNM image to DDIF format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtoddif</B> +[<b>-resolution</b> <i>x</i> <i>y</i>] +[<i>pnmfile</i> [<i>ddiffile</i>]] + +<A NAME="lbAE"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtoddif</b> takes a PNM image and converts it into a DDIF image +file. + +<P><b>pnmtoddif</b> writes PBM format (bitmap) data as a 1 bit DDIF, +PGM format data (grayscale) as an 8 bit grayscale DDIF, and PPM format +(color) data as an 8,8,8 bit color DDIF. <b>pnmtoddif</b> writes any +DDIF image file uncompressed. The data plane organization is +interleaved by pixel. + +<P>In addition to the number of pixels in the width and height +dimension, DDIF images also carry information about the size that the +image should have, that is, the physical space that a pixel occupies. +Netpbm images do not carry this information, hence you have to supply +it externally. The default of 78 dpi has the beneficial property of +not causing a resize on most Digital Equipment Corporation color +monitors. + +<A NAME="lbAD"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>resolution</b> <i>x</i> <i>y</I> + +<DD>The horizontal and vertical resolution of the output image in dots +per inch. Default is 78 dpi. + +</DL> + +<a name="arguments"></a> +<h2>ARGUMENTS</h2> + +<dl> +<DT><I>pnmfile</I> + +<DD>The filename for the image file in pnm format. Default is to +read from Standard Input. + +<DT><I>ddiffile</I> + +<DD>The filename for the image file to be created in DDIF format. By +default, <b>pnmtoddif</b> writes to Standard Output. + +</DL> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Burkhard Neidecker-Lutz, Digital Equipment Corporation, CEC Karlsruhe +<A HREF="mailto:neideck@nestvx.enet.dec.com">neideck@nestvx.enet.dec.com</A> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAE">DESCRIPTION</A> +<LI><A HREF="#lbAD">OPTIONS</A> +<LI><A HREF="#arguments">ARGUMENTS</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtofiasco.html b/pnmtofiasco.html new file mode 100644 index 00000000..a01ae535 --- /dev/null +++ b/pnmtofiasco.html @@ -0,0 +1,372 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtofiasco User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtofiasco</H1> +Updated: July 12, 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmtofiasco - Convert PNM file to FIASCO compressed file + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmtofiasco</B> +[<I>option</I>]... +[<I>filename</I>]... + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pnmtofiasco</B> compresses the named pbm, pgm, or ppm image files, +or Standard Input if no file is named, and produces a FIASCO file on +Standard Output. + +<H2 id="options">OPTIONS</H2> + +<p>All option names may be abbreviated; for example, --optimize may be +written --optim or --opt. For most options a one letter short option +is provided. Mandatory or optional arguments to long options are +mandatory or optional for short options, too. Both short and long +options are case sensitive. + +<P>The basic options are: + +<DL COMPACT> +<DT><B>-i</B> <I>name</I>, <B>--input-name=</B><I>name</I> + +<DD>Compress the named images, not Standard Input. If <I>name</I> is +<B>-</B>, read Standard Input. <I>name</I> has to be either an image +filename or a template of the form: + +<PRE> +prefix[start-end{+,-}step]suffix<BR> +</PRE> + +<P>Templates are useful when compressing video streams: e.g., if you +specify the template <B>img0[12-01-2].pgm</B>, then <B>pnmtofiasco</B> +compresses the images img012.pgm, img010.pgm, ..., img002.pgm. + +<P>If <I>name</I> is a relative path, <B>pnmtofiasco </B> searches for +the image files in the current directory and in the (colon-separated) +list of directories given by the environment variable +<B>FIASCO_IMAGES</B>. + +<DT><B>-o</B> <I>output-file</I>, <B>--output-name=</B><I>name</I> + +<DD>Write FIASCO output to the named file, not to Standard Output. + +<P>If <I>name</I> is a relative path and the environment variable +<B>FIASCO_DATA</B> is a (colon-separated) list of directories, then +<B>pnmtofiasco</B> writes the output file to the first (writable) +directory of this list. Otherwise, <B>pnmtofiasco</B> write it to the +current directory. + +<DT><B>-q</B> <I>N</I>, <B>--quality=</B><I>N</I> + +<DD>Set quality of compression to <I>N</I>. Quality is 1 (worst) to +100 (best); default is 20. + +<DT><B>-v</B>, <B>--version</B> + +<DD>Print <B>pnmtofiasco</B> version number, then exit. + +<DT><B>-V</B> <I>N</I>, <B>--verbose </B><I>N</I> + +<DD>Set level of verbosity to <I>N</I>. Level is 0 (no output at +all), 1 (show progress meter), or 2 (show detailed compression +statistics); default is 1. + +<DT><B>-B</B> <I>N</I>, <B>--progress-meter </B><I>N</I> + +<DD>Set type of progress-meter to <I>N</I>. The following types are +available; default is 1: + +<dl> +<dt><B>0</B> +<dd>no progress meter + +<dt><B>1</B> +<dd>RPM style progress bar using 50 hash marks + +<dt><B>2</B> + +<dd>percentage meter + +</dl> + +<DT><B>-f</B> <I>name</I>, <B>--config=</B><I>name</I> + +<DD>Load parameter file <I>name </I> to initialize the options of +<B>pnmtofiasco</B>. See file <B>system.fiascorc</B> for an example of +the syntax. Options of <B>pnmtofiasco</B> are set by any of the +following methods (in the specified order): + +<ol> +<li>Global resource file <B>/etc/system.fiascorc</B> +<li>$HOME/.fiascorc +<li>command line +<li>--config=<I>name</I> +</ol> + +<DT><B>-h</B>, <B>--info</B> + +<DD>Print brief help, then exit. + +<DT><B>-H</B>, <B>--help</B> + +<DD>Print detailed help, then exit. + +</dl> + +<p>The options for advanced users are: + +<dl> +<DT><B>-b</B> <I>name</I>, <B>--basis-name=</B><I>name</I> + +<DD>Preload compression basis <I>name</I> into FIASCO. The basis +<I>name</I> provides the initial compression dictionary. Either use +one of the files "small.fco", "medium.fco", or +"large.fco" that come with <B>pnmtofiasco </B> or create a +new ASCII basis file. + +<DT><B>-z</B> <I>N</I>, <B>--optimize=</B><I>N</I> + +<dd>Set optimization level to <I>N</I>. Level is 0 (fastest) to 3 +(slowest); default is 1. Be warned, the encoding time dramatically +increased when <I>N</I>=<B>2</B> or <I>N</I>=<B>3</B> while the +compression performance only slightly improves. + +<DT><B>-P</B>, <B>--prediction</B> + +<DD>Use additional predictive coding. If this optimization is enabled +then the image is compressed in two steps. In the first step, a coarse +approximation of the image is computed using large unichrome +blocks. Finally, the delta image is computed and the prediction error +is approximated using the standard FIASCO algorithm. + +<DT><B>-D</B> <I>N</I>, <B>--dictionary-size=</B><I>N</I> + +<DD>Set size of dictionary that is used when coding the luminance band +to <I>N</I>; default is 10000, i.e., the dictionary is not restricted. + +<DT><B>-C</B> <I>N</I>, <B>--chroma-dictionary=</B><I>N</I> + +<DD>Set size of dictionary that is used when coding chroma bands to +<I>N</I>; default is 40. + +<DT><B>-Q</B> <I>N</I>, <B>--chroma-qfactor=</B><I>N</I> + +<DD>Reduce the quality of chroma band compression <I>N</I>-times with +respect to the user defined quality <I>q</I> of the luminance band +compression (<B>--quality</B>=<I>q</I>); default is 2. + +<DT><B>-t</B> <I>N</I>, <B>--tiling-exponent=</B><I>N</I> + +<DD>Subdivide the image into 2^<I>N</I> tiles prior coding; default is +4, i.e. the image is subdivided into 16 tiles. The processing order of +the individual tiles is defined by the option +<B>--tiling-method=</B><I>name</I>. + +<DT><B>-T</B> <I>name</I>, <B>--tiling-method=</B><I>name</I> + +<DD>Order the individual image tiles (the image is subdivided into; +see option <B>--tiling-exponent=</B><I>N</I>) by method <I>name</I>; +default is <b>desc-variance</b>. + +<dl> +<dt><B>desc-variance</B> +<dd>Tiles with small variances are processed first. + +<dt><B>asc-variance</B> +<dd>Tiles with large variances are processed first. + +<dt><B>desc-spiral</B> +<dd>Tiles are process in spiral order starting in the middle. + +<dt><B>asc-spiral</B> +<dd>Tiles are process in spiral order starting at the border. + +</dl> + +<DT><B>--rpf-mantissa=</B><I>N</I> + +<DD>Use <I>N</I> mantissa bits for quantized coefficients. + +<DT><B>--dc-rpf-mantissa=</B><I>N</I> +<DD>Use <I>N</I> mantissa bits for quantized DC coefficients. + +<DT><B>--rpf-range=</B><I>N</I> + +<DD>Coefficients outside the quantization interval +[-<I>N</I>,+<I>N</I>] are set to zero. + +<DT><B>--dc-rpf-range=</B><I>N</I> + +<DD>DC coefficients outside the quantization interval +[-<I>N</I>,+<I>N</I>] are set to zero. + +</dl> + +<p>Additional options for video compression are + +<dl> +<DT><B>-s</B> <I>N</I>, <B>--smooth=</B><I>N</I> + +<DD>Smooth decompressed reference frames along the partitioning +borders by the given amount <I>N</I>. <I>N</I> is 0 (no smoothing) to +100; default is 70. This factor is stored in the FIASCO file. + +<DT><B>-m</B> <I>N</I>, <B>--min-level=</B><I>N</I> + +<DD>Start prediction (motion compensated prediction or additional +prediction) on block level <I>N</I>; default is level 6. I.e., motion +compensation is applied to all image blocks of at least 8x8 pixels +(binary tree level <I>N</I>=6), 16x8 (<I>N</I>=7), 16x16 (<I>N</I>=8), +etc. + +<DT><B>-M</B> <I>N</I>, <B>--max-level=</B><I>N</I> + +<DD>Stop prediction (motion compensated prediction or additional +prediction) on block level <I>N</I>; default is level 10. I.e., +motion compensation is applied to all image blocks of at most 16x16 +pixels (<I>N</I>=8), 32x16 (<I>N</I>=9), 32x32 (<I>N</I>=10), etc. + +<DT><B>-2</B>, <B>--half-pixel</B> + +<DD>Use half pixel precise motion compensation. + +<DT><B>-F</B> <I>N</I>, <B>--fps=</B><I>N</I> + +<DD>Set number of frames per second to <I>N</I>. This value is stored +in the FIASCO output file and is used in the decoder <A +HREF="fiascotopnm.html">fiascotopnm</A> to control the framerate. + +<DT><B>-p</B> <I>type</I>, <B>--pattern=</B><I>type</I> + +<DD>Defines the type of inter frame compression which should be +applied to individual frames of a video stream. <I>type</I> is a +sequence of characters; default is "IPPPPPPPPP". Element +<B>N</B> defines the type of predicting which should be used for frame +<B>N</B>; the frame type pattern is periodically extended. Valid +characters are: + +<dl> +<dt><B>I</B> +<dd>intra frame, i.e., no motion compensated prediction is used at +all. + +<dt><B>P</B> +<dd>predicted frame, i.e., a previously encoded frame is used for +prediction (forward prediction). + +<dt><B>B</B> +<dd>bidirectional predicted frame, i.e., not only a previously shown +frame but also a frame of the future is used for prediction (forward, +backward or interpolated prediction). + +</dl> + +<DT><B>--cross-B-search</B> + +<DD>Instead of using exhaustive search the "Cross-B-Search" +algorithm is used to find the best interpolated prediction of +B-frames. + +<DT>--B-as-past-ref + +<DD>Also use previously encoded B-frames when prediction the current +frame. If this option is not set, only I- and P-frames are used to +predict the current frame. + +</DL> + + +<H2 id="examples">EXAMPLES</H2> + +<p>Compress the still image "foo.ppm" to the FIASCO file +"foo.wfa" using the default options: + +<pre> + pnmtofiasco < foo.ppm >foo.wfa +</pre> + +<P>Compress the video frames "foo0*.ppm" to the FIASCO file +"video.wfa" using half pixel precise motion compensation at +a frame rate of 15 frames per second. Intra frame 1 is used to +predict P-frame 4, frames 1 and 4 are used to predict B-frames 2 and +3, and so on. Frame 10 is again an intra-frame. + +<pre> + pnmtofiasco -2 -p "IBBPBBPBB" -fps 15 -o video.wfa foo0*.ppm +</pre> + +<H2 id="files">FILES</H2> + +<DL COMPACT> +<DT><B>/etc/system.fiascorc</B> + +<DD>The systemwide initialization file. + +<DT>$HOME<B>/.fiascorc</B> + +<DD>The personal initialization file. + +</DL> + +<H2 id="environment">ENVIRONMENT</H2> + + +<DL COMPACT> + +<DT><B>FIASCO_IMAGES</B> + +<DD>Search path for image files. Default is "./". + +<DT><B>FIASCO_DATA</B> + +<DD>Search and save path for FIASCO files. Default is "./". + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="fiascotopnm.html">fiascotopnm</A></B>, +<B><A HREF="pnmtojpeg.html">ppmtojpeg</A></B>, +<B><A HREF="pnmtojbig.html">pnmtojbig</A></B>, +<B><A HREF="pamtogif.html">pamtogif</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<P>Ullrich Hafner, Juergen Albert, Stefan Frank, and Michael Unger. +<B>Weighted Finite Automata for Video Compression</B>, IEEE Journal on +Selected Areas In Communications, January 1998 + +<p>Ullrich Hafner. <B>Low Bit-Rate Image and Video Coding with +Weighted Finite Automata</B>, Ph.D. thesis, Mensch & Buch Verlag, +ISBN 3-89820-002-7, October 1999. + +<p><a href="http://www.linuxjournal.com/node/4367/print">FIASCO: An +Open-Source Fractal Image and Sequence Codec</a>, Linux Journal, +January 2001. + +<H2 id="author">AUTHOR</H2> + +Ullrich Hafner <<A HREF="mailto:hafner@bigfoot.de">hafner@bigfoot.de</A>> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#files">FILES</A> +<LI><A HREF="#environment">ENVIRONMENT</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtofits.html b/pnmtofits.html new file mode 100644 index 00000000..5430f42d --- /dev/null +++ b/pnmtofits.html @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<title>pnmtofits</title> +</head><body> +<h1>pnmtofits</h1> +Updated: September 2005 +<br> +<h2>NAME</h2> +<B>pnmtofits</B> - replaced by pamtofits +<h2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +In Netpbm 10.30 (October 2005), <b>pnmtofits</b> was extended and renamed to +<b><a href="pamtofits.html">pamtofits</a></b>. + +<p><b>pamtofits</b> is backward compatible with <b>pnmtofits</b>. + +</body> +</html> diff --git a/pnmtojbig.html b/pnmtojbig.html new file mode 100644 index 00000000..01200628 --- /dev/null +++ b/pnmtojbig.html @@ -0,0 +1,285 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtojbig User Manual</TITLE></HEAD> +<BODY> +<H1>PNMTOJBIG</H1> +Updated: 20 May 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtojbig - PNM to JBIG file converter + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtojbig</B> + +[<I>options</I>] +[<I>input-file</I> [<I>output-file</I>]] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtojbig</b> reads a PBM or PGM image, compresses it, and +outputs the image as a JBIG bi-level image entity (BIE) file. + +<P>JBIG is a highly effective lossless compression algorithm for +bi-level images (one bit per pixel), which is particularly suitable +for scanned document pages. + +<P>A JBIG encoded image can be stored in several resolutions +(progressive mode). These resolution layers can be stored all in one +single BIE or they can be stored in several separate BIE files. All +resolution layers except the lowest one are stored merely as +differences to the next lower resolution layer, because this requires +less space than encoding the full image completely every time. Each +resolution layer has twice the number of horizontal and vertical +pixels than the next lower layer. JBIG files can also store several +bits per pixel as separate bitmap planes, and <B>pnmtojbig</B> +can read a PGM file and transform it into a multi-bitplane BIE. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-q</B> + +<DD>Encode the image in one single resolution layer (sequential +mode). This is usually the most efficient compression method. By +default, the number of resolution layers is chosen automatically such +that the lowest layer image is not larger than 640 × 480 pixels. + +<DT><B>-x</B> <I>number</I> + +<DD>Specify the maximal horizontal size of the lowest resolution +layer. The default is 640 pixels. + +<DT><B>-y</B> <I>number</I> + +<DD>Specify the maximal vertical size of the lowest resolution layer. +The default is 480 pixels. + +<DT><B>-l</B> <I>number</I> + +<DD>Select the lowest resolution layer that will be written to the +BIE. It is possible to store the various resolution layers of a JBIG +image in progressive mode into different BIEs. Options <B>-l</B> and +<B>-h</B> allow you to select the resolution-layer interval that will +appear in the created BIE. The lowest resolution layer has number 0 +and this is also the default value. By default, <b>pnmtojbig</b> +writes all layers. + +<DT><B>-h</B> <I>number</I> + +<DD>Select the highest resolution layer that will be written to the +BIE. By default, <b>pnmtojbig</b> writes all layers. See also option +<B>-l</B>. + +<DT><B>-b</B> + +<DD>Use binary values instead of Gray code words in order to encode +pixel values in multiple bitplanes. This option has only an effect if +the input is a PGM file and if more than one bitplane is +produced. Note that the decoder has to make the same selection but +cannot determine from the BIE, whether Gray or binary code words were +used by the encoder. + +<DT><B>-d</B> <I>number</I> + +<DD>Specify the total number of differential resolution layers into +which the input image will be split in addition to the lowest layer. +Each additional layer reduces the size of layer 0 by 50 %. This +option overrides options <B>-x</B> and <B>-y</B>, which are usually a +more comfortable way of selecting the number of resolution layers. + +<DT><B>-s</B> <I>number</I> + +<DD>The JBIG algorithm splits each image into a number of horizontal +stripes. This option specifies that each stripe shall have +<I>number</I> lines in layer 0. The default value is selected so that +approximately 35 stripes will be used for the whole image. + +<DT><B>-m</B> <I>number</I> + +<DD>Select the maximum horizontal offset of the adaptive template +pixel. The JBIG encoder uses a number of neighbour pixels in order to +get statistical a priori knowledge of the probability, whether the +next pixel will be black or white. One single pixel out of this +template of context neighbor pixels can be moved around. Especially +for dithered images it can be a significant advantage to have one +neighbor pixel which has a distance large enough to cover the period +of a dither function. By default, the adaptive template pixel can be +moved up to 8 pixels away. This encoder supports up to 23 pixels, +however as decoders are only required to support at least a distance +of 16 pixels by the standard, no higher value than 16 for +<I>number</I> is recommended in order to maintain interoperability +with other JBIG implementations. The maximal vertical offset of the +adaptive template pixel is always zero. + +<DT><B>-t</B> <I>number</I> + +<DD>Encode only the specified number of most significant bit planes. +This option allows to reduce the depth of an input PGM file if not all +bits per pixel are needed in the output. + +<DT><B>-o</B> <I>number</I> + +<DD>JBIG separates an image into several horizontal stripes, +resolution layers and planes, were each plane contains one bit per +pixel. One single stripe in one plane and layer is encoded as a data +unit called stripe data entity (SDE) inside the BIE. There are 12 +different possible orders in which the SDEs can be stored inside the +BIE and <I>number</I> selects which one shall be used. The order of +the SDEs is only relevant for applications that want to decode a JBIG +file which has not yet completely arrived from e.g. a slow network +connection. For instance some applications prefer that the outermost +of the three loops (stripes, layers, planes) is over all layers so +that all data of the lowest resolution layer is transmitted first. + +<p>The following values for <I>number</I> select these loop +arrangements for writing the SDEs (outermost loop first): + +<dl> +<dt>0 +<dd>planes, layers, stripes + +<dt>2 +<dd>layers, planes, stripes + +<dt>3 +<dd>layers, stripes, planes + +<dt>4 +<dd>stripes, planes, layers + +<dt>5 +<dd>planes, stripes, layers + +<dt>6 +<dd>stripes, layers, planes + +</dl> + +<P>All loops count starting with zero, however by adding 8 to the +above order code, the layer loop can be reversed so that it counts +down to zero and then higher resolution layers will be stored before +lower layers. Default order is 3 which writes at first all planes of +the first stripe and then completes layer 0 before continuing with the +next layer and so on. + +<DT><B>-p</B> <I>number</I> + +<DD>This option allows you to activate or deactivate various optional +algorithms defined in the JBIG standard. Just add the numbers of the +following options which you want to activate in order to get the +<I>number</I> value: + + +<dl> +<dt>4 +<dd>deterministic prediction (DPON) + +<dt>8 +<dd>typical prediction (TPBON) + +<dt>16 +<dd>diff. layer typical prediction (TPDON) + +<dt>64 +<dd>layer 0 two-line template (LRLTWO) + +</dl> + +<P>Except for special applications (like communication with JBIG +subset implementations) and for debugging purposes you will normally +not want to change anything here. The default is 28, which provides +the best compression result. + +<DT><B>-c</B> + +<DD>The adaptive template pixel movement is determined as suggested in +annex C of the standard. By default the template change takes place +directly in the next line which is most effective. However a few +conformance test examples in the standard require the adaptive +template change to be delayed until the first line of the next stripe. +This option selects this special behavior, which is normally not +required except in order to pass some conformance test suite. + +<DT><B>-v</B> + +<DD>After <b>pnmtojbig</b> creates the BIE, it lists a few technical +details of the created file (verbose mode). + +</DL> + +<A NAME="lbAF"> </A> +<H2>FORMATS</H2> + +<P>Most of the format <B>pnmtojbig</B> creates is defined by the +JBIG standard. + +<P>The standard, however, does not specify which values in the BIE mean +white and which mean black. It contains a recommendation that for a +single plane image zero mean background and one mean foreground, but +the Netpbm formats have no concept of foreground and background. And +the standard says nothing about values for multiple plane BIEs. + +<P><B>pnmtojbig</B> follows Markus Kuhn's implementation of the +standard in the <B>pbmtojbg</B> program that comes with his +JBIG library: If the BIE is a single plane BIE, zero means +white and one means black. If it is a multiple plane BIE, zero means +black and the maximal value is white. + +<A NAME="lbAG"> </A> +<H2>STANDARDS</H2> + +<p>This program implements the JBIG image coding algorithm as +specified in ISO/IEC 11544:1993 and ITU-T T.82(1993). + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<B>pnmtojbig</B> is based on the JBIG library by Markus Kuhn, part of +his <B>JBIG-KIT</B> package. The <B>pbmtojbg</B> program is part of +the <I>JBIG-KIT</I> package. The most recent version of that library +and tools set is freely available on the Internet from anonymous ftp +server <A +HREF="ftp://ftp.informatik.uni-erlangen.de">ftp.informatik.uni-erlangen.de</A> +in directory pub/doc/ISO/JBIG/. + +<P><B>pnmtojbig</B> is part of the Netpbm package of graphics tools. + +<A NAME="lbAI"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="jbigtopnm.html">jbigtopnm</A></B> + +<A NAME="lbAJ"> </A> +<H2>LICENSE</H2> + +If you use <B>pnmtojbig</B>, you are using various patents, +particularly on its arithmetic encoding method, and in all probability +you do not have a license from the patent owners to do so. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">FORMATS</A> +<LI><A HREF="#lbAG">STANDARDS</A> +<LI><A HREF="#lbAH">AUTHOR</A> +<LI><A HREF="#lbAI">SEE ALSO</A> +<LI><A HREF="#lbAJ">LICENSE</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtojpeg.html b/pnmtojpeg.html new file mode 100644 index 00000000..656fc28e --- /dev/null +++ b/pnmtojpeg.html @@ -0,0 +1,534 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtojpeg User Manual</TITLE></HEAD> +<BODY> +<H1>PNMTOJPEG</H1> +Updated: 27 September 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pnmtojpeg - convert PNM image to a JFIF ("JPEG") image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmtojpeg</B> +[<B>-exif=</B><I>filespec</I>] +[<B>-quality=</B><I>n</I>] +[{<B>-grayscale</B>|<B>-greyscale</B>}] +[<B>-density=</B><I>n</I><b>x</b><i>n</i>[<b>dpi</b>,<b>dpcm</b>]] +[<B>-optimize</B>|<b>-optimise</b>] +[<B>-rgb</B>] +[<B>-progressive</B>] +[<B>-comment=</B><I>text</I>] +[<B>-dct=</b>{<b>int</B>|<b>fast</b>|<b>float</b>}] +[<B>-arithmetic</b>] +[<B>-restart=</B><I>n</I>] +[<B>-smooth=</B><I>n</I>] +[<B>-maxmemory=</B><I>n</I>] +[<B>-verbose</B>] +[<B>-baseline</B>] +[<B>-qtables=</B><I>filespec</I>] +[<B>-qslots=n[,...]</B>] +[<B>-sample=</B><I>H</i><b>x</b><i>V</i>[,...]] +[<B>-scans=</B><I>filespec</I>] +[<B>-tracelevel=</b><i>N</i>] + +<I>filename</I> + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>pnmtojpeg</B> converts the named PBM, PGM, or PPM image file, or +the standard input if no file is named, to a JFIF file on the standard +output. + +<P><B>pnmtojpeg</B> uses the Independent JPEG Group's JPEG library to +create the output file. See <B><A +HREF="http://www.ijg.org">http://www.ijg.org</A> </B> for information +on the library. + +<P>"JFIF" is the correct name for the image format commonly +known as "JPEG." Strictly speaking, JPEG is a method of +compression. The image format using JPEG compression that is by far +the most common is JFIF. There is also a subformat of TIFF that uses +JPEG compression. + +<P>EXIF is an image format that is a subformat of JFIF (to wit, a JFIF +file that contains an EXIF header as an APP1 marker). +<B>pnmtojpeg</B> creates an EXIF image when you specify the +<B>-exif</B> option. + +<H2 id="options">OPTIONS</H2> + +<p>The basic options are: + +<DL COMPACT> +<DT><B>-exif=</B><I>filespec</I> + +<DD> +This option specifies that the output image is to be EXIF (a subformat +of JFIF), i.e. it will have an EXIF header as a JFIF APP1 marker. +The contents of that marker are the contents of the specified file. +The special value <B>-</B> +means to read the EXIF header contents from standard input. It is +invalid to specify standard input for both the EXIF header and the +input image. +<P> +The EXIF file starts with a two byte field which is the length of +the file, including the length field, in pure binary, most significant +byte first. The special value of zero for the length field means there +is to be no EXIF header, i.e. the same as no <B>-exif</B> +option. This is useful for when you convert a file from JFIF to PNM +using <B>jpegtopnm</B>, +then transform it, then convert it back to JFIF with +<B>pnmtojpeg</B>, and you don't know whether or not it includes an EXIF header. +<B>jpegtopnm</B> +creates an EXIF file containing nothing but two bytes of zero when +the input JFIF file has no EXIF header. Thus, you can transfer +any EXIF header from the input JFIF to the output JFIF without +worrying about whether an EXIF header actually exists. +<P> +The contents of the EXIF file after the length field are the exact +byte for byte contents of the APP1 marker, not counting the length +field, that constitutes the EXIF header. + +<DT><B>-quality=</B><I>n</I> + +<DD>Scale quantization tables to adjust image quality. <I>n</I> is 0 +(worst) to 100 (best); default is 75. Below about 25 can produce images +some interpreters won't be able to interpret. See below for more info. + +<DT><B>-grayscale</B> +<DT><B>-greyscale</B> +<dt><b>-rgb</b> + +<dd>These options determine the color space used in the JFIF output. +<b>-grayscale</b> (or <b>-greyscale</b>) means to create a gray scale +JFIF, converting from color PPM input if necessary. <b>-rgb</b> means to +create an RGB JFIF, and the program fails if the input is not PPM. + +<p>If you specify neither, The output file is in YCbCr format if the +input is PPM, and grayscale format if the input is PBM or PGM. + +<p>YCbCr format (a color is represented by an intensity value and two +chrominance values) usually compresses much better than RGB (a color +is represented by one red, one green, and one blue value). RGB is +rare. But you may be able to convert between JFIF and PPM faster with +RGB, since it's the same color space PPM uses. + +<p>The <b>testimg.ppm</b> file that comes with Netpbm is 2.3 times +larger with the <b>-rgb</b> option that with the YCbCr default, and in +one experiment <b>pnmtojpeg</b> took 16% more CPU time to convert it. +The extra CPU time probably indicates that processing of all the extra +compressed data consumed all the CPU time saved by not having to +convert the RGB inputs to YCbCr. + +<P>Grayscale format takes up a lot less space and takes less time to create +and process than the color formats, even if the image contains nothing +but black, white, and gray. + +<p>The <b>-rgb</b> option was added in Netpbm 10.11 in October 2002. + +<dt><b>-density=</b><i>density</i> + +<dd>This option determines the density (aka resolution) information +recorded in the JFIF output image. It does not affect the raster in +any way; it just tells whoever reads the JFIF how to interpret the +raster. + +<p>The density value takes the form <i>x</i><b>x</b><i>y</i> followed +by an optional unit specifier of <b>dpi</b> or <b>dpcm</b>. Examples: +<b>1x1</b>, <b>3x2</b>, <b>300x300dpi</b>, <b>100x200dpcm</b>. The +first number is the horizontal density; the 2nd number is the vertical +density. Each may be any integer from 1 to 65535. The unit specifier +is <b>dpi</b> for dots per inch or <b>dpcm</b> for dots per +centimeter. If you don't specify the units, the density information +goes into the JFIF explicitly stating "density unspecified" (also +interpreted as "unknown"). This may seem pointless, but note that +even without specifying the units, the density numbers tell the aspect +ratio of the pixels. E.g. <b>1x1</b> tells you the pixels are square. +<b>3x2</b> tells you the pixels are vertical rectangles. + +<p>Note that if you specify different horizontal and vertical +densities, the resulting JFIF image is <em>not</em> a true +representation of the input PNM image, because <b>pnmtojpeg</b> +converts the raster pixel-for-pixel and the pixels of a PNM image are +defined to be square. Thus, if you start with a square PNM image and +specify <b>-density=3x2</b>, the resulting JFIF image is a horizontally +squashed version of the original. However, it is common to use an +input image which is a slight variation on PNM rather than true PNM +such that the pixels are not square. In that case, the appropriate +-density option yields a faithful reproduction of the input pseudo-PNM +image. + +<p>The default is 1x1 in unspecified units. + +<p>Before Netpbm 10.15 (April 2003), this option did not exist and the +<b>pnmtojpeg</b> always created a JFIF with a density of 1x1 in +unspecified units. + +<DT><B>-optimize</B> + +<DD> Perform optimization of entropy encoding parameters. Without +this, <B>pnmtojpeg</B> uses default encoding parameters. +<B>-optimize</B> usually makes the JFIF file a little smaller, but +<B>pnmtojpeg</B> runs somewhat slower and needs much more memory. +Image quality and speed of decompression are unaffected by +<B>-optimize</B>. + +<DT><B>-progressive</B> + +<DD> +Create a progressive JPEG file (see below). +<DT><B>-comment=</B><I>text</I> + +<DD> +Include a comment marker in the JFIF output, with comment text +<I>text</I>. + +Without this option, there are no comment markers in the output. + +</DL> + +<P>The <B>-quality</B> option lets you trade off compressed file size +against quality of the reconstructed image: the higher the quality +setting, the larger the JFIF file, and the closer the output image +will be to the original input. Normally you want to use the lowest +quality setting (smallest file) that decompresses into something +visually indistinguishable from the original image. For this purpose +the quality setting should be between 50 and 95 for reasonable +results; the default of 75 is often about right. If you see defects +at <B>-quality=75</B>, then go up 5 or 10 counts at a time until you +are happy with the output image. (The optimal setting will vary from +one image to another.) + +<p><B>-quality=100</B> generates a quantization table of all 1's, +minimizing loss in the quantization step (but there is still +information loss in subsampling, as well as roundoff error). This +setting is mainly of interest for experimental purposes. Quality +values above about 95 are <em>not</em> recommended for normal use; the +compressed file size goes up dramatically for hardly any gain in +output image quality. + +<P>In the other direction, quality values below 50 will produce very +small files of low image quality. Settings around 5 to 10 might be +useful in preparing an index of a large image library, for example. +Try <B>-quality=2</B> (or so) for some amusing Cubist effects. (Note: +quality values below about 25 generate 2-byte quantization tables, +which are considered optional in the JFIF standard. <B>pnmtojpeg</B> +emits a warning message when you give such a quality value, because +some other JFIF programs may be unable to decode the resulting file. +Use <B>-baseline</B> if you need to ensure compatibility at low +quality values.) + +<P>The <B>-progressive</B> option creates a "progressive +JPEG" file. In this type of JFIF file, the data is stored in +multiple scans of increasing quality. If the file is being +transmitted over a slow communications link, the decoder can use the +first scan to display a low-quality image very quickly, and can then +improve the display with each subsequent scan. The final image is +exactly equivalent to a standard JFIF file of the same quality +setting, and the total file size is about the same -- often a little +smaller. + +<p><strong>Caution:</strong> progressive JPEG is not yet widely +implemented, so many decoders will be unable to view a progressive +JPEG file at all. + +<p>If you're trying to control the quality/file size tradeoff, you +might consider the JPEG2000 format instead. See <a +href="pamtojpeg2k.html">pamtojpeg2k</a>. + +<p>Options for advanced users: +<DL COMPACT> + +<DT><B>-dct=int</B> + +<DD>Use integer DCT method (default). + +<DT><B>-dct=fast</B> + +<DD>Use fast integer DCT (less accurate). + +<DT><B>-dct=float</B> + +<DD>Use floating-point DCT method. The float method is very slightly +more accurate than the int method, but is much slower unless your +machine has very fast floating-point hardware. Also note that results +of the floating-point method may vary slightly across machines, while +the integer methods should give the same results everywhere. The fast +integer method is much less accurate than the other two. + +<DT><B>-arithmetic</b> +<dd>Use arithmetic coding. Default is Huffman encoding. Arithmetic coding +tends to get you a smaller result. + +<p>You may need patent licenses to use this option. According to +<a href="http://www.faqs.org/faqs/jpeg-faq">the JPEG FAQ</a>, +This method is covered by patents owned by IBM, AT&T, and Mitsubishi. + +<p>The author of the FAQ recommends against using arithmetic coding (and +therefore this option) because the space savings is not great enough to +justify the legal hassles. + +<DT><B>-restart=</B><I>n</I> + +<DD> +Emit a JPEG restart marker every <I>n</I> MCU rows, or every <I>n</I> +MCU blocks if you append <B>B</B> to the number. <B>-restart 0</B> +(the default) means no restart markers. + +<DT><B>-smooth=</B><I>n</I> + +<DD> +Smooth the input image to eliminate dithering noise. <I>n</I>, +ranging from 1 to 100, indicates the strength of smoothing. 0 (the +default) means no smoothing. + +<DT><B>-maxmemory=</B><I>n</I> + +<DD> +Set a limit for amount of memory to use in processing large images. Value is +in thousands of bytes, or millions of bytes if you append +<B>M</B> to the number. For example, <B>-max=4m</B> +selects 4,000,000 bytes. If <B>pnmtojpeg</B> +needs more space, it will use temporary files. + +<DT><B>-verbose</B> + +<DD> +Print to the Standard Error file messages about the conversion process. +This can be helpful in debugging problems. +</DL> + +<P>The <B>-restart</B> option tells <B>pnmtojpeg </B> to insert extra +markers that allow a JPEG decoder to resynchronize after a +transmission error. Without restart markers, any damage to a +compressed file will usually ruin the image from the point of the +error to the end of the image; with restart markers, the damage is +usually confined to the portion of the image up to the next restart +marker. Of course, the restart markers occupy extra space. We +recommend <B>-restart=1</B> for images that will be transmitted +across unreliable networks such as Usenet. + +<P>The <B>-smooth</B> option filters the input to eliminate +fine-scale noise. This is often useful when converting dithered +images to JFIF: a moderate smoothing factor of 10 to 50 gets rid of +dithering patterns in the input file, resulting in a smaller JFIF file +and a better-looking image. Too large a smoothing factor will visibly +blur the image, however. + +<P>Options for wizards: + +<DL COMPACT> +<DT><B>-baseline</B> + +<DD>Force baseline-compatible quantization tables to be generated. +This clamps quantization values to 8 bits even at low quality +settings. (This switch is poorly named, since it does not ensure that +the output is actually baseline JPEG. For example, you can use +<B>-baseline</B> and <B>-progressive</B> together.) + +<DT><B>-qtables=</B><I>filespec</I> + +<DD>Use the quantization tables given in the specified text file. + +<DT><B>-qslots=n[,...]</B> + +<DD>Select which quantization table to use for each color component. + +<DT><B>-sample=</B><I>H</i><b>x</b><i>V</i>[,...] + +<DD>Set JPEG sampling factors for each color component. + +<DT><B>-scans=</B><I>filespec</I> + +<DD>Use the scan script given in the specified text file. See below +for information on scan scripts. + +<DT><B>-tracelevel=</B><I>N</I> + +<DD>This sets the level of debug tracing the program outputs as it runs. +0 means none, and is the default. This level primarily controls tracing +of the JPEG library, and you can get some pretty interesting information +about the compression process. + +</DL> + +<P>The "wizard" options are intended for experimentation +with JPEG. If you don't know what you are doing, <strong>don't use +them</strong>. These switches are documented further in the file +wizard.doc that comes with the Independent JPEG Group's JPEG library. + +<H2 id="examples">EXAMPLES</H2> + +<P>This example compresses the PPM file foo.ppm with a quality factor +of 60 and saves the output as foo.jpg: + +<pre> + <B>pnmtojpeg -quality=60 foo.ppm > foo.jpg</B> +</pre> + +<p>Here's a more typical example. It converts from BMP to JFIF: + +<pre> + <B>cat foo.bmp | bmptoppm | pnmtojpeg > foo.jpg</B> +</pre> + +<h2 id="loss">JPEG Loss</h2> + +<p>When you compress with JPEG, you lose information -- i.e. the resulting +image has somewhat lower quality than the original. This is a characteristic +of JPEG itself, not any particular program. So if you do the usual +Netpbm thing and convert from JFIF to PNM, manipulate, then convert back +to JFIF, you will lose quality. The more you do it, the more you lose. +Drawings (charts, cartoons, line drawings, and such with few colors +and sharp edges) suffer the most. + +<P>To avoid this, you can use a compressed image format other than +JPEG. PNG and JPEG2000 are good choices, and Netpbm contains converters +for those. + +<p>If you need to use JFIF on a drawing, you should experiment with +<B>pnmtojpeg</B>'s <B>-quality</B> and <B>-smooth</B> options to get a +satisfactory conversion. <B>-smooth 10</B> or so is often helpful. + +<P>Because of the loss, you should do all the manipulation you have to +do on the image in some other format and convert to JFIF as the last +step. And if you can keep a copy in the original format, so much the +better. + +The <B>-optimize</B> option to <B>pnmtojpeg</B> is worth using when +you are making a "final" version for posting or archiving. +It's also a win when you are using low quality settings to make very +small JFIF files; the percentage improvement is often a lot more than +it is on larger files. (At present, <B>-optimize</B> mode is +automatically in effect when you generate a progressive JPEG file). + +<p>You can do flipping and rotating transformations losslessly with +the program <b>jpegtran</b>, which is packaged with the Independent +Jpeg Group's JPEG library. <b>jpegtran</b> exercises its intimate +knowledge of the way JPEG works to do the transformation without ever +actually decompressing the image. + +<h2 id="otherprog"></h2> + +<P>Another program, <B>cjpeg</B>, is similar. <B>cjpeg</B> is +maintained by the Independent JPEG Group and packaged with the JPEG +library which <B>pnmtojpeg</B> uses for all its JPEG work. Because of +that, you may expect it to exploit more current JPEG features. Also, +since you have to have the library to run <B>pnmtojpeg</B>, but not +vice versa, <B>cjpeg</B> may be more commonly available. + +<p>On the other hand, <B>cjpeg</B> does not use the NetPBM libraries +to process its input, as all the NetPBM tools such as <B>pnmtojpeg</B> +do. This means it is less likely to be consistent with all the other +programs that deal with the NetPBM formats. Also, the command syntax +of <B>pnmtojpeg</B> is consistent with that of the other Netpbm tools, +unlike <B>cjpeg</B>. + +<H2 id="scanscripts">SCAN SCRIPTS</H2> + +<P>Use the <B>-scan</B> option to specify a scan script. Or use the +<B>-progressive</B> option to specify a particular built-in scan +script. + +<P>Just what a scan script is, and the basic format of the scan script +file, is covered in the <B>wizard.doc</B> file that comes with the +Independent JPEG Group's JPEG library. Scan scripts are same for +<B>pnmtojpeg</B> as the are for <B>cjpeg</B>. + +<P>This section contains additional information that isn't, but +probably should be, in that document. + +<P>First, there are many restrictions on what is a valid scan script. +The JPEG library, and thus <B>pnmtojpeg</B>, checks thoroughly for any +lack of compliance with these restrictions, but does little to tell +you how the script fails to comply. The messages are very general and +sometimes untrue. + +<P> +To start with, the entries for the DC coefficient must come before any +entries for the AC coefficients. The DC coefficient is Coefficient 0; +all the other coefficients are AC coefficients. So in an entry for +the DC coefficient, the two numbers after the colon must be 0 and 0. +In an entry for AC coefficients, the first number after the colon must +not be 0. +<P> +In a DC entry, the color components must be in increasing order. +E.g. "0,2,1" before the colon is wrong. So is "0,0,0". +<P> +In an entry for an AC coeffient, you must specify only one color +component. I.e. there can be only one number before the colon. +<P> +In the first entry for a particular coefficient for a particular color +component, the "Ah" value must be zero, but the Al value can be any +valid bit number. In subsequent entries, Ah must be the Al value from +the previous entry (for that coefficient for that color component), +and the Al value must be one less than the Ah value. +<P> +The script must ultimately specify at least some of the DC coefficent +for every color component. Otherwise, you get the error message +"Script does not transmit all the data." You need not specify all of +the bits of the DC coefficient, or any of the AC coefficients. +<P> +There is a standard option in building the JPEG library to omit scan +script capability. If for some reason your library was built with +this option, you get the message "Requested feature was omitted at +compile time." + +<H2 id="environment">ENVIRONMENT</H2> + +<DL COMPACT> +<DT><B>JPEGMEM</B> + +<DD>If this environment variable is set, its value is the default +memory limit. The value is specified as described for the +<B>-maxmemory</B> option. An explicit <B>-maxmemory </B> option +overrides any <B>JPEGMEM</B>. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="jpegtopnm.html">jpegtopnm</A></B>, +<B><A HREF="pnm.html">pnm</A></B>, +<B>cjpeg</B> man page, +<B>djpeg</b> man page, +<B>jpegtran</B> man page, +<B>rdjpgcom</B> man page, +<B>wrjpgcom</B> man page + +<p>Wallace, Gregory K. "The JPEG Still Picture Compression +Standard", Communications of the ACM, April 1991 (vol. 34, +no. 4), pp. 30-44. + + +<H2 id="author">AUTHOR</H2> + +<B>pnmtojpeg</B> and this manual were derived in large part from +<B>cjpeg</B>, by the Independent JPEG Group. The program is otherwise +by Bryan Henderson on March 07, 2000. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#loss">JPEG LOSS</A> +<LI><A HREF="#otherprog">OTHER PROGRAMS</A> +<LI><A HREF="#scanscripts">SCAN SCRIPTS</A> +<LI><A HREF="#environment">ENVIRONMENT</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtopalm.html b/pnmtopalm.html new file mode 100644 index 00000000..74878386 --- /dev/null +++ b/pnmtopalm.html @@ -0,0 +1,313 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtopalm User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtopalm</H1> +Updated: 05 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmtopalm - convert a PNM image to a Palm Bitmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtopalm</B> + +[<B>-verbose</B>] + +[<B>-depth=</B><I>N</I>] + +[<B>-maxdepth=</B><I>N</I>] + +[<B>-colormap</B>] + +[<B>-transparent=</B><I>color</I>] + +[<B>-density=</B><i>N</i>] + +[<B>-offset</B>] + +[<B>-withdummy</B>] + +<BR> + +[<B>-scanline-compression</B> | <B>-rle-compression</B> | +<B>-packbits-compression</B>] + +[<I>pnmfile</I>] + +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtopalm</b> reads a PNM image as input, from Standard Input or +<I>pnmfile</I> and produces a Palm Bitmap as output. + +<P>Palm Bitmap files are either grayscale files 1, 2, or 4 bits wide, +or color files 8 bits wide, so <B>pnmtopalm</B> automatically scales +colors to have an appropriate maxval, unless you specify a depth or +max depth. Input files must have an appropriate number and set of +colors for the selected output constraints. + +<p>This often means that you should run the PNM image through +<B>pnmquant</B> or <b>pnmremap</b> before you pass it to +<B>pnmtopalm</B>. Netpbm comes with several colormap files you can +use with <B>pnmremap</B> for this purpose. They are +<i>palmgray2.map</i> (4 shades of gray for a depth of 2), +<i>palmgray4.map</i> (16 shades of gray for a depth of 4), and +<i>palmcolor8.map</i> (232 colors in default Palm colormap). In a +standard Netpbm installation, these are in the Netpbm data directory, +and you can find the Netpbm data directory with a <b>netpbm-config +--datadir</b> shell command. + +<p>Example: + +<pre> + pnmremap myimage.ppm \ + -mapfile=$(netpbm-config --datadir)/palmgray2.map \ + | pnmtopalm -depth=2 >myimage.palm + +</pre> + + +<h3 id="version">Palm Bitmap Version</h3> + +<p><b>pnmtopalm</b> generates a Version 0, 1, 2, or 3 Palm Bitmap. +It generates the oldest (lowest) version it can for the given image and +the options you specify. + +<ul> +<li>If you specify a density (<b>-density</b> option) higher than +"low," the version is at least 3. + +<li>If you specify transparency (<b>-transparent</b> option) or +any compression, the version is at least 2. + +<li>If you specify a custom colormap (<b>-colormap</b> option), the +verison is at least 1. + +<li>If the image has more than one bit per pixel, the version is at least +1. The image has more than one bit per pixel if you specify it with +<b>-depth</b> or if you let it default and the image has more than +two colors (or shades of gray). + +</ul> + +<p>All releases of Palm OS can read a Version 0 bitmap. Palm OS 3.0 and +later can read a Version 1 bitmap. Palm OS 3.5 and later can read a +Version 2 bitmap. To read a Version 3 bitmap, you need Palm OS Garnet +or a handheld running the High Density Display Feature Set. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-verbose</B> +<DD> +Display the format of the output file. + +<DT><B>-depth=</B><I>N</I> +<DD> +Produce a file of depth <I>N</I>, where <I>N</I> must be either 1, 2, +4, 8, or 16. Because the default Palm 8-bit colormap is not +grayscale, if the input is a grayscale or monochrome image, the +output will never be more than 4 bits deep, regardless of the +specified depth. Note that 8-bit color works only in PalmOS 3.5 (and +higher), and 16-bit direct color works only in PalmOS 4.0 (and +higher). However, the 16-bit direct color format is also compatible +with the various PalmOS 3.x versions used in the Handspring Visor, so +these images may also work in that device. + +<DT><B>-maxdepth=</B><I>N</I> +<DD> +Produce a file of minimal depth, but in any case less than <I>N</I> +bits wide. If you specify 16-bit, the output will always be 16-bit +direct color. + +<DT><B>-offset</B> +<DD> +Set the <B>nextDepthOffset</B> field in the palm file header to indicate +the end of the file (and pad the end of the file to 4 bytes, since +<b>nextDepthOffset</b> can point only to 4 byte boundaries). + +<p>A palm image file can contain multiple renditions of the same image, +with different color depths, so a viewer can choose one appropriate for +the display. The <b>nextDepthOffset</b> field tells where in the stream +the next rendition begins. + +<p><b>pnmtopalm</b> creates a file that contains only one image, but +you can separately concatenate multiple one-image files to create a +multi-image file. If you do that, you'll need to use <b>-offset</b> +so that the resulting concatenation is a correct stream. + +<p>By default (if you don't specify <b>-offset</b>), <b>pnmtopalm</b> +generates a <b>nextDepthOffset</b> field that says there is no following +image (and does not add any padding after the image). + +<p>Version 3 Palm Bitmaps actually have a <b>nextBitmapOffset</b> +field instead of the <b>nextDepthOffset</b>. The foregoing applies to +whichever is relevant. + +<p>The <b>-offset</b> option was new in Netpbm 10.26 (January 2005). +Before that, <b>pnmtopalm</b> always set the <b>nextDepthOffset</b> +field to "none." + +<p>Before Netpbm 10.27 (March 2005), you cannot use <b>-offset</b> if +you create a compressed raster (because <b>pnmtopalm</b> isn't smart +enough to be able to know the size of the image at the time it writes +the header). You also cannot use it with 16 bit color depth or with +the <b>-colormap</b> option, for much the same reason. + +<dt><b>-withdummy</b> +<dd> +This option tells <b>pnmtopalm</b> to put in the stream, after after +the image, a dummy image header to introduce subsequent high density +images. + +<p>This dummy image header is a special sequence specified in Palm Bitmap +specifications. It looks to an older Palm Bitmap interpreter like an invalid +image header, so such an intepreter will stop reading the stream +there. But a new Palm Bitmap interpreter recognizes it for what it is (just +something to choke an old interpreter) and skips over it. Presumably, +you will add to the stream after this high density images which would +confuse an older interpreter. + +<p>If you specify <b>-withdummy</b>, you must also specify <b>-offset</b>, +since it doesn't make any sense otherwise. + +<p><b>-withdummy</b> was new in Netpbm 10.27 (March 2005). + +<DT><B>-colormap</B> +<DD> +Build a custom colormap and include it in the output file. This is +not recommended by Palm, for efficiency reasons. Otherwise, <B>pnmtopalm</B> +uses the default Palm colormap for color output. + +<DT><B>-transparent=</B><I>color</I> + +<DD> + +Marks <EM>one</EM> particular color as fully transparent. The format +to specify the color is either (when for example orange) +"1.0,0.5,0.0", where the values are floats between zero and +one, or with the syntax "#RGB", "#RRGGBB" or +"#RRRRGGGGBBBB" where R, G and B are hexadecimal numbers. +Transparency works only on Palm OS 3.5 and higher. + +<DT><B>-scanline-compression</B> +<DD> +Specifies that the output Palm bitmap will use the Palm scanline +compression scheme. Scanline compression works only in Palm OS 2.0 +and higher. + +<DT><B>-rle-compression</B> +<DD> +Specifies that the output Palm bitmap will use the Palm RLE +compression scheme. RLE compression works only with Palm OS 3.5 and +higher. + +<DT><B>-packbits-compression</B> +<DD> +Specifies that the output Palm bitmap will use the Palm packbits +compression scheme. Packbits compression works only with Palm OS 4.0 and +higher. + +<p>This option was new in Netpbm 10.27 (March 2005). + +<dt><b>-density</b>=<i>N</i> +<dd> +This specifies the Palm Bitmap density. The density is a number that +is proportional to the resolution the image should have when displayed. +The proportionality factor is up to whatever is doing the displaying, +but it's helpful to think of these numbers as being pixels per inch. +The allowable values are: + +<ul> +<li>72 +<li>108 +<li>144 +<li>216 +<li>288 +</ul> + +<p>This option was new in Netpbm 10.27 (March 2005). Earlier Netpbm +could not generate Version 3 Palm Bitmaps, so there was no such thing +as density. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="palmtopnm.html">palmtopnm</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<A HREF="pnm.html">pnm</A>, +<a +href="http://www.palmos.com/dev/support/docs/palmos/PalmOSReference/Bitmap.html">PalmOS +Reference</a>, + +<a +href="http://www.palmos.com/dev/support/docs/palmos/PalmOSCompanion/UserInterface.html#1010236">PalmOS +Companion</a>. + + +<A NAME="lbAG"> </A> +<H2>NOTES</H2> + +<P>Palm Bitmaps may contains multiple renditions of the same bitmap, +in different depths. To construct an N-multiple-rendition Palm Bitmap +with <B>pnmtopalm</B>, first construct renditions 1 through N-1 using +the <B>-offset</B> option, then construct the Nth image without the +<B>-offset</B> option. Then concatenate the individual renditions +together in a single file using <B>cat</B>. + +<p>If you will include both high density and low density renditions, +put the high density images last and when you create the last of the +low density images, use the <b>-withdummy</b> option. + +<H2 id="limitations">LIMITATIONS</H2> + +<P>You cannot generate an alpha mask if the Palm pixmap has a +transparent color. However, you can still do this with +<B>ppmcolormask</B> with a Netpbm pipe similar to: + +<P> +<B>palmtopnm pixmap.palm | ppmcolormask `palmtopnm -transparent pixmap.palm`</B> + +<A NAME="lbAH"> </A> +<H2>AUTHORS</H2> + +This program was originally written as ppmtoTbmp.c, by Ian Goldberg +and George Caswell. It was completely re-written by Bill Janssen to +add color, compression, and transparency function. +<BR> + +Copyright 1995-2001 by Ian Goldberg, George Caswell, and Bill Janssen. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#version">PALM BITMAP VERSION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">NOTES</A> +<LI><A HREF="#limitations">NOTES</A> +<LI><A HREF="#lbAH">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtopclxl.html b/pnmtopclxl.html new file mode 100644 index 00000000..1516d508 --- /dev/null +++ b/pnmtopclxl.html @@ -0,0 +1,191 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtopclxl User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtopclxl</H1> +Updated: 20 July 2005 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmtopclxl - convert a PNM image to an HP LaserJet PCL XL printer stream + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtopclxl</b> +[<b>-dpi</b> <i>N</i>] +[<b>-xoffs</b> <i>N</i>] +[<b>-yoffs</b> <i>N</i>] +[<b>-center</b>] +[<b>-duplex</b> {<b>vertical</b>|<b>horizontal</b>}] +[<b>-format</b> <i>paperformat</i>] +[<b>-feeder</b> <i>N</i>] +[<b>-copies</b> <i>N</i>] +[<b>-colorok</b>] +[<b>-rendergray</b>] +[<b>-jobsetup=</b><i>filename</i>] +<i>pnmfile1</i> <i>pnmfile2</i> ... + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>pnmtopclxl</b> reads one or more PNM input streams, each containing one +or more PNM images, and generates a sequence of output pages in the +HP PCL-XL (formerly named PCL 6) printer control language. You can send +this stream to a PCL-XL printer to print the images. + +<p>If the input is PPM, the output is a color printer stream (the PCL +color space is RGB). Otherwise, the output is grayscale (the PCL color space +is grayscale). If you want a grayscale output from a color input, run your +input through <b><a href="ppmtopgm.html">ppmtopgm</a></b>. See the +<b>-colorok</b> option for more information about choosing between color +and grayscale. + +<p>The output goes to Standard Output. All of the pages go to one +file, concatenated in the same order as the input images. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<dt><b>-dpi</b> <i>N</i> +<dd>This option selects the resolution of the image (not the printer!). +<i>N</i> is the resolution in dots per inch, from 1 to 65535. The default +is 300. + +<dt><b>-xoffs</b> <i>N</i> +<dd>This option and <b>-yoffs</b> determine the location on the page of the +upper left corner of each image. Note that the image may have built in +borders tool, which would make the main image within more left and down +that what you specify here. + +<p><b>-xoffs</b> and <b>-yoffs</b> specify the distance from the left of the +page and from the top of the page, respectively, in inches, of the upper left +corner of the image. The default for each is zero. + +<p>These options are meaningless if you specify <b>-center</b>. + +<dt><b>-yoffs</b> <i>N</i> +<dd>See <b>-xoffs</b>. + +<dt><b>-center</b> +<dd>This option tells <b>pnmtopclxl</b> to center each image on the page. +If you don't specify this option, the position of an image on the page is +determined by <b>-xoffs</b> and <b>-yoffs</b> (or their defaults). + +<dt><b>-duplex</b> {<b>vertical</b>|<b>horizontal</b>} <dd>This option +causes <b>pnmtopclxl</b> to create a printer stream that prints pages +on boths sides of the sheet of paper. <b>vertical</b> means to print +them so that the left edge of both pages is on the same edge of the +sheet, while <b>horizontal</b> means the more usual duplexing where the +top of both pages is on the same edge of the sheet. + +<dt><b>-format</b> <i>paperformat</i> +<dd>This option selects the media (e.g. paper size) that the printer +control stream specifies. <i>paperformat</i> is one of the following +self-explanatory keywords: + +<ul> +<li>letter +<li>legal +<li>a3 +<li>a4 +<li>a5 +<li>a6 +<li>jb4 +<li>jb5 +<li>jb6 +<li>exec +<li>ledger +<li>b5envelope +<li>c5envelope +<li>com10envelope +<li>monarchenvelope +<li>dlenvelope +<li>jpostcard +<li>jdoublepostcard +</ul> + +<p>The default is "letter". + +<dt><b>-feeder</b> <i>N</i> +<dd>This options selects the media source (e.g. paper tray) that the +printer control stream specifies. + +<dt><b>-copies</b> <i>N</i> +<dd>This option specifies the number of copies that the printer control +stream tells the printer to print. + +<dt><b>-colorok</b> +<dd>This option simply tells <b>pnmtopclxl</b> not to warn you if you supply +a color input and therefore get color output. By default, <b>pnmtopclxl</b> +issues a warning any time it produces a color printer stream because it is +usually a mistake. It's a mistake because PCL XL is mainly used for laser +printers, and laser printers are mainly black and white. If you send a color +print stream to a black and white printer, it typically refuses to print +anything, and even if it manages to convert it to black and white and print +it, it takes 3 times as long to transmit a color stream to the printer than +to transmit the grayscale image that gives the same result. + +<dt><b>-rendergray</b> + +<dd>This option causes <b>pnmtopclxl</b> to include in the output +stream a command to set the RENDERMODE environment variable to +GRAYSCALE, which typically causes the printer to print in grayscale +regardless of the colors in the input, and may cause it to run much +faster even if the image is grayscale anyway. + +<p>This option was new in Netpbm 10.29 (August 2005). + +<dt><b>-jobsetup=</b><i>filename</i> + +<dd>This option causes <b>pnmtopclxl</b> to include arbitary job setup +PJL commands at the beginning of the output stream. It reads them from +the named file. + +<p><b>pnmtopclxl</b> does not inspect these commands in any way, but it +does expect them to be job setup commands. If you have garbage in your +file, you will hear from the printer. + +<p>This option was new in Netpbm 10.29 (August 2005). + +</DL> + + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<a href="ppmtolj.html"><b>ppmtolj</b></a>, +<a href="pbmtolj.html"><b>pbmtolj</b></a>, +<a href="ppmtopj.html"><b>ppmtopj</b></a>, +<a href="ppmtopjxl.html"><b>ppmtopjxl</b></a>, +<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>, +<a href="ppm.html"><b>ppm</b></a> + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>pnmtopclxl</b> was added to Netpbm in Release 10.6 (July 2002). +It was contributed by +<a href="mailto:cip307@cip.physik.uni-wuerzburg.de">Jochen Karrer</a>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtoplainpnm.html b/pnmtoplainpnm.html new file mode 100644 index 00000000..a0515513 --- /dev/null +++ b/pnmtoplainpnm.html @@ -0,0 +1,24 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Pnmtoplainpnm User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtoplainpnm</H1> +Updated: July 2004 +<BR> +<H2>NAME</H2> +<B>pnmtoplainpnm</B> - replaced by pnmtopnm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>pnmtoplainpnm</b> was obsoleted in Netpbm 10.23 (July 2004) by <b><a +href="pnmtopnm.html">pnmtopnm</a></b>. Just use the Netpbm common option +<b>-plain</b>. + +<P><B>pnmtoplainpnm</b> exists today for backward compatibility; all it +does is call <b>pnmtopnm -plain</b>. + +<p><b>pnmtoplainpnm</b> was new in Netpbm 8.2 (March 2000) as a renaming +of <b>pnmnoraw</b>, which was new in Pbmplus in November 1989. + +</BODY> +</HTML> diff --git a/pnmtopng.html b/pnmtopng.html new file mode 100644 index 00000000..876e029a --- /dev/null +++ b/pnmtopng.html @@ -0,0 +1,464 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Pnmtopng User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtopng</H1> +Updated: June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +pnmtopng - convert a PNM image to PNG + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmtopng</B> +[<b>-verbose</b>] +[<b>-downscale</b>] +[<b>-interlace</b>] +[<b>-alpha=</b><i>file</i>] +[<b>-transparent=</b>[<b>=</b>]<i>color</i>] +[<b>-background=</b><i>color</i>] +[<b>-palette=</b><i>palettefile</i>] +[<b>-gamma=</b><i>value</i>] +[<b>-hist</b>] +[<b>-text=</b><i>file</i>] +[<b>-ztxt=</b><i>file</i>] +<br> +[<b>-rgb="</b><i>wx</i> <i>wy</i> + <i>rx</i> <i>ry</i> <i>gx</i> <i>gy</i> <i>bx</i> <i>by</i><b>"</b>] +[<b>-size="</b><i>x</i> <i>y</i> <i>unit</i><b>"</b>] +[<b>-modtime="</b>[<i>yy</i>]<i>yy</i><b>-</b><i>mm</i><b>-</b><i>dd</i> + <i>hh</i><b>:</b><i>mm</i><b>:</b><i>ss</i><b>"</b>] +[<b>-nofilter</b>] +[<b>-sub</b>] +[<b>-up</b>] +[<b>-avg</b>] +[<b>-paeth</b>] +[<b>-compression=</b><i>n</i>] +[<b>-comp_mem_level=</b><i>n</i>] +<br> +[<b>-comp_strategy=</b>{<b>huffman_only</b>|<b>filtered</b>}] +[<b>-comp_method=</b><b>deflated</b>] +[<b>-comp_window_bits=</b><i>n</i>] +[<b>-comp_buffer_size=</b><i>n</i>] +[<b>-force</b>] +[<b>-libversion</b>] +[<I>pnmfile</I>] + + +<?makeman .SH OPTION USAGE ?> +<p> +Obsolete options: +<p> +[<b>-filter </b><I>n</I>] + +<p> +Options available only in older versions: +<p> +[<b>-chroma</b> <i>wx wy rx ry gx gy bx by</i>] +[<b>-phys</b> <i>x</i> <i>y</i> <i>unit</i>] +<br> +[<b>-time </b>[<i>yy</i>]<i>yy</i><b>-</b><i>mm</i><b>-</b><i>dd</i> + <i>hh</i><b>:</b><i>mm</i><b>:</b><i>ss</i>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtopng</b> reads a PNM image as input and produces a PNG image as +output. + +<P>Color values in PNG files are either eight or sixteen bits wide, so +<I>pnmtopng</I> will automatically scale colors to have a maxval of +255 or 65535. Grayscale files will be produced with bit depths 1, 2, +4, 8 or 16. An extra <B>pamdepth</B> step is not necessary. + +<H2 id="options">OPTIONS</H2> + +<p><b>pnmtopng</b> changed in Netpbm 10.30 (October 2005) to use the +standard Netpbm command line syntax. Before that, you could not +use double hyphens to denote an option and could not use an equal +sign to separate an option name from its value. And the options had +to come before the non-option program arguments. + +<p>Furthermore, the options <b>-chroma</b>, <b>-phys</b>, and +<b>-time</b> were replaced by <b>-rgb</b>, <b>size</b>, and +<b>-modtime</b>, respectively. The only difference, taking +<b>-phys</b>/<b>-size</b> as an example, is that <b>-phys</b> takes +multiple program arguments as the option argument, whereas <b>-rgb</b> +takes a single program argument which is composed of multiple words. +E.g. The old shell command + +<pre> +<kbd> + pnmtopng -phys 800 800 0 input.pnm >output.png +</kbd> +</pre> + +<p>is equivalent to the new shell command + +<pre> +<kbd> + pnmtopng -size "800 800 0" input.pnm >output.png +</kbd> +</pre> + +<p>If you're writing a program that needs to work with both new and old +<b>pnmtopng</b>, have it first try with the new syntax, and if it fails +with "unrecognized option," fall back to the old syntax. + +<DL COMPACT> +<DT><B>-verbose</B> +<DD> + Display the format of the output file. +<DT><B>-downscale</B> +<DD> + Enables scaling of maxvalues of more then 65535 to 16 bit. Since + this means loss of image data, the step is not performed by default. +<DT><B>-interlace</B> +<DD> + Creates an interlaced PNG file (Adam7). +<DT><B>-alpha=</b><i>filename</i> + +<DD> This specifies the transparency (alpha channel) of the image. +You supply the alpha channel as a standard PGM alpha mask (see the <a +href="pgm.html">PGM</a> specification. <b>pnmtopng</b> does not +necessarily represents the transparency information as an alpha channel in +the PNG format. If it can represent the transparency information through +a palette, it will do so in order to make a smaller PNG file. +<b>pnmtopng</b> even sorts the palette so it can omit the opaque colors +from the transparency part of the palette and save space for the palette. + +<DT><B>-transparent=</b><i>color</i> +<DD> +<B>pnmtopng</B> marks the specified color as transparent in the PNG image. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. +E.g. <B>red</B> or +<B>rgb:ff/00/0d</B>. If the color you specify is not present in the +image, <B>pnmtopng</B> selects instead the color in the image that is +closest to the one you specify. Closeness is measured as a cartesian +distance between colors in RGB space. If multiple colors are +equidistant, <B>pnmtopng</B> chooses one of them arbitrarily. + +<P>However, if you prefix your color specification with +"=", e.g. + +<pre> + -transparent =red + +</pre> + +<P> only the exact color you specify will be transparent. If that +color does not appear in the image, there will be no transparency. +<B>pnmtopng</B> issues an information message when this is the case. + +<DT><B>-background=</b><i>color</i> +<DD> +Causes <b>pnmtopng</b> to create a background color chunk in the PNG output +which can be used for subsequent alpha channel or transparent color +conversions. Specify <i>color</i> the same as for <b>-transparent</b>. + +<DT><B>-palette=</b><i>palettefile</i> + +<DD>This option specifies a palette to use in the PNG. It forces +<b>pnmtopng</b> to create the paletted (colormapped) variety of PNG -- +if that isn't possible, <b>pnmtopng</b> fails. If the palette you +specify doesn't contain exactly the colors in the image, +<b>pnmtopng</b> fails. Since <b>pnmtopng</b> will automatically +generate a paletted PNG, with a correct palette, when appropriate, the +only reason you would specify the <b>-palette</b> option is if you care +in what order the colors appear in the palette. The PNG palette has colors +in the same order as the palette you specify. + +<P>You specify the palette by naming a PPM file that has one pixel for +each color in the palette. + +<P>Alternatively, consider the case that have a palette and you want +to make sure your PNG contains only colors from the palette, +approximating if necessary. You don't care what indexes the PNG uses +internally for the colors (i.e. the order of the PNG palette). In +this case, you don't need <b>-palette</b>. Pass the Netpbm input +image and your palette PPM through <b>pnmremap</b>. Though you might +think it would, using <b>-palette</b> in this case wouldn't even save +<b>pnmtopng</b> any work. + +<DT><B>-gamma=</b><i>value</i> + +<DD>Causes <b>pnmtopng</b> to create a gAMA chunk. This information helps +describe how the color values in the PNG must be interpreted. Without +the gAMA chunk, whatever interprets the PNG must get this information +separately (or just assume something standard). If your input is a true +PPM or PGM image, you should specify <b>-gamma .45</b>. But sometimes +people generate images which are ostensibly PPM except the image uses a +different gamma transfer function than the one specified for PPM. A common +case of this is when the image is created by simple hardware that doesn't +have digital computational ability. Also, some simple programs that generate +images from scratch do it with a gamma transfer in which the gamma value is +1.0. + +<DT><B>-hist</B> + +<DD>Use this parameter to create a chunk that specifies the frequency +(or histogram) of the colors in the image. + +<DT><B>-rgb=</b><i>chroma_list</i> + +<DD>This option specifies how red, green, and blue component values +of a pixel specify a particular color, by telling the chromaticities +of those 3 primary illuminants and of white (i.e. full strength of +all three). + +<p>The <i>chroma_list</i> value is a blank-separated list of 8 floating +point decimal numbers. The CIE-1931 X and Y chromaticities (in that +order) of each of white, red, green, and blue, in that order. + +<p>This information goes into the PNG's cHRM chunk. + +<p>In a shell command, make sure you use quotation marks so that the +blanks in <i>chroma_list</i> don't make the shell see multiple command +arguments. + +<p>This option was new in Netpbm 10.30 (October 2005). Before that, +the option <b>-chroma</b> does the same thing, but with slightly +different syntax. + +<DT><B>-size="</b><i>x</i> <i>y</i> <i>unit</i><b>"</b> + +<DD>This option determines the aspect ratio of the individual pixels +of your image as well as the physical resolution of it. + +<p><i>unit</i> is either <b>0</b> or <i>1</i>. When it is <i>1</i>, +the option specifies the physical resolution of the image in pixels +per meter. For example, <b>-size="10000 15000 1"</b> means +that when someone displays the image, he should make it so that 10,000 +pixels horizontally occupy 1 meter and 15,000 pixels vertically occupy +one meter. And even if he doesn't take this advice on the overall +size of the displayed image, he should at least make it so that each +pixel displays as 1.5 times as high as wide. + +<p>When <i>unit</i> is <b>0</b>, that means there is no advice on +the absolute physical resolution; just on the ratio of horizontal to +vertical physical resolution. + +<p>This information goes into the PNG's pHYS chunk. + +<p>When you don't specify <b>-size</b>, <b>pnmtopng</b> creates the image +with no pHYS chunk, which means square pixels of no absolute resolution. + +<p>This option was new in Netpbm 10.30 (October 2005). Before that, +the option <b>-phys</b> does the same thing, but with slightly +different syntax. + +<DT><B>-text=</b><i>filename</i> + +<DD> +This option lets you include comments in the text chunk of the PNG output. +<i>file</i> is the name of a file that contains your text comments. + +<p>Here is an example of a comment file: +<pre> + Title PNG file + + Author Bryan Henderson + + Description how to include a text chunk + PNG file + "Creation date" 3-feb-1987 + + Software pnmtopng +</pre> + +<p>The format of the file is as follows: The file is divided into lines, +delimited by newline characters. The last line need not end with a newline +character. A group of consecutive lines represents a comment. + +<p>A "delimiter character" is a blank or tab or null character. The +first line representing a comment must not start with a delimiter +character. Every other line in the group is a "continuation line" and +must start with a delimiter character. + +<p>The first line representing a comment consists of a keyword and the +first line of comment text. The keyword begins in Column 1 of the +file line and continues up to, but not including, the first delimiter +character, or the end of the line, whichever is first. Exception: you +can enclose the keyword in double quotes and spaces and tabs within +the double quotes are part of the keyword. The quotes are not part of +the keyword. A NUL character is not allowed in a keyword. + +<p>The first line of the comment text is all the text in the file line +beginning after the keyword and any delimiter characters after it. +immediately after the delimiter character that marks the end of the +keyword. + +<p>A continuation line defines a subsequent line of the comment. The +comment line is all the text on the continuation line starting with the +first non-delimiter character. + +<p>There is one newline character between every two comment lines. There +is no newline character after the last line of comment text. + +<p>There is no limit on the length of a file line or keyword or comment text +line or comment text. There is no limit on the number of comments or +size of or number of lines in the file. + +<DT><B>-ztxt=</b><i>filename</i> + +<DD>The same as <b>-text</b>, except <b>pnmtopng</b> considers the +text compressed. + +<DT><B>-modtime="</b>[<i>yy</i>]<i>yy-mm-dd hh:mm:ss</i><b>"</b> + +<DD>This option allows you to specify the modification time value to +be placed in the PNG output. You can specify the year parameter +either as a two digit or four digit value. + +<p>This option was new in Netpbm 10.30 (October 2005). Before that, +the option <b>-time</b> does the same thing, but with slightly +different syntax. + +<DT><B>-filter=</b><i>n</i> + +<DD>This option is obsolete. Before Netpbm 10.22 (April 2004), this was +the only way to specify a row filter. It specifies a single type of +row filter, by number, that <b>pnmtopng</b> must use on each row. + +<p>Use <b>-nofilter</b>, <b>-sub</b>, <b>-up</b>, <b>-avg</b>, and +<b>-paeth</b> in current Netpbm. + +<dt><b>-nofilter</b> +<dt><b>-sub</b> +<dt><b>-up</b> +<dt><b>-avg</b> +<dt><b>-paeth</b> + +<dd>Each of these options permits <b>pnmtopng</b> to use one type of +row filter. <b>pnmtopng</b> chooses whichever of the permitted +filters it finds to be optimal. If you specify none of these options, +it is the same as specifying all of them -- <b>pnmtopng</b> uses any +row filter type it finds optimal. + +<p>These options were new with Netpbm 10.22 (April 2004). Before that, +you could use the <b>-filter</b> option to specify one permitted row +filter type. The default, when you specify no filter options, was the +same. + +<DT><B>-compression=</b><i>n</i> + +<DD>This option sets set the compression level of the zlib +compression. Select a level from 0 for no compression (maximum speed) +to 9 for maximum compression (minimum speed). + +<dt><b>-comp_mem_level=</b><i>n</i> + +<dd>This option sets the memory usage level of the zlib compression. +Select a level from 1 for minimum memory usage (and minimum speed) to +9 for maximum memory usage (and speed). + +<p>This option was new in Netpbm 10.30 (October 2005). + +<dt><b>-comp_strategy=</b>{<b>huffman_only</b>|<b>filtered</b>} + +<dd>This options sets the compression strategy of the zlib compression. +See Zlib documentation for information on what these strategies are. + +<p>This option was new in Netpbm 10.30 (October 2005). + +<dt><b>-comp_method=</b><b>deflated</b> + +<dd>This option does nothing. It is here for mathematical +completeness and for possible forward compatibility. It theoretically +selects the compression method of the zlib compression, but the Z +library knows only one method today, so there's nothing to choose. + +<p>This option was new in Netpbm 10.30 (October 2005). + +<dt><b>-comp_window_bits=</b><I>N</I> + +<dd>This option tells how big a window the zlib compression algorithm +uses. The value is the base 2 logarithm of the window size in bytes, +so 8 means 256 bytes. The value must be from 8 to 15 (i.e. 256 bytes +to 32K). + +<p>See Zlib documentation for details on what this window size is. + +<p>This option was new in Netpbm 10.30 (October 2005). + +<dt><b>-comp_buffer_size</b>=<I>N</I> + +<dd>This option determines in what size pieces <b>pnmtopng</b> does the +zlib compression. One compressed piece goes in each IDAT chunk in the +PNG. So the bigger this value, the fewer IDAT chunks your PNG will have. +Theoretically, this makes the PNG smaller because 1) you have less +per-IDAT-chunk overhead, and 2) the compression algorithm has more data +to work with. But in reality, the difference will probably not be +noticeable above about 8K, which is the default. + +<p>The value <i>n</i> is the size of the compressed piece (i.e. the +compression buffer) in bytes. + +<p>This option was new in Netpbm 10.30 (October 2005). + + +<DT><B>-force</B> + +<DD> +When you specify this, <b>pnmtopng</b> limits its optimizations. +The resulting PNG output is as similar to the Netpbm input as possible. +For example, the PNG output will not be paletted and the alpha channel +will be represented as a full alpha channel even if the information could +be represented more succinctly with a transparency chunk. + + +<DT><B>-libversion</B> + +<DD> +This option causes <b>pnmtopng</b> to display version information +about itself and the libraries it uses, <strong>in addition to all its +normal function</strong>. Do not confuse this with the Netpbm common +option <b>-version</b>, which causes the program to display version +information about the Netpbm library and do nothing else. + +<p>You can't really use this option in a program that invokes +<b>pnmtopng</b> and needs to know which version it is. Its function +has changed too much over the history of <b>pnmtopng</b>. The option +is only good for human eyes. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pngtopnm.html">pngtopnm</A>, +<A HREF="pamrgbatopng.html">pamrgbatopng</A>, +<A HREF="pnmremap.html">pnmremap</A>, +<A HREF="pnmgamma.html">pnmgamma</A>, +<A HREF="pnm.html">pnm</A> + +<p>For information on the PNG format, see <a +href="http://schaik.com/png">http://schaik.com/png</a>. + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1995-1997 by Alexander Lehmann and Willem van Schaik. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + + + diff --git a/pnmtopnm.html b/pnmtopnm.html new file mode 100644 index 00000000..2fd4aa3b --- /dev/null +++ b/pnmtopnm.html @@ -0,0 +1,78 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtopnm</H1> +Updated: 24 March 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtopnm - copy a PNM image +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtopnm</B> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pnmtopnm</b> simply copies a PNM image to Standard Output. The +output has the same major PNM format (PBM, PGM, or PPM) and maxval as +the input. This may seem an unnecessary duplication of <b>cat</b>, +but it lets you convert between the plain (ASCII) and raw (binary) +subformats of PNM. Use the <b>-plain</b> Netpbm common option to +ensure the output is plain PNM, and don't use <b>-plain</b> to ensure +the output is raw PNM. See <a href="index.html#commonoptions"> Common +Options</a>. + +<p>You don't normally need to convert between the PNM subformats, because +any program that uses the Netpbm library to read a PNM image will read +all of them directly. But there are a lot of programs that don't use +the Netpbm library and understand only the raw format. Plain format +is nice because it is human readable; people often use it to debug +programs that process PNM images. + +<p><b>pnmtopnm</b> is really just another name for the program +<b>pamtopnm</b>. The latter does the job because like any Netpbm +program that takes PAM input via the Netpbm programming library +facilities, it also takes PNM input. + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p><b>pnmtopnm</b> was new in Netpbm 10.23 (July 2004). It obsoleted +<b>pnmtoplainpnm</b>, which specifically did the conversion to plain +PNM. There was no program to explicitly convert to raw PNM, but many +Netpbm programs can be made, with the right options, to be idempotent +(i.e. to do the same thing as <b>pnmtopnm</b>). + +<p>Then David Jones realized that the existing <b>pamtopnm</b> already +did everything that <b>pnmtopnm</b> did and more, so +in Netpbm 10.27 (March 2005), <b>pnmtopnm</b> became simply an alternate +name for <b>pamtopnm</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtoppm.html">ppmtoppm</A> +<A HREF="pgmtopgm.html">pgmtopgm</A> +<A HREF="pamtopnm.html">pamtopnm</A> +<A HREF="pnm.html">pnm</A> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtops.html b/pnmtops.html new file mode 100644 index 00000000..9df3a800 --- /dev/null +++ b/pnmtops.html @@ -0,0 +1,385 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtops User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtops</H1> +Updated: 10 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +pnmtops - convert PNM image to PostScript + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>pnmtops</B> +[<B>-scale=</B><I>s</I>] +[<B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>]] +[<B>-imagewidth=</B><I>n</I>] +[<B>-imageheight=</B><I>n</I>] +[<B>-width=</B><I>N</I>] +[<B>-height=</B><I>N</I>] +[<B>-equalpixels</B>] +[<B>-turn</B>|<B>-noturn</B>] +[<B>-rle</B>|<B>-runlength</B>] +[<b>-flate</b>] +[<b>-ascii85</b>] +[<B>-nocenter</B>] +[<B>-nosetpage</B>] +[<b>-level=</b><i>N</i>] +[<b>-psfilter</b>] +[<B>-noshowpage</B>] +[<I>pnmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtops</b> reads a Netpbm image stream as input and produces +Encapsulated PostScript (EPSF) as output. + +<P>If the input file is in color (PPM), <B>pnmtops</B> generates a +color PostScript file. Some PostScript interpreters can't handle +color PostScript. If you have one of these you will need to run your +image through <B>ppmtopgm</B> first. + +<P>If you specify no output dimensioning options, the output image is +dimensioned as if you had specified <B>-scale=1.0</B>, which means +aproximately 72 pixels of the input image generate one inch of output +(if that fits the page). + +<P>Use <B>-imagewidth</B>, <B>-imageheight</B>, <B>-equalpixels</B>, +<B>-width</B>, <B>-height</B>, and <B>-scale</B> to adjust that. + +<p>Each image in the input stream becomes one complete one-page Postscript +program in the output. (This may not be the best way to create a multi-page +Postscript stream; someone who knows Postscript should work on this). + +<p>The line at the top of the file produced by <b>pnmtops</b> is +either "%!PS-Adobe-3.0 EPSF-3.0" or just +"%!PS-Adobe-3.0". The numbers do not reflect the Postscript +language level, but the version of the DSC comment specification and +EPS specification implmented. The Postscript language level is in the +"%%LanguageLevel:" comment. <b>pnmtops</b> omits "EPSF-3.0" if you +specify <b>-setpage</b>, because it is incorrect to claim EPS +compliance if the file uses <b>setpagedevice</b>. + + +<h3>What is Encapsulated Postscript?</h3> + +<p>Encapsulated Postscript (EPSF) is a subset of Postscript (i.e. the +set of streams that conform to EPSF is a subset of those that conform +to Postscript). It is designed so that an EPSF stream can be embedded +in another Postscript stream. A typical reason to do that is where an +EPSF stream describes a picture you want in a larger document. + +<p>An Encapsulated Postscript document conforms to the DSC (Document +Structuring Convention). The DSC defines some Postscript comments +(they're comments from a Postscript point of view, but have semantic +value from a DSC point of view). + +<p>More information about Encapsulated Postscript is at +<a href="http://www.cs.indiana.edu/docproject/programming/postscript/eps.html"> +http://www.cs.indiana.edu/docproject/programming/postscript/eps.html</a>. + +<p>Many of the ideas in <b>pnmtops</b> come from Dirk Krause's <b>bmeps</b>. +See <a href="#seealso">SEE ALSO</a> + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-imagewidth</B>, <B>-imageheight</B> +<DD> +Tells how wide and high you want the image on the page, in inches. +The aspect ratio of the image is preserved, so if you specify both of these, +the image on the page will be the largest image that will fit within the +box of those dimensions. +<P> +If these dimensions are greater than the page size, you get Postscript +output that runs off the page. + +<P>You cannot use <B>imagewidth</B> or <B>imageheight</B> with +<B>-scale</B> or <B>-equalpixels</B>. + +<DT><B>-equalpixels</B> + +<DD> +This option causes the output image to have the same number of pixels +as the input image. So if the output device is 600 dpi and your image +is 3000 pixels wide, the output image would be 5 inches wide. + +<P>You cannot use <B>-equalpixels</B> with <B>-imagewidth</B>, +<B>-imageheight</B>, or <B>-scale</B>. + +<DT><B>-scale</B> +<DD> +tells how big you want the image on the page. The value is the number of +inches of output image that you want 72 pixels of the input to generate. + +<P>But <B>pnmtops </B> rounds the number to something that is an +integral number of output device pixels. E.g. if the output device is +300 dpi and you specify <B>-scale=1.0</B>, then 75 (not 72) pixels of +input becomes one inch of output (4 output pixels for each input +pixel). Note that the <B>-dpi</B> option tells <B>pnmtops</B> how +many pixels per inch the output device generates. + +<P>If the size so specified does not fit on the page (as measured +either by the <B>-width</B> and <B>-height</B> options or the default +page size of 8.5 inches by 11 inches), <B>pnmtops</B> ignores the +<B>-scale</B> option, issues a warning, and scales the image to fit on +the page. + +<DT><B>-dpi=</B><I>N</I>[<B>x</B><I>N</I>] + +<DD> + +<P>This option specifies the dots per inch resolution of your output +device. The default is 300 dpi. In theory PostScript is +device-independent and you don't have to worry about this, but in +practice its raster rendering can have unsightly bands if the device +pixels and the image pixels aren't in sync. + +<P>Also this option is crucial to the working of the +<B>equalpixels</B> option. + +<P>If you specify <I>N</I><B>x</B>N, the first number is the +horizontal resolution and the second number is the vertical +resolution. If you specify just a single number <I>N</I>, that is the +resolution in both directions. + +<DT><B>-width</B>, <b>-height</b> + +<DD> These options specify the dimensions, in inches, of the page on +which the output is to be printed. This can affect the size of the +output image. + +<P> +The page size has no effect, however, when you specify the +<B>-imagewidth</B>, <B>-imageheight</B>, or <B>-equalpixels</B> options. + +<P>These options may also affect positioning of the image on the page and +even the paper selected (or cut) by the printer/plotter when the +output is printed. See the <B>-nosetpage</B> option. + +<P> +The default is 8.5 inches by 11 inches. + +<DT><B>-turn</B> + +<DT><B>-noturn</B> + +<dd>These options control whether the image gets turned 90 degrees. +Normally, if an image fits the page better when turned (e.g. the image +is wider than it is tall, but the page is taller than it is wide), it +gets turned automatically to better fit the page. If you specify the +<B>-turn</B> option, <B>pnmtops </B> turns the image no matter what +its shape; If you specify <B>-noturn</B>, <B>pnmtops</B> does +<em>not</em> turn it no matter what its shape. + +<DT><B>-rle</B> + +<DT><B>-runlength</B> + +<dd>These identical options tell <b>pnmtops</b> to use run length +compression in encoding the image in the Postscript program. This may +save time if the host-to-printer link is slow; but normally the +printer's processing time dominates, so <B>-rle</B> has no effect (and +in the absence of buffering, may make things slower. + +<p>This may, however, make the Postscript program considerable smaller. + +<p>This usually doesn't help at all with a color image and +<b>-psfilter</b>, because in that case, the Postscript program +<b>pnmtops</b> creates has the red, green, and blue values for each +pixel together, which means you would see long runs of identical bytes +only in the unlikely event that the red, green, and blue values for a +bunch of adjacent pixels are all the same. But without +<b>-psfilter</b>, the Postscript program has all the red values, then +all the green values, then all the blue values, so long runs appear +wherever there are long stretches of the same color. + +<dt><b>-flate</b> + +<dd>This option tells <b>pnmtops</b> to use "flate" +compression (i.e. compression via the "Z" library -- the +same as PNG). + +<p>See the <b>-rle</b> option for information about compression in general. + +<p>You must specify <b>-psfilter</b> if you specify <b>-flate</b>. + +<p>This option was new in Netbpm 10.27 (March 2005). + +<p>Before Netpbm 10.32 (February 2005), you could not specify <b>-rle</b> +and <b>-flate</b> together. + +<dt><b>-ascii85</b> + +<dd>By default, <b>pnmtops</b> uses "asciihex" encoding of +the image raster. The image raster is a stream of bits, while a Postscript +program is text, so there has to be an encoding from bits to text. Asciihex +encoding is just the common hexadecimal representation of bits. E.g. 8 +1 bits would be encoded as the two characters "FF". + +<p>With the <b>-ascii85</b> option, <b>pnmtops</b> uses +"ascii85" encoding instead. This is an encoding in which 32 +bits are encoded into five characters of text. Thus, it produces less +text for the same raster than asciihex. But ascii85 is not available +in Postscript Level 1, whereas asciihex is. + +<p>This option was new in Netbpm 10.27 (March 2005). + +<dt><b>-psfilter</b> + +<dd><b>pnmtops</b> can generate two different kinds of Encapsulated +Postscript programs to represent an image. By default, it generates a +program that redefines <b>readstring</b> in a custom manner and +doesn't rely on any built-in Postscript filters. But with the +<b>-psfilter</b> option, <b>pnmtops</b> leaves <b>readstring</b> alone +and uses the built-in Postscript filters <b>/ASCII85Decode</b>, +<b>/ASCIIHexDecode</b>, <b>/RunLengthDecode</b>, and <b>/FlateDecode</b>. + +<p>This option was new in Netbpm 10.27 (March 2005). Before that, +<b>pnmtops</b> always used the custom <b>readstring</b>. + +<P>The custom code can't do flate or ascii85 encoding, so you must use +<b>-psfilter</b> if you want those (see <b>-flate</b>, <b>-ascii85</b>). + +<dt><b>-level</b> + +<dd>This option determines the level (version number) of Postscript that +<b>pnmtops</b> uses. By default, <b>pnmtops</b> uses Level 2. Some +features of <b>pnmtops</b> are available only in higher Postscript levels, +so if you specify too low a level for your image and your options, +<b>pnmtops</b> fails. For example, <b>pnmtops</b> cannot do a color image +in Level 1. + +<P>This option was new in Netpbm 10.27 (March 2005). Before that, +<b>pnmtops</b> always used Level 2. + +<dt><b>-dict</b> + +<dd>This causes the Postscript program create a separated dictionary +for its local variables and remove it from the stack as it exits. + +<p>This option was new in Netbpm 10.27 (March 2005). + +<dt><b>-vmreclaim</b> + +<dd>This option causes the Postscript program to force a memory garbage +collection as it exits. + +<p>This option was new in Netbpm 10.27 (March 2005). + +<DT><B>-nocenter</B> +<DD> + By default, <B>pnmtops</B> centers the image on the output page. + You can cause <B>pnmtops</B> to instead put the image against the + lower left corner of the page with the <B>-nocenter </B> + option. This is useful for programs which can include + PostScript files, but can't cope with pictures which are not + positioned in the lower left corner. + <P> + For backward compatibility, <B>pnmtops</B> accepts the option + <B>-center</B>, but it has no effect. + +<DT><B>-setpage</B> + This causes <b>pnmtops</b> to include a "setpagedevice" + directive in the output. This causes the output to violate specifications + of EPSF encapsulated Postscript, but if you're not using it in an + encapsulated way, may be what you need. The directive tells the + printer/plotter what size paper to use (or cut). The dimensions it + specifies on this directive are those selected by the + <b>-width</b> and <b>-height</b> options or defaulted. + + <p>From January through May 2002, the default was to include + "setpagedevice" and this option did not exist. Before + January 2002, there was no way to include "setpagedevice" + and neither the <b>-setpage</b> nor <b>-nosetpage</b> option existed. + +<DT><B>-nosetpage</B> +<DD> + This tells <b>pnmtops</b> not to include a "setpagedevice" + directive in the output. This is the default, so the option has no + effect. + + <p>See the <b>-setpage</b> option for the history of this option. + +<DT><B>-noshowpage</B> +<DD> + This tells <b>pnmtops</b> not to include a "showpage" + directive in the output. By default, <b>pnmtops</b> includes a + "showpage" at the end of the EPSF program According to + EPSF specs, this is OK, and the program that includes the EPSF is + supposed to redefine showpage so this doesn't cause undesirable + behavior. But it's often easier just not to have the showpage. + + <p>This options was new in Netpbm 10.27 (March 2005). Earlier + versions of <b>pnmtops</b> always include the showpage. + +<dt><b>-showpage</b> +<dd> + This tells <b>pnmtops</b> to include a "showpage" directive + at the end of the EPSF output. This is the default, so the option has + no effect. + + <p>This option was new in Netpbm 10.27 (March 2005). + + +</DL> + +<H2 id="limitations">LIMITATIONS</H2> + +<p>If the PNM image has a maxval greater than 255, <b>pnmtops</b> will +probably produce incorrect output unless you use the <b>-psfilter</b> +option or use the <b>-level</b> option to demand Postscript Level 1. + +<H2 id="seealso">SEE ALSO</H2> + +<p>Postscript is described in the <a +href="http://www.adobe.com/products/postscript/pdfs/PLRM.pdf">Postscript +Language Reference Manual</a>. + +<p><a href="http://bmeps.sourceforge.net"><b>bmeps</b></a> converts +from Netpbm and other formats to Encapsulated Postscript. It is suitable +for hooking up to <b>dvips</b> so you can include an image in a Latex +document just with an \includegraphics directive. + +<b>bmeps</b> has a few functions <b>pnmtops</b> does not, such as the ability +to include a transparency mask in the Postscript program (but not from PAM +input -- only from PNG input). + +<p> +<B><A HREF="pnm.html">pnm</A></B>, +<B>gs</b>, +<B><A HREF="psidtopgm.html">psidtopgm</A></B>, +<B><A HREF="pstopnm.html">pstopnm</A></B>, +<B><A HREF="pbmtolps.html">pbmtolps</A></B>, +<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>, +<B><A HREF="pbmtopsg3.html">pbmtopsg3</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, + +<H2 id="author">AUTHOR</H2> + +<p>Copyright (C) 1989, 1991 by Jef Poskanzer. + +<p>Modified November 1993 by Wolfgang Stuerzlinger, <A +HREF="mailto:wrzl@gup.uni-linz.ac.at">wrzl@gup.uni-linz.ac.at</A> + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#limitations">LIMITATIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtorast.html b/pnmtorast.html new file mode 100644 index 00000000..a17f234a --- /dev/null +++ b/pnmtorast.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtorast User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtorast</H1> +Updated: 12 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +pnmtorast - convert a PPM into a Sun rasterfile + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtorast</B> +[<B>-standard</B>|<B>-rle</B>] +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtorast</b>reads a portable pixmap as input and produces a Sun +rasterfile as output. + +<P>Color values in Sun rasterfiles are eight bits wide, so +<B>pnmtorast</B> will automatically scale colors to have a maxval of +255. An extra <B>pamdepth</B> step is not necessary. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The <B>-standard</B> option forces the result to be in RT_STANDARD +form; the <B>-rle</B> option, RT_BYTE_ENCODED, which is smaller but, +well, less standard. The default is <B>-rle</B>. + +<P>All options can be abbreviated to their shortest unique prefix. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<p><A HREF="rasttopnm.html">rasttopnm</A>, +<A HREF="pnm.html">pnm</A> +<A NAME="lbAG"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtorle.html b/pnmtorle.html new file mode 100644 index 00000000..70751107 --- /dev/null +++ b/pnmtorle.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtorle User Manual</TITLE></HEAD> +<BODY> +<H1>PNMTORLE</H1> +Updated: March 31, 1994 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtorle - convert a Netpbm image file into an RLE image file. +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtorle</B> + +[<B>-h</B>] +[<B>-v</B>] +[<B>-a</B>] +[<B>-o</B> <I>outfile</I>] +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This program converts Netpbm image files into Utah RLE image files. +You can include an alpha mask. If the input is a multiple image file, +the output consists of several concatenated RLE images. + +<P>The RLE file will contain either a three channel color image (24 +bits) or a single channel grayscale image (8 bits) depending upon the +pnm file depth. If a converted ppm is displayed on an 8 bit display, +the image must be dithered. In order to produce a better looking +image (on 8 bit displays), it is recommended that the image be +quantizing (to 8 bit mapped color) prior to its display. This may be +done by piping the output of this program into the Utah <b>mcut</b> or +<b>rlequant</b> utilities. We show an example of this later. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-v</B> + +<DD> +This option will cause <b>pnmtorle</b> to operate in verbose mode. The header +information is written to "stderr". Actually, there is not much header +information stored in a Netpbm file, so this information is minimal. +<DT><B>-h</B> + +<DD> +This option allows the header of the Netpbm image to be dumped to "stderr" +without converting the file. It is equivalent to using the -v option except +that no file conversion takes place. +<DT><B>-a</B> + +<DD> +This option causes <b>pnmtorle</b> to include an alpha channel in the output +image. The alpha channel is based on the image: Wherever a pixel +is black, the corresponding alpha value is transparent. Everywhere +else, the alpha value is fully opaque. + +<DT><B>-o</B> <I>outfile</I> + +<DD>If you specify this option, <b>pnmtorle</b> writes the output to +this file. If <I>outfile</I> is <b>-</b> or you don't specify +<b>-o</b>, <b>pnmtorle</b> writes the output to Standard Output. + +<DT><I>pnmfile</I> + +<DD> +The name of the Netpbm image data file to be converted. If not specified, +standard input is assumed. +</DL> + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<pre> + pnmtorle -v file.ppm -o file.rle +</pre> + +<p>While running in verbose mode, convert file.ppm to RLE format and store +resulting data in file.rle. + +<pre> + pnmtorle -h file.pgm +</pre> + +<p>Dump the header information of the Netpbm file called file.pgm. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="rletopnm.html">rletopnm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<pre> +Wes Barris, +Army High Performance Computing Research Center (AHPCRC) +Minnesota Supercomputer Center, Inc. +</pre> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtosgi.html b/pnmtosgi.html new file mode 100644 index 00000000..468c59b1 --- /dev/null +++ b/pnmtosgi.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtosgi User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtosgi</H1> +Updated: 29 January 1994 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtosgi - convert a PNM image to a SGI image file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtosgi</B> + +[<B>-verbatim</B>|<B>-rle</B>] + +[<B>-imagename</B> <I>Name</I>] + +[<B>pnmfile</B>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>pnmtosgi</b> reads a PNM image as input and produces an SGI +image file as output. The SGI image will be 2-dimensional (1 channel) +for PBM and PGM input, and 3-dimensional (3 channels) for PPM. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-verbatim</B> + +<DD> +Write an uncompressed file. +<DT><B>-rle</B> (default) + +<DD> +Write a compressed (run length encoded) file. +<DT><B>-imagename</b> <i>name</i> + +<DD> +Write the string "name" into the imagename field of the header. +The name string is limited to 79 characters. +If no name is given, pnmtosgi writes "no name" into this field. +</DL> + +<A NAME="lbAG"> </A> +<H2>REFERENCES</H2> + +SGI Image File Format documentation (draft v0.95) by Paul Haeberli (<A +HREF="mailto:paul@sgi.com">paul@sgi.com</A>). Available via ftp at +sgi.com:graphics/SGIIMAGESPEC. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A>, +<A HREF="sgitopnm.html">sgitopnm</A> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1994 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">REFERENCES</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtosir.html b/pnmtosir.html new file mode 100644 index 00000000..b16d96f6 --- /dev/null +++ b/pnmtosir.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtosir User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtosir</H1> +Updated: 20 March 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtosir - convert a PNM image into a Solitaire format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtosir</B> + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtosir</b> reads a PNM image as input and produces a Solitaire +Image Recorder format image. + +<P><b>pnmtosir</b> produces an MGI TYPE 17 file for PBM and PGM files. For +PPM, it writes a MGI TYPE 11 file. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="sirtopnm.html">sirtopnm</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Marvin Landis. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtotiff.html b/pnmtotiff.html new file mode 100644 index 00000000..c0a65b17 --- /dev/null +++ b/pnmtotiff.html @@ -0,0 +1,19 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<title>pnmtotiff</title> +</head><body> +<h1>pnmtotiff</h1> +Updated: September 2005 +<br> +<h2>NAME</h2> +<B>pnmtotiff</B> - replaced by pamtotiff +<h2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +In Netpbm 10.30 (October 2005), <b>pnmtotiff</b> was extended and renamed to +<b><a href="pamtotiff.html">pamtotiff</a></b>. + +<p><b>pamtotiff</b> is backward compatible with <b>pnmtotiff</b>. + +</body> +</html> diff --git a/pnmtotiffcmyk.html b/pnmtotiffcmyk.html new file mode 100644 index 00000000..1a7e36c3 --- /dev/null +++ b/pnmtotiffcmyk.html @@ -0,0 +1,224 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtotiffcmyk User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtotiffcmyk</H1> +Updated: 07 February 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtotiffcmyk - convert a Netpbm image into a CMYK encoded TIFF file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtotiffcmyk </B> + +[<i>Compargs</i>][<i>Tiffargs</i>][<i>Convargs</i>][<I>pnmfile</I>] + +<p><i>Compargs</i>: +<p> +[<B>-none</B>|<B>-packbits</B>|<B>-lzw</B> + +[<B>-predictor</B> <I>n</I>]] + +<p><i>Tiffargs</i>: +<p> +[<B>-msb2lsb</B>|<B>-lsb2msb</B>] + +[<B>-rowsperstrip</B> <I>n</I>] + +<BR> + +[<B>-lowdotrange</B> <I>n</I>] + +[<B>-highdotrange</B> <I>n</I>] + +<BR> + +[<B>-knormal</B>|<B>-konly</B>|<B>-kremove</B>] + +<p><i>Convargs</i>: +<p> +[[<B>-default</B>][<B>Defargs</B>]|<B>-negative</B>] + +<p><i>Defargs</i>: +<p> +[<B>-theta</B> <I>deg</I>] + +[<B>-gamma</B> <I>n</I>] + +[<B>-gammap</B> <I>-1</I> | <B>-gammap</B> <I>n</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtotiffcmyk</b>reads a PNM image as input and produces a CMYK +encoded TIFF file as output. It optionally modifies the color +balance and black level, and modifies removal of CMY from under K. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p>The order of most options is not important, but options for particular +conversion algorithms must appear after the algorithm is selected +(<B>-default</B>,<B>-negative</B>). If you don't select an algorithm, +<b>pnmtotiffcmyk</b> assumes <B>-default</B> and the appropriate +options (<B>-theta</B>,<B>-gamma</B>,<B>-gammap</B>) can appear +anywhere. + +<h3><B>-none</B>,<B>-packbits</B>,<B>-lzw</B>,<B>-predictor</B></h3> + +<p>Tiff files can be compressed. By default, <b>pnmtotiffcmyk</b> +uses LZW decompression, but (apparently) some readers cannot read +this, so you may want to select a different algorithm +(<B>-none</B>,<B>-packbits</B>). For LZW compression, a +<B>-predictor</B> value of 2 forces horizontal differencing of +scanlines before encoding; a value of 1 forces no differencing. + +<h3><B>-msb2lsb</B>,<B>-lsb2msb</B></h3> + +<p>These options control fill order (default is <B>-msb2lsb</B>). + +<h3><B>-rowsperstrip</B></h3> + +<p>This sets the number of rows in an image strip (data in the Tiff +files generated by this program is stored in strips - each strip is +compressed individually). The default gives a strip size of no more +than 8 kb. + +<h3><B>-lowdotrange</B>,<B>-highdotrange</B></h3> + +<p>These options set tag values that may be useful for printers. + +<h3><B>-knormal</B>,<B>-kremove</B>,<B>-konly</B></h3> + +<p>These options control the calculation of the CMYK ink levels. +They are useful only for testing and debugging the code. + +<P><B>-kremove</B> sets the black (K) levels to zero while leaving the +other ink levels as they would be if the black level were normal. + +<p><B>-konly</B> sets all inks to the normal black value. + +<h3><B>-default</B>,<B>-negative</B></h3> + +<p>These options control what ink levels <b>pnmtotiffcmyk</b> uses to +represent each input color. + +<p><B>-negative</B> selects a simple algorithm that generates a color +negative. None of the following options apply to this algorithm. The +algorithm is included as an example in the source code to help +implementors of other conversions. + +<p><B>-default</B> is not necessary, unless you have to countermand a +<B>-negative</B> on the same command line. + +<p>The default conversion from RGB to CMYK is as follows: The basic +values of the 3 pigments are C = 1-R, M = 1-G, Y = 1-B. From this, +<b>pnmtotiffcmyk</b> chooses a black (K) level which is the minimum of +those three. It then replaces that much of the 3 pigments with the +black. I.e. it substracts K from each of the basic C, M, and Y +values. + +<p>The options below modify this conversion. + +<h3><B>-theta</B> <I>deg</I></h3> + +<p><B>-theta</B> provides a simple correction for any color bias that +may occur in the printed image because, in practice, inks do not +exactly complement the primary colors. It rotates the colors (before +black replacement) by <I>deg</I> degrees in the color wheel. Unless +you are trying to produce unusual effects you will need to use small +values. Try generating three images at -10, 0 (the default) and 10 +degrees and see which has the best color balance. + +<h3><B>-gamma</B> <I>n</I></h3> + +<p><B>-gamma</B> applies a gamma correction to the black (K) value +described above. Specifically, instead of calculating the K value as +min(C,M,Y), <b>pnmtotiffcmyk</b> raises that value (normalised to the +range 0 to 1) to the <I>n</I>th power. In practice, this means that a +value greater than 1 makes the image lighter and a value less than 1 +makes the image darker. The range of allowed values is 0.1 to 10. + +<h3><B>-gammap</B> <I>n</I></h3> + +<p>This option controls the black replacement. + +<p>If you specify <B>-gammap</B>, <b>pnmtotiffcmyk</b> uses the specified +gamma value in computing how much ink to remove from the 3 pigments, but +still uses the regular gamma value (<b>-gamma</b> option) to generate the +actual amount of black ink with which to replace it. + +<p>Values of <i>n</i> from 0.01 to 10 are valid. + +<p>For example, it may be best to only subtract black from the +colored inks in the very darkest regions. In that case, <I>n</I> +should be a large value, such as 5. + +<p>As a special case, if <I>n</I> is -1, <b>pnmtotiffcmyk</b> does not +remove any pigment (but still adds the black ink). This means dark +areas are even darker. Furthermore, when printed, dark areas contain +a lot of ink which can make high contrast areas, like lettering, +appear fuzzy. It's hard to see what the utility of this is. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtotiff.html">pnmtotiff</A>, +<A HREF="tifftopnm.html">tifftopnm</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (c) 1999 Andrew Cooke (Jara Software). Released under the +GPL with no warranty. See source or COPYRIGHT and LICENCE files in +distribution for full details. + +Much of the code uses ideas from other Netpbm programs, written by Jef +Poskanzer (thanks go to him and libtiff maintainer Sam Leffler). A +small section of the code - some of the tiff tag settings - is derived +directly from pnmtotiff, by Jef Poskanzer, which, in turn, +acknowledges Patrick Naughton with the following text: + +<blockquote> +<p>Derived by Jef Poskanzer from ras2tif.c, which is: + +<p>Copyright (c) 1990 by Sun Microsystems, Inc. + +<p>Author: Patrick J. Naughton +<A HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A> + +<p>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation. + +<p>This file is provided AS IS with no warranties of any kind. The +author shall have no liability with respect to the infringement of +copyrights, trade secrets or any patents by this file or any part +thereof. In no event will the author be liable for any lost revenue +or profits or other special, indirect and consequential damages. + +</blockquote> + +<HR> +<A NAME="index"> </A><H2>Index</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pnmtoxwd.html b/pnmtoxwd.html new file mode 100644 index 00000000..a8def604 --- /dev/null +++ b/pnmtoxwd.html @@ -0,0 +1,68 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pnmtoxwd User Manual</TITLE></HEAD> +<BODY> +<H1>pnmtoxwd</H1> +Updated: 24 September 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pnmtoxwd - convert a PNM into an X11 window dump + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pnmtoxwd</B> + +[<B>-pseudodepth</B> <I>n</I>] + +[<B>-directcolor</B>] + +[<I>pnmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pnmtoxwd</b> reads a PNM image as input and produces an X11 +window dump as output. You can display this output with <b>xwud</b>. + +<P>Normally, pnmtoxwd produces a StaticGray dump file for PBM and PGM +files. For PPM, it writes a PseudoColor dump file if there are up to +256 colors in the input, and a DirectColor dump file otherwise. You +can use the <B>-directcolor</B> option to force a DirectColor dump. +And you can use <B>-pseudodepth</B> to change the depth of PseudoColor +dumps from the default of 8 bits / 256 colors. + +<p>In an X11 window dump file, various integers can be represented in +either big endian (most significant byte first) or little endian code. +Those generated by <b>pnmtoxwd</b> are always big endian. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="xwdtopnm.html">xwdtopnm</A>, +<A HREF="pnm.html">pnm</A>, +<b>xwud</b> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppm.html b/ppm.html new file mode 100644 index 00000000..2c90804b --- /dev/null +++ b/ppm.html @@ -0,0 +1,187 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>PPM Format Specification</TITLE> +<META NAME="manual_section" CONTENT="5"> +</HEAD> +<BODY> +<H1>ppm</H1> +Updated: 03 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +PPM - Netpbm color image format + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>The PPM format is a lowest common denominator color image file +format. + +<P>It should be noted that this format is egregiously inefficient. +It is highly redundant, while containing a lot of information that the +human eye can't even discern. Furthermore, the format allows very +little information about the image besides basic color, which means +you may have to couple a file in this format with other independent +information to get any decent use out of it. However, it is very easy +to write and analyze programs to process this format, and that is the +point. + +<P>It should also be noted that files often conform to this format in +every respect except the precise semantics of the sample values. +These files are useful because of the way PPM is used as an +intermediary format. They are informally called PPM files, but to be +absolutely precise, you should indicate the variation from true PPM. +For example, "PPM using the red, green, and blue colors that the +scanner in question uses." + +<P>The name "PPM" is an acronym derived from "Portable Pixel Map." +Images in this format (or a precursor of it) were once also called +"portable pixmaps." + +<P>The format definition is as follows. You can use the <a +href="libnetpbm.html">libnetpbm</a> C subroutine library to read and +interpret the format conveniently and accurately. + +<P>A PPM file consists of a sequence of one or more PPM images. There are +no data, delimiters, or padding before, after, or between images. + +<P>Each PPM image consists of the following: + +<OL> +<LI>A "magic number" for identifying the file type. +A ppm image's magic number is the two characters "P6". +<LI> +Whitespace (blanks, TABs, CRs, LFs). +<LI> +A width, formatted as ASCII characters in decimal. +<LI> +Whitespace. +<LI> +A height, again in ASCII decimal. +<LI> +Whitespace. +<LI> +The maximum color value (Maxval), again in ASCII decimal. Must be less +than 65536 and more than zero. +<LI> +Newline or other single whitespace character. + +<LI>A raster of Height rows, in order from top to bottom. Each row +consists of Width pixels, in order from left to right. Each pixel is +a triplet of red, green, and blue samples, in that order. Each sample +is represented in pure binary by either 1 or 2 bytes. If the Maxval +is less than 256, it is 1 byte. Otherwise, it is 2 bytes. The most +significant byte is first. + +<P>A row of an image is horizontal. A column is vertical. The pixels +in the image are square and contiguous. + +<LI>In the raster, the sample values are "nonlinear." They are +proportional to the intensity of the ITU-R Recommendation BT.709 red, +green, and blue in the pixel, adjusted by the BT.709 gamma transfer +function. (That transfer function specifies a gamma number of 2.2 and +has a linear section for small intensities). A value of Maxval for +all three samples represents CIE D65 white and the most intense color +in the color universe of which the image is part (the color universe +is all the colors in all images to which this image might be +compared). + +<p>ITU-R Recommendation BT.709 is a renaming of the former CCIR +Recommendation 709. When CCIR was absorbed into its parent +organization, the ITU, ca. 2000, the standard was renamed. This +document once referred to the standard as CIE Rec. 709, but it isn't +clear now that CIE ever sponsored such a standard. + +<P>Note that another popular color space is the newer sRGB. A common +variation on PPM is to subsitute this color space for the one specified. + +<LI> +Note that a common variation on the PPM format is to have the sample +values be "linear," i.e. as specified above except without +the gamma adjustment. <B>pnmgamma</B> takes such a PPM variant as +input and produces a true PPM as output. + +<LI>Characters from a "#" to the next end-of-line, before +the maxval line, are comments and are ignored. + +</OL> + +<P>Note that you can use <B>pamdepth</B> to convert between a the +format with 1 byte per sample and the one with 2 bytes per sample. + +<P>There is actually another version of the PPM format that is fairly +rare: "plain" PPM format. The format above, which generally +considered the normal one, is known as the "raw" PPM format. +See <B><A HREF="pbm.html">pbm</A></B> for some commentary on how plain +and raw formats relate to one another and how to use them. + +<P>The difference in the plain format is: + +<DL COMPACT> +<DT>-<DD> +There is exactly one image in a file. +<DT>-<DD> +The magic number is P3 instead of P6. +<DT>-<DD> +Each sample in the raster is represented as an ASCII decimal number +(of arbitrary size). +<DT>-<DD> +Each sample in the raster has white space before and after it. There must +be at least one character of white space between any two samples, but there +is no maximum. There is no particular separation of one pixel from another -- +just the required separation between the blue sample of one pixel from the +red sample of the next pixel. +<DT>-<DD> +No line should be longer than 70 characters. +</DL> +<P> + +Here is an example of a small pixmap in this format. +<PRE> +P3 +# feep.ppm +4 4 +15 + 0 0 0 0 0 0 0 0 0 15 0 15 + 0 0 0 0 15 7 0 0 0 0 0 0 + 0 0 0 0 0 0 0 15 7 0 0 0 +15 0 15 0 0 0 0 0 0 0 0 0 +</PRE> + +<P>There is a newline character at the end of each of these lines. + +<P>Programs that read this format should be as lenient as possible, +accepting anything that looks remotely like a pixmap. + +<H2 id="compatibility">COMPATIBILITY</H2> + +<P>Before April 2000, a raw format PPM file could not have a maxval greater +than 255. Hence, it could not have more than one byte per sample. Old +programs may depend on this. + +<P>Before July 2000, there could be at most one image in a PPM file. As +a result, most tools to process PPM files ignore (and don't read) any +data after the first image. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A>, +<A HREF="pgm.html">pgm</A>, +<A HREF="pbm.html">pbm</A>, +<A HREF="pam.html">pam</A>, +<A HREF="directory.html">programs that process PPM</A> + + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#compatibility">COMPATIBILITY</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/ppm3d.html b/ppm3d.html new file mode 100644 index 00000000..de602fc3 --- /dev/null +++ b/ppm3d.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppm3d User Manual</TITLE></HEAD> +<BODY> +<H1>ppm3d</H1> +Updated: 24 April 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppm3d - convert two PPM images into a red/blue 3d glasses PPM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppm3d</B> +<I>leftppmfile</I> +<I>rightppmfile</I> +[<I>horizontal_offset</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppm3d</b> reads two PPM images as input and produces a PPM as +output, with the images overlapping by <I>horizontal_offset</I> pixels +in blue/red format. The idea is that if you look at the image with +3-D glasses (glasses that admit only red through one eye and only green +through the other), you see an image with depth. This is called a +stereogram. + +<P><I>horizontal_offset</I> defaults to 30 pixels. The input PPMs +must be the same dimensions. + +<p>To make a different kind of stereogram, use <b>pamstereogram</b>. +That makes a steregram that you view without special glasses, just by +letting your eyes unfocus so that each eye sees different parts of the +image. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pamstereogram.html">pamstereogram</A> +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by David K. Drum. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmbrighten.html b/ppmbrighten.html new file mode 100644 index 00000000..542cce0f --- /dev/null +++ b/ppmbrighten.html @@ -0,0 +1,166 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmbrighten User Manual</TITLE></HEAD> +<BODY> +<H1>ppmbrighten</H1> +Updated: 09 January 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmbrighten - change a PPM image's Saturation and Value + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>ppmbrighten</b> +[<b>-normalize</b>] +[<b>-saturation </b>[<b>+</b>|<b>-</b><i>saturation_percent</i>]] +[<b>-value </b>[<b>+</b>|<b>-</b><i>value_percent</i>]] +<i>ppmfile</i> + +<?makeman .SH OPTION USAGE ?> +<P>All options can be abbreviated to their shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmbrighten</b> increases or decreases the Saturation and Value +(from the HSV color space) of each pixel of a PPM image. You specify +the per centage change for each of those parameters. + +<p>You can also remap the colors of the pixels so their Values cover +the full range of possible Values. + +<p>Hue-Saturation-Value, or HSV, is one way to represent a color, like +the more well-known RGB. Hue, Saturation, and Value are numbers in +the range from 0 to 1. We always capitalize them in this document +when we mean the number from the HSV color space, especially since +"value" as a conventional English word has a much more abstract +meaning. + +<p>Value is a measure of how much total light intensity is in the +color, relative to some specified maximum (the PPM format is also +defined in terms of a specified maximum intensity -- For the purposes +of this program, they are the same). In particular, it is the +intensity of the most intense primary color component of the color +divided by the maximum intensity possible for a component. Zero Value +means black. White has full Value. + +<p>Hue is an indication of the secondary color with the same intensity +that most closely approximates the color. A secondary color is made +of a combination of at most two of the primary colors. + +<p>Saturation is a measure of how close the color is to the color +indicated by the Hue and Value. A lower number means more light of +the third primary color must be added to get the exact color. Full +Saturation means the color is a secondary color. Zero Saturation +means the color is gray (or black or white). Decreasing the +saturation of a color tends to make it washed out. + +<p>If it is impossible to increase the Value of a pixel by the amount you +specify (e.g. the Value is .5 and you specify +200%), <b>ppmbrighten</b> +increases it to full Value instead. + +<p>If it is impossible to increase the Saturation of a pixel by the amount +you specify (e.g. it is already half saturated and you specify +200%), +<b>ppmbrighten</b> increases it to full Saturation instead. + +<p>For a simpler kind of brightening, you can use <b>pamfunc +-multiplier</b> simply to increase the intensity of each pixel by a +specified per centage, clipping each RGB component where the +calculated intensity would exceed full intensity. Thus, the brightest +colors in the image would change chromaticity in addition to not +getting the specified intensity boost. For <em>decreasing</em> +brightness, <b>pamfunc</b> should do the same thing as +<b>ppmbrighten</b>. + +<p><b>ppmflash</b> does another kind of brightening. It changes the +color of each pixel to bring it a specified per centage closer to white. +This increases the value and saturation. + +<A NAME="examples"></a> +<H2>EXAMPLES</H2> +<p>To double the Value of each pixel: +<pre> +ppmbrighten -v 100 +</pre> + +<p>To double the Saturation and halve the value of each pixel: +<pre> +ppmbrighten -s 100 -v -50 +</pre> + +<A NAME="options"></a> +<H2>OPTIONS</H2> + +<DL> +<DT><b>-value </b><i>value_percent</i> + +<DD>This option specifies the amount, as a per centage, by which you want +to change the Value of each pixel. It may be negative. + +<DT><b>-saturation </b><i>value_percent</i> + +<DD>This option specifies the amount, as a per centage, by which you want +to change the Saturation of each pixel. It may be negative. + + +<DT><b>-normalize</b> + +<DD>This option causes <b>ppmbrighten</b> to linearly remap the Values +of the pixels to cover the range 0 to 1. The option name is wrong -- +this operation is not normalization (it was named in error and the +name has been kept for backward compatibility). + +<p><b>ppmbrighten</b> applies the brightening that you specify with +the <b>-value</b> option <em>after</em> the remapping. + +<p>Before Netpbm 10.14 (March 2003), your input must be from a seekable +file (not a pipe) to use <b>-normalize</b>. If it isn't, the program fails +with a bogus error message. + +</DL> + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmnorm.html">pgmnorm</A>, +<A HREF="ppmdim.html">ppmdim</A>, +<A HREF="pamfunc.html">pamfunc</A>, +<A HREF="ppmflash.html">ppmflash</A>, +<A HREF="pamdepth.html">pamdepth</A>, +<A HREF="pnmgamma.html">pnmgamma</A>, +<A HREF="ppmhist.html">ppmhist</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1990 by Brian Moffet. +Copyright (C) 1989 by Jef Poskanzer. + +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmchange.html b/ppmchange.html new file mode 100644 index 00000000..2414e8d9 --- /dev/null +++ b/ppmchange.html @@ -0,0 +1,172 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmchange User Manual</TITLE></HEAD> +<BODY> +<H1>ppmchange</H1> +Updated: September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmchange - change all pixels of one color to another in a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmchange</B> + +[<B>-closeness=</B><I>closeness_percent</I>] +[<B>-remainder=</B><I>remainder_color</I>] +[<B>-closeok</b>] +[<I>oldcolor newcolor</I>] ... +[<I>ppmfile</I>] + +<A NAME="example"></a> +<H2>EXAMPLES</H2> + +<PRE> +<b>ppmchange red blue redimage.ppm >blueimage.ppm</b> + +<b>ppmchange red red -remainder=black myimage.ppm >redblack.ppm</b> + +<b>ppmchange -closeness=90 white white black black</b> + +</PRE> + +<A NAME="description"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmchange</b> reads a PPM image as input and changes all pixels of +colr <I>oldcolor</I> to color <I>newcolor</I>. + +You may specify up to 256 oldcolor/newcolor pairs on the command line. +<B>ppmchange</B> leaves all colors not mentioned unchanged, unless you +specify the <B>-remainder</B> option, in which case they are all +changed to the single specified color. + +<P>You can specify that colors similar, but not identical, to the ones +you specify get replaced by specifying a "closeness" factor. + +<P>Specify the colors as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<P>If a pixel matches two different <I>oldcolor</I>s, <B>ppmchange</B> +replaces it with the <I>newcolor</I> of the leftmost specified one. + +<p>The maxval of the output image is the same as that of the input +image. If a <i>newcolor</i> you specify cannot be exactly represented +in that maxval, <b>ppmchange</b> assumes a color that is as close as +possible to what you specified but can be represented with your +maxval. Unless you specify the <b>-closeok</b> option, +<b>ppmchange</b> issues a warning that it is using an approximation. + +<p>A common way that you can have this maxval problem, where the color +you specify cannot be represented with your maxval, is that your input +is a PBM (black and white) image that you are colorizing. The maxval +in this case is 1, which severely limits the colors to which you can +change. To avoid this problem, use <b>pamdepth</b> to make the maxval +of your input something consistent with your colors. 255 is usually a +good choice. + +<p>Before Netpbm 10.22 (April 2004), <b>ppmchange</b> always behaved as +if the user specified <b>-closeok</b> and there was no <b>-closeok</b> +option. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-closeness </B><I>closeness_percent</I> + +<DD><I>closeness</I> is an integer per centage indicating how close +to the color you specified a pixel must be to get replaced. By +default, it is 0, which means the pixel must be the exact color you +specified. + +<P>A pixel gets replaced if the distance in color between it and the +color you specified is less than or equal to <I>closeness</I> per cent +of the maxval. + +<P>The "distance" in color is defined as the cartesian sum of the +individual differences in red, green, and blue intensities between the +two pixels, normalized so that the difference between black and white +is 100%. + +<P>This is probably simpler than what you want most the time. You +probably would like to change colors that have similar chrominance, +regardless of their intensity. So if there's a red barn that is +variously shadowed, you want the entire barn changed. But because the +shadowing significantly changes the color according to +<B>ppmchange</B>'s distance formula, parts of the barn are probably +about as distant in color from other parts of the barn as they are +from green grass next to the barn. + +<P>Maybe <B>ppmchange</B> will be enhanced some day to do chrominance +analysis. + +<dt><b>-closeok</b> + +<dd>This option affects how <b>ppmchange</b> interprets a color you +specify in the arguments. When you specify this option, <b>ppmchange</b> +may use a color close to, but not the same as what you specify. See +<a href="#description">the description section</a> for details. + +<p>This option was new in Netpbm 10.22 (April 2004). Before that, +<b>ppmchange</b> always behaved as if you specified this option. + +<DT><B>-remainder </B><I>color</I> + +<DD><B>ppmchange</B> changes all pixels which are not of a color for +which you specify an explicit replacement color on the command line to +color <I>color</I>. + +<P>An example application of this is + +<pre> +<B>ppmchange -remainder=black red red</B> +</pre> + +to lift only the red portions from an image, or +<pre> +<B>ppmchange -remainder=black red white | ppmtopgm</B> +</pre> + +to create a mask file for the red portions of the image. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>, + +<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Wilson H. Bent. Jr. (<A HREF="mailto:whb@usc.edu">whb@usc.edu</A>) +with modifications by Alberto Accomazzi (<A +HREF="mailto:alberto@cfa.harvard.edu">alberto@cfa.harvard.edu</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmcie.html b/ppmcie.html new file mode 100644 index 00000000..326a793a --- /dev/null +++ b/ppmcie.html @@ -0,0 +1,395 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmcie User Manual</TITLE></HEAD> +<BODY> +<H1>PPMCIE</H1> +Updated: July 31, 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmcie - draw a CIE color chart as a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + + + +<B>ppmcie</B> + +[ +<B>-rec709</B>|<B>-cie</B>|<B>-ebu</B>|<B>-hdtv</B>|<B>-ntsc</B>|<B>-smpte</B> +] +[<B>-xy</B>|<B>-upvp</B>] + +[<B>-red</B> <I>rx</I> <I>ry</I>] + +[<B>-green</B> <I>gx</I> <I>gy</I>] + +[<B>-blue</B> <I>bx</I> <I>by</I>] + +[<B>-white</B> <I>wx</I> <I>wy</I>] + +[<B>-size</B> <I>edge</I>] + +[{<B>-xsize</B>|<B>-width</B>} <I>width</I>] + +[{<B>-ysize</B>|<B>-height</B>} <I>height</I>] + +[<B>-noblack</B>] +[<B>-nowpoint</B>] +[<B>-nolabel</B>] +[<B>-noaxes</B>] +[<B>-full</B>] + +<p>You may abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>ppmcie</B> creates a PPM file containing a plot of the CIE +"tongue" color chart -- to the extent possible in a PPM +image. Alternatively, creates a pseudo-PPM image of the color tongue +using RGB values from a color system of your choice. + +<P> +The CIE color tongue is an image of all the hues that can be described +by CIE X-Y chromaticity coordinates. They are arranged on a two +dimensional coordinate plane with the X chromaticity on the horizontal +axis and the Y chromaticity on the vertical scale. (You can choose +alternatively to use CIE u'-v' chromaticity coordinates, but the +general idea of the color tongue is the same). + +<P> +Note that the PPM format specifies that the RGB values in the file are +from the ITU-R Recommendation BT.709 color system, gamma-corrected. +And positive. See <B><A HREF="ppm.html">ppm</A></B> for details. If +you use one of the color system options on <B>ppmcie</B>, what you get +is not a true PPM image, but is very similar. If you display such +<B>ppmcie</B> output using a device that expects PPM input (which +includes just about any computer graphics display program), it will +display the wrong colors. + +<P> +However, you may have a device that expects one of these variations on +PPM. + +<P> +In every RGB color system you can specify, including the default +(which produces a true PPM image) there are hues in the color tongue +that can't be represented. For example, monochromatic blue-green with +a wavelength of 500nm cannot be represented in a PPM image. + +<P> +For these hues, <B>ppmcie</B> substitutes a similar hue as follows: +They are desaturated and rendered as the shade where the edge of the +Maxwell triangle intersects a line drawn from the requested shade to +the white point defined by the color system's white point. +Furthermore, unless you specify the <B>-full</B> option, <B>ppmcie</B> +reduces their intensity by 25% compared to the true hues in the image. + +<P> +<B>ppmcie</B> draws and labels the CIE X-Y coordinate axes unless you +choose otherwise with options. + +<P> +<B>ppmcie</B> draws the Maxwell triangle for the color system in use +on the color tongue. The Maxwell triangle is the triangle whose +vertices are the primary illuminant hues for the color system. The +hues inside the triangle show the color gamut for the color system. +They are also the only ones that are correct for the CIE X-Y +chromaticity coordinates shown. (See explanation above). <b>ppmcie</b> +denotes the Maxwell triangle by rendering it at full brightness, while +rendering the rest of the color tongue as 3/4 brightness. You can turn +this off with options. + +<P> +<B>ppmcie</B> also places a black cross at the color system's white +point (with the center of the cross open so you can actually see the +white color) and displays in text the CIE X-Y chromaticities of the +primary illuminants and white point for the color system. You can +turn this off with options, though. + +<P> +<B>ppmcie</B> annotates the periphery of the color tongue with the +wavelength, in nanometers of the monochromatic hues which appear +there. + +<P> +<B>ppmcie</B> displays the black body chromaticity curve for Planckian +radiators from 1000 to 30000 kelvins on the image. This curve traces the +colors of black bodies as various temperatures. + +<P> +You can choose from several standard color systems, or specify one of +your own numerically. + +<P> +CIE charts, by their very nature, contain a very large number of +colors. If you're encoding the chart for a color mapped device or +file format, you'll need to use <B>pnmquant</B> or <B>ppmdither</B> to +reduce the number of colors in the image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-rec709</B> +<DT><B>-cie</B> +<DT><B>-ebu</B> +<DT><B>-hdtv</B> +<DT><B>-ntsc</B> +<DT><B>-smpte</B> + +<DD> +Select a standard color system whose gamut to plot. The default is +<B>-rec709</B>, which chooses ITU-R Recommendation BT.709, +gamma-corrected. This is the only color system for which +<B>ppmcie</B>'s output is a true PPM image. See explanation above. +<B>-ebu</B> chooses the primaries used in the PAL and SECAM +broadcasting standards. <B>-ntsc</B> chooses the primaries specified +by the NTSC broadcasting system (few modern monitors actually cover +this range). <B>-smpte</B> selects the primaries recommended by the +Society of Motion Picture and Television Engineers (SMPTE) in +standards RP-37 and RP-145, and <B>-hdtv</B> uses the much broader +<I>HDTV ideal</I> primaries. <B>-cie</B> chooses a color system that +has the largest possible gamut within the spectrum of the chart. This +is the same color system as you get with the <B>-cie</B> option to +John Walker's <B>cietoppm</B> program. + +<DT><B>-xy</B> + +<DD> +plot CIE 1931 x y chromaticities. This is the default. + +<DT><B>-upvp</B> + +<DD> +plot u' v' 1976 chromaticities rather than CIE 1931 x y +chromaticities. The advantage of u' v' coordinates is that equal +intervals of distance on the u' v' plane correspond roughly to the +eye's ability to discriminate colors. + +<DT><B>-red</B><I> rx ry</I> + +<DD> +specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the red +illuminant of a custom color system and selects the custom system. + +<DT><B>-green</B><I> gx gy</I> + +<DD> +specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the green +illuminant of the color system and selects the custom system. + +<DT><B>-blue</B><I> bx by</I> + +<DD> +specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the blue +illuminant of the color system and selects the custom system. + +<DT><B>-white</B><I> wx wy</I> + +<DD> +specifies the CIE <I>x</I> and <I>y</I> co-ordinates of the white +point of the color system and selects the custom system. + +<DT><B>-size</B><I> edge</I> + +<DD> +Create a pixmap of <I>edge</I> by <I>edge</I> pixels. The default is +512x512. + +<DT><B>-xsize|-width</B><I> width</I> + +<DD> +Sets the width of the generated image to <I>width</I> pixels. The +default width is 512 pixels. If the height and width of the image are +not the same, the CIE diagram will be stretched in the longer +dimension. + +<DT><B>-ysize|-height</B><I> height</I> + +<DD> +Sets the height of the generated image to <I>height</I> pixels. The +default height is 512 pixels. If the height and width of the image +are not the same, the CIE diagram will be stretched in the longer +dimension. + +<DT><B>-noblack</B> + +<DD> +Don't plot the black body chromaticity curve. + +<DT><B>-nowpoint</B> + +<DD> +Don't plot the color system's white point. + +<DT><B>-nolabel</B> + +<DD> +Omit the label. + +<DT><B>-noaxes</B> + +<DD> +Don't plot axes. + +<DT><B>-full</B> + +<DD> +Plot the entire CIE tongue in full brightness; don't dim the part +which is outside the gamut of the specified color system (i.e. outside +the Maxwell triangle). + +</DL> + +<h2 id="interpret">INTERPRETATION OF COLOR CHART</h2> + +<p>A color spectrum is a linear combination of one or more monochromatic +colors. + +<p>A color is a set of color spectra that all look the same to the +human eye (and brain). Actually, for the purposes of the definition, +we assume the eye has infinite precision, so we can call two color +spectra different colors even though they're so close a person +couldn't possibly tell them apart. + +<p>The eye contains 3 kinds of color receptors (cones). Each has a +different response to the various monochromatic colors. One kind +responds most strongly to blue, another red, another green. Because +there are only three, many different color spectra will excite the +cones at exactly the same level, so the eye cannot tell them apart. +All such spectra that excite the cones in the same way are a single +color. + +<p>Each point in the color tongue represents a unique color. But +there are an infinite number of color spectra in the set that is that +color; i.e. an infinite number of color spectra that would look to you +like this point. A machine could tell them apart, but you could not. + +<p>Remember that the colors outside the highlighted triangle are +approximations of the real colors because the PPM format cannot +represent them (and your display device probably cannot display them). +That is, unless you're using a variation of PPM and a special display +device, as discussed earlier in this manual. + +<p>A color is always relative to some given maximum brightness. A +particular beam of light looks lime green if in a dim field, but +pea green if in a bright field. An image on a movie screen may +look pitch black because the projector is not shining any light on +it, but when you turn off the projector and look at the same spot in +room light, the screen looks quite white. The same light from that spot +hit your eye with the project on as with it off. + +<p>The chart shows two dimensions of color. The third is intensity. +All the colors in the chart have the same intensity. To get all +possible colors in the gamut, Make copies of the whole chart at every +intensity between zero and the maximum. + +<p>The edge of the tongue consists of all the monochromatic colors. +A monochromatic color is one with a single wavelength. I.e. a color +that is in a rainbow. The numbers you see are the wavelengths in +nanometers. + +<p>Any straight line segment within the tongue contains colors which +are linear combinations of two colors -- the colors at either end of +the line segment. + +<p>Any color in the chart can be created from two other colors (actually, +from any of an infinite number of pairs of other colors). + +<p>All the colors within a triangle inside the tongue can be created +from a linear combination of the colors at the vertices of that triangle. + +<p>Any color in the tongue can be created from at most 3 monochromatic +colors. + +<p>The highlighted triangle shows the colors that can be expressed +in the tristimulus color system you chose. (ITU-R BT.709 by default). +The corners of the triangle are the 3 primary illuminants in that +system (a certain red, green, and blue for BT.709). The edges of +the triangle, then, represent the colors you can represent with two +of the primary illuminants (saturated colors), and the interior colors +require all three primary illuminants (are not saturated). + +<p>In the ITU-R BT.709 color system (the default), the white point is +defined as D65, which is (and is named after) the color of a black +body at 6502 kelvins. Therefore, you should see the temperature curve +on the image pass through the white part of the image, and the cross +that marks the white point, at 6502 kelvins. + +<p>D65 white is supposed to be the color of the sun. If you have a +perfect BT.709 display device, you should see the color of the sun +at the white point cross. That's an important color, because when you +look at an object in sunlight, the color that reflects of the object +is based on the color of sunlight. Note that the sun produces a +particular color spectrum, but many other color spectra are the same +color, and display devices never use the actual color spectrum of the +sun. + +<p>The colors at the corners of the triangle have the chromaticities +phosphors in a monitor that uses the selected color system. Note +that in BT.709 they are very close to monochromatic red, green, +and blue, but not quite. That's why you can't display even one true +color of the rainbow on a video monitor. + +<p>Remember that the chart shows colors of constant intensity, +therefore the corners of the triangles are not the full colors of the +primary illuminants, but only their chromaticities. In fact, the +illuminants typically have different intensities. In BT.709, the +blue primary illuminant is far more intense than the green, which is +more intense than the red. Designers did this in order to make an +equal combination of red, green, and blue generate gray. I.e. a +combination of full strength red, full strength green, and full +strength blue BT.709 primary illuminants is D65 white. + +<p>The tongue has a sharp straight edge at the bottom because that's +the limit of human vision. There are colors below that line, but they +involve infrared and ultraviolet light, so you can't see them. This +line is called the "line of purples." + + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p> +Copyright (C) 1995 by John Walker (<A +HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>) + +<p> +WWW home page: <A +HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A> + +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided as +is without express or implied warranty. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#interpretation">INTERPRETATION OF COLOR CHART</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmcolormask.html b/ppmcolormask.html new file mode 100644 index 00000000..82cf12e5 --- /dev/null +++ b/ppmcolormask.html @@ -0,0 +1,139 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmcolormask User Manual</TITLE></HEAD> + +<BODY> + +<H1>ppmcolormask</H1> +Updated: 1 May 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +ppmcolormask - produce mask of areas of a certain color in a PPM file + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmcolormask</B> + +<b>-color=</b><i>color_list</i> + +[<I>ppmfile</I>] + +<p>Obsolete: + +<p> +<B>ppmcolormask</B> + +<I>color</I> + +[<I>ppmfile</I>] + +<h2 id="examples">EXAMPLES</h2> + +<pre> +<code> + ppmcolormask -color red testimg.ppm >redmask.pbm + pamcomp background.ppm testimg.ppm -alpha=redmask.pbm >test.ppm + + ppmcolormask -color=red,pink,salmon testimg.ppm >reddishmask.pbm + + ppmcolormask -color=bk:red,bk:orange,bk:yellow testimg.ppm >firemask.pbm + +</code> +</pre> + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>ppmcolormask</b> reads a PPM file as input and produces a PBM +(bitmap) file as output. The output file is the same dimensions as +the input file and is black in all places where the input file is a +color indicated by the <b>-color</b> option, and white everywhere +else. + +<P>The output of <B>ppmcolormask</B> is useful as an alpha mask input +to <B>pamcomp</B>. Note that you can generate such an alpha mask +automatically as you convert to PNG format with <B><A +HREF="pnmtopng.html">pnmtopng</A></B>. Use its <B>-transparent</B> +option. + +<P><I>ppmfile</I> is the input file. If you don't specify +<I>ppmfile</I>, the input is from Standard Input. + +<P>The output goes to Standard Output. + +<p>In the obsolete alternative syntax, specifying the <i>color</i> +names a single exact color to be masked. + +<p><b>ppmchange</b> does a similar thing: it modifies an image by +changing colors you specify to other colors you specify. The two +programs give you somewhat different means of specifying colors in the +input image. + +<p>To make a mask of an image's background, without having to tell it +what color it is, use <b>pambackground</b>. + +<h2 id="options">OPTIONS</h2> + +<dl> +<dt><b>-color=</b><I>color_list</I> + +<dd>This mandatory option specifies the colors that are to be masked +(where the image is one of these colors, the output mask will be black). + +<p>Examples: + +<ul> +<li><b>-color=red</b> +<li><b>-color=red,pink,salmon</b> +<li><b>-color=rgb:80/80/ff</b> +<li><b>-color=bk:red,bk:orange,bk:yellow</b> +</ul> + +<p><i>color_list</i> is a list of colors separated by commas. Each +color is either an exact color name as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a> or one of the <a +href="libppm.html#berlinkay">Berlin-Kay color names</a>. In the +latter case, all colors that are better described by that Berlin-Kay +color name than any other are in the mask set. + +<p>The algorithm <b>ppmcolormask</b> uses to determine to which colors +a Berlin-Kay color name applies is based on a Sugeno-type fuzzy +inference system developed by <a +href="mailto:kenan@unix.ba">Kenan Kalajdzic</a> in 2006. The +fuzzy model consists of partially linear membership functions defined +in the HSV color space. Although more complex algorithms for fuzzy +color matching exist, this algorithm is intentionally simplified to +achieve a satisfactory speed using relatively compact code. + +<p>This option was new in Netpbm 10.34 (June 2006). Before that, +you must use the <i>color</i> argument and cannot specify a Berlin-Kay +color. + +</dl> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pambackground.html">pambackground</A></B>, +<B><A HREF="ppmchange.html">ppmchange</A></B>, +<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pbmmask.html">pbmmask</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmcolors.html b/ppmcolors.html new file mode 100644 index 00000000..c2c958b4 --- /dev/null +++ b/ppmcolors.html @@ -0,0 +1,13 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmcolors User Manual</TITLE></HEAD> + +<BODY> + +<p><b>ppmcolors</b> is obsolete. The more general program <b><a +href=pamseq.html>pamseq</a></b> took its place in June 2002. +<b>ppmcolors</b> remains for backward compatibility, but all it does is +run <b>pamseq</b>. It is slower and less flexible than running +<b>pamseq</b> directly. + +</BODY> +</HTML> diff --git a/ppmdcfont.html b/ppmdcfont.html new file mode 100644 index 00000000..c7b79291 --- /dev/null +++ b/ppmdcfont.html @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdcfont User Manual</TITLE></HEAD> +<BODY> +<H1>ppmdcfont</H1> +Updated: September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +ppmdcfont - Turn a Ppmdfont file into C source for a builtin font + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmdcfont</B> + + +<p>(There are no arguments or options) + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmdcfont</b> creates a C source file that you can compile into +a built-in font for use with the Netpbm PPM drawing facilities. It +reads a Ppmdfont file on Standard Input and writes the C source code to +Standard Output. + +<p>The output C source code has the font object's name hardcoded as +<b>ppmd_standardfont</b>, which you will definitely want to edit, +because that is the name of the font built in to <b>libnetpbm</b>. If +you don't change it, it will conflict both cognitively and in program +linking. There should obviously be an option on <b>ppmdcfont</b> to +choose this, but the development effort has not been justified so far. + +<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function +Manual</A> for details on Ppmdfont files. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A +HREF="ppmddumpfont.html">ppmddumpfont</A></B>, <B><A +HREF="ppmdcfont.html">ppmdcfont</A></B>, <A +HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> + diff --git a/ppmddumpfont.html b/ppmddumpfont.html new file mode 100644 index 00000000..f17e3bff --- /dev/null +++ b/ppmddumpfont.html @@ -0,0 +1,50 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmddumpfont User Manual</TITLE></HEAD> +<BODY> +<H1>ppmddumpfont</H1> +Updated: September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +ppmddumpfont - dump a Ppmdfont file + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmddumpfont</B> + + +<p>(There are no arguments or options) + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmddumpfont</b> reads a Ppmdfont file on Standard Input and +writes to Standard Error a human readable description of the font. + +<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function +Manual</A> for details on Ppmdfont files. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A +HREF="ppmdmkfont.html">ppmdmkfont</A></B>, <B><A +HREF="ppmdcfont.html">ppmdcfont</A></B>, <A +HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> + diff --git a/ppmdim.html b/ppmdim.html new file mode 100644 index 00000000..0e17c5b7 --- /dev/null +++ b/ppmdim.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdim User Manual</TITLE></HEAD> +<BODY> +<H1>ppmdim</H1> +Updated: June 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmdim - dim a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +ppmdim +<I>dimfactor</I> +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This program is largely obsoleted by the more general <A +HREF="pamfunc.html"><b>pamfunc</b></A> (use the <b>-multiplier</b> +option). <b>ppmdim</b> remains for backward compatibility and also +because its use of integer arithmetic may make it faster. + +<b>ppmdim</b> reads a PPM image input. Diminishes its brightness by +the specified dimfactor. The dimfactor may be in the range from 0.0 +(total blackness, deep night, nada, null, nothing) to 1.0 (original +picture's brightness). + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="pamfunc.html">pamfunc</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmdist.html b/ppmdist.html new file mode 100644 index 00000000..0cdcc0d3 --- /dev/null +++ b/ppmdist.html @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdist User Manual</TITLE></HEAD> +<BODY> +<H1>ppmdist</H1> +Updated: 22 July 1992 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmdist - simplistic grayscale assignment for machine generated, color images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmdist</B> + +[<B>-intensity</B>|<B>-frequency</B>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmdist</b> reads a PPM image as input and performs a simplistic +grayscale assignment intended for use with grayscale or bitmap +printers. + +<P>Often conversion from ppm to pgm will yield an image with contrast +too low for good printer output. The program maximizes contrast +between the gray levels output. + +<P>A ppm input of n colors is read, and a pgm of n gray levels is +written. The gray levels take on the values 0..n-1, while maxval +takes on n-1. + +<P>The mapping from color to stepped grayscale can be performed in +order of input pixel intensity, or input pixel frequency (number of +repetitions). + +<p>This program is helpful only for images with a very small number of +colors. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-frequency</B> + +<DD>Sort input colors by the number of times a color appears in the +input, before mapping to evenly distributed graylevels of output. + +<DT><B>-intensity</B> + +<dd>Sort input colors by their grayscale intensity, before mapping to +evenly distributed graylevels of output. This is the default. + +</DL> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtopgm.html">ppmtopgm</A>, +<A HREF="ppmhist.html">ppmhist</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Dan Stromberg. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmdither.html b/ppmdither.html new file mode 100644 index 00000000..fd3eaaa4 --- /dev/null +++ b/ppmdither.html @@ -0,0 +1,88 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdither User Manual</TITLE></HEAD> +<BODY> +<H1>ppmdither</H1> +Updated: 14 July 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +ppmdither - ordered dither for color images + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmdither</B> + +[<B>-dim</B> <I>power</I>] + +[<B>-red</B> <I>shades</I>] + +[<B>-green</B> <I>shades</I>] + +[<B>-blue</B> <I>shades</I>] + +[<I>ppmfile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmdither</b> reads a PPM image as input, and applies dithering +to it to reduce the number of colors used down to the specified number +of shades for each primary. The default number of shades is red=5, +green=9, blue=5, for a total of 225 colors. To convert the image to a +binary rgb format suitable for color printers, use -red 2 -green 2 +-blue 2. + +<p>You can do another kind of dither -- Floyd-Steinberg -- with +<b>pnmquant</b> or <b>pnmremap</b>. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-dim</B> <I>power</I> + +<DD> The size of the dithering matrix. The dithering matrix is a +square whose dimension is a power of 2. <I>power</I> is that power of +2. The default is 4, for a 16 by 16 matrix. + +<DT><B>-red</B> <I>shades</I> + +<DD> +The number of red shades to be used, including black; minimum of 2. + +<DT><B>-green</B> <I>shades</I> + +<DD> +The number of green shades to be used, including black; minimum of 2. + +<DT><B>-blue</B> <I>shades</I> + +<DD> +The number of blue shades to be used, including black; minimum of 2. + +</DL> +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pamdepth.html">pamdepth</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A href="pnmremap.html">pnmremap</A>, +<A HREF="ppm.html">ppm</A> + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1991 by Christos Zoulas. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmdmkfont.html b/ppmdmkfont.html new file mode 100644 index 00000000..6f66d1b0 --- /dev/null +++ b/ppmdmkfont.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdmkfont User Manual</TITLE></HEAD> +<BODY> +<H1>ppmdmkfont</H1> +Updated: September 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +ppmdmkfont - Create Ppmdfont "standard". + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmdmkfont</B> + + +<p>(There are no arguments or options) + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmdmkfont</b> creates the "standard" Ppmdfont font as +a Ppmdfont file. It has no input; it always generates identical files. + +<p>This program is useful mainly as an example for creating other fonts. +<b>libnetpbm</b> has the "stanard" font built in. + +<p>See <A HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function +Manual</A> for details on Ppmdfont files. + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmdraw.html">ppmdraw</A></B>, <B><A +HREF="ppmddumpfont.html">ppmddumpfont</A></B>, <B><A +HREF="ppmdcfont.html">ppmdcfont</A></B>, <A +HREF="libnetpbm_draw.html">Libnetpbm PPM Drawing Function Manual</A> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> + diff --git a/ppmdraw.html b/ppmdraw.html new file mode 100644 index 00000000..643da3ca --- /dev/null +++ b/ppmdraw.html @@ -0,0 +1,255 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmdraw User Manual</TITLE></HEAD> +<BODY> + +<H1>ppmdraw</H1> +Updated: 22 June 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +ppmdraw - draw lines, text, etc on a PPM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmdraw</B> + +{ +<B>-script=</B><I>script</I> +| +<B>-scriptfile=</B><i>filename</i> +} +[<b>-verbose</b>] + +[<I>ppmfile</I>] + + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>ppmdraw</B> draws lines, shapes, text, etc. on a PPM image. It is +essentially an easy-to-program front end to <b>libnetpbm</b>'s +"ppmd" subroutines. It lets you create a human-friendly +script to describe the drawing rather than write a C program. + +<p>You supply drawing instructions with a script, which you supply either +in a file named by a <b>-scriptfile</b> option or as the value of a +<b>-script</b> option. Here is an example script: + +<pre> +<code> +setpos 50 50; +text_here 10 30 "hello"; +setcolor black; +text_here 10 0 "there"; +line_here 5 20; +</code> +</pre> + +<p>This example starts at Column 50, Row 50 of the input image and +writes the word "hello" there in 10 pixel high white letters +at a 30 degree angle up from horizontal. Then, from where that leaves +off, the script writes "there" in 10 pixel high black +letters horizontally. Finally, it draws a black line to a point 5 +pixels over and 20 pixels down from the end of "there." + +<P>If you don't specify <I>ppmfile</I>, <B>ppmdraw</B> reads its input +PPM image from Standard Input. + +<P>The output image goes to Standard Output. + +<p><b>ppmdraw</b> works on multi-image streams. It executes the same +script on each input image and produces an output stream with one image +for each input image. But before Netpbm 10.32 (February 2006), +<b>ppmdraw</b> ignored every image after the first. + +<p>If you just want to add a single line of text to an image, +<b>ppmlabel</b> may be more what you want. + + +<H2 id="options">OPTIONS</H2> + + +<DL COMPACT> +<DT><B>-script=</B><I>script</I> + +<DD>This option gives the script. See <a href="#script">Script</a>. + +<p>You may not specify both <b>-script</b> and <b>-scriptfile</b>. + +<dt><b>-scriptfile=</b><i>filename</i> + +<dd>This option names a file that contains the script. <b>-</b> +means Standard Input. + +<p>You may not specify both <b>-script</b> and <b>-scriptfile</b>. + +<p>You may not specify <b>-</b> (Standard Input) for both +<b>-scriptfile</b> and the input image file. + +</DL> + + +<H2 ID="script">SCRIPT</H2> + +<p>The heart of <b>ppmdraw</b> function is its script. The script is +a character stream. The stream consists of commands. Commands are +separated by semicolons. White space is regarded just like in C: Any +contiguous stretch of unquoted white space is equivalent to a single +space character. Note that this means newlines have no particular +significance. + +<p>A command is composed of tokens, separated from each other by +white space. To write a token that contains white space, enclose +it in double quotes. Everything between two matched quotation marks +is one token. + +<p>The first token of a command is the verb, which determines the +basic function of the command. The rest of the tokens of the command +are arguments, the meaning of which depends upon the verb. The +following list gives all the valid verbs, and for each its meaning and +its arguments. + +<dl> +<dt>setpos + +<dd>Set the "current position" in the image. This affects +where subsequent commands draw things. The 2 arguments are the column +and row number. + +<p>At the start of the script, the current position is (0,0). + +<dt>setlinetype + +<dd>The 1 argument is "normal" or "nodiag.". This +effects a <b>ppmd_setlinetype()</b> call. Further details are not yet +documented. + +<dt>setlineclip + +<dd>This effects a <b>ppmd_setlineclip()</b> call. Not yet documented. + +<dt>setcolor + +<dd>This sets the "current color", which determines the color +in which subsequent drawing commands draw. Before the first +<b>setcolor</b>, the current color is white. + +<dt>setfont + +<dd>This sets the "current font", which determines the font +in which subsequent text drawing commands draw. Before the first +<b>setfont</b>, the current color is a built in font called +"standard." + +<p>The argument of this command is a file name. It is the name of a +Netpbm PPMD font file. + +<p>A Netpbm PPMD font file typically has a name that ends in +".ppmdfont" and its first 8 bytes are the ASCII encoding of +"ppmdfont". + +<p>There is only one of these fonts as far as we know. It is +distributed with Netpbm as the file <b>standard.ppmdfont</b>, but you +don't need to use that file because the same font is built into the +Netpbm library and is the default. If you want to make a new font, +you can find the format of a ppmdfont file in the Netpbm interface +header file <b>ppmdfont.h</b>, but you'll have to make your own tools +to build it. + +<dt>line + +<dd>This draws a one pixel wide line in the current color. The 4 arguments +are: starting column, starting row, ending column, ending row. + +<p>This command does not affect the current position. + +<dt>line_here + +<dd>This is like <b>line</b>, except it works in a more relative way. + +<p>The line starts at the current point. The two arguments are the +rightward and downard displacement from there of the terminal point. +The command moves the current position to the terminal point after drawing. + +<dt>spline3 + +<dd>This draws a spline in the current color through 3 points. The 6 +arguments are the starting column, starting row, middle column, middle +row, ending column, and ending row. + +<p>This command does not affect the current position. + +<dt>circle + +<dd>This command draws a circle in the current color. The three +arguments are the column number and row number of the center of the +circle and the radius of the circle in pixels. + +<dt>filledrectangle + +<dd>This command draws a rectangle filled with the current color. + +The 4 arguments are the column and row numbers of the upper left corner +of the rectangle, the width of the rectangle, and the height of the +rectangle. + +<dt>text + +<dd>This command draws text in the current color in the built-in font. +The 5 arguments are: + +<ol> +<li>column number of starting point of baseline +<li>row number of starting point of baseline +<li>height of characters, in pixels +<li>angle of baseline in degrees elevated from the horizontal +<li>text +</ol> + +<p>Note that if your text contains white space, you'll have to use double +quotes to cause it to be a single token. + +<dt>text_here + +<dd>This is like <b>text</b>, except that the baseline starts at +the current position and the command updates the current position to the +other end of the baseline after it draws. + +<p>Bear in mind that a script starts with the current position in the +top line, so if you leave it there, only the bottom line of your text +will be within the image! + +</dl> + +<h2 id="history">HISTORY</h2> + +<P><B>ppmdraw</B> was new in Netpbm 10.29 (August 2005). + + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppmlabel.html">ppmlabel</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#script">SCRIPT</A> +<LI><A HREF="#seealso">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/ppmfade.html b/ppmfade.html new file mode 100644 index 00000000..2d1c8eb6 --- /dev/null +++ b/ppmfade.html @@ -0,0 +1,173 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmfade User Manual</TITLE></HEAD> +<BODY> +<H1>PPMFADE</H1> +Updated: April 1, 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmfade - generate a transition between two image files using special effects + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmfade</B> +[<B>-f</B> <I>first.ppm</I>] +[<B>-l</B> <I>last.ppm</I>] +[<B>-mix</B>|<B>-spread</B>|<B>-shift</B>| +<B>-relief</B>|<B>-oil</B>|<B>-edge</B>|<B>-bentley</B>|<B>-block</B>] +[<B>-base</B> <I>name</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmfade</b>generates a transition between either two input +images or between one input image and black. You can use the 30 +intermediate images generated to show a smooth transition between +segments of a movie. The input and output images are in the PPM +format. If you specify both input images, they should both be the +same size. If you want to fade from black to an image, specify only +the last image. If you want to fade from an image to black, specify +only the first image. <B>ppmfade</B> names the resulting image files +<I>base</I><B>.</B><I>nnnn</I><B>.ppm</B>, where <I>nnnn</I> is a +number varying between 0001 and 0030 and <I>base</I> is what you +specify with via the <B>-base</B> option (default <B>fade</B>). + +<P>Another way to convert by steps from one image to another is +morphing. You can use <B>xmorph</B> to do that. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-f</b> <i>first.ppm</i> + +<DD> +This is the image file (PPM format) to be used at the beginning of the +transition. If you don't specify this, the fade will start from black. + +<DT><B>-l</b> <i>last.ppm</i> + +<DD> +This is the image file (PPM format) to be used at the ending of the +transition. If you don't specify this, the fade will end with black. + +<DT><B>-mix</B> + +<DD> +The two images are superimposed with the brightness of the first image +decreasing from full to none and the brightness of the final image +increasing from none to full. The transition is quadratic in brightness +with faster transition in the beginning and slower at the end. + +<DT><B>-spread</B> + +<DD> +The pixels in the first image will be moved (spread) further and further +from their original location and then moved into the proper location in +the final image. This is the default transition. + +<DT><B>-shift</B> + +<DD> +The pixels in the first image will be shifted further and further horizontally +from their original location and then moved into the proper location in +the final image. + +<DT><B>-relief</B> + +<DD> +The first image is faded to a Laplacian relief filtered version of the +first image. This is then faded to a Laplacian relief filtered version +of the second image and finally faded to the final image. + +<DT><B>-oil</B> + +<DD>The first image is faded to an "oil transfer" version +of the first image. This is then faded to an "oil transfer" +version of the second image and finally faded to the final image. + +<DT><B>-edge</B> + +<DD> +The first image is faded to an edge detected version of the first image. +This is then faded to an edge detected version of the second image and +finally faded to the final image. + +<DT><B>-bentley</B> + +<DD> The first image is faded to a "Bentley Effect" version +of the first image. This is then faded to a "Bentley +Effect" version of the second image and finally faded to the +final image. + +<DT><B>-block</B> + +<DD> +The first image is defocused to small blocks. The small blocks are converted +to match a defocused version of the last image. The block version of the last +image is then focused to the final image. + +<DT><B>-base</B> <I>name</I> + +<DD> +This forms part of the output filenames, as described above. + +</DL> + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<B>ppmfade -f teapot.ppm -l pyr.ppm</B> + +<P> +Fade from teapot.ppm to pyr.ppm generating fade.0001.ppm to fade.0030.ppm using +the "spread" transition. + +<P> +<B>ppmfade -l teapot.ppm</B> + +<P> +Fade from black to teapot.ppm generating fade.0001.ppm to fade.0030.ppm. + +<P> +<B>ppmfade -f teapot.ppm -base end</B> + +<P> +Fade from teapot.ppm to black generating end.0001.ppm to end.0030.ppm. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B>tontsc</B> manual, +<B>sgifade</B> manual, +<B>smart_vfr</B> manual, +<B>xmorph</B> manual, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> +Bryan Henderson, Olympia WA; April 2000 + +<p>Inspired by and intended as a replacement for <b>pbmfade</b> (not a +Netpbm program) by Wesley C. Barris. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmflash.html b/ppmflash.html new file mode 100644 index 00000000..7b86ab5a --- /dev/null +++ b/ppmflash.html @@ -0,0 +1,72 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmflash User Manual</TITLE></HEAD> +<BODY> +<H1>ppmflash</H1> +Updated: 26 January 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmflash - brighten a picture to approach white + +<A NAME="lbAC"> </A> + +<H2>SYNOPSIS</H2> +ppmflash +<I>flashfactor</I> +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmflash</b> reads a PPM image as input. It changes the color of +each pixel to bring it a specified amount closer to white. It +generates a PPM image of the result. + +<p><i>flashfactor</i> is a real number between 0 and 1, inclusive. +<b>ppmflash</b> increases the intensity of each RGB component by the +fraction <i>flashfactor</i> of the difference between the current +value and full intensity. So if a pixel contains 60% full red, 10% +full green, and no blue and you specify 0.5 (half), <b>ppmflash</b> +increases the red to 80% (because it was 40% from full intensity, so +it adds half of 40% to the original 60%), the green to 55%, and the +blue to 50%. + +<p>If <i>flashfactor</i> is zero, the output is identical to the input. +If <i>flashfactor</i> is one, the output is all white. + +<p><b>ppmbrighten</b> does a more normal kind of brightening. +<b>pamfunc</b> does a very simple brightening. Both +<b>ppmbrighten</b> and <b>pamfunc</b> can reduce brightness as well. + +<p><b>pnmgamma</b> is another way people do a similar brightening, though +it isn't really intended for that. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmbrighten.html">ppmbrighten</A> +<A HREF="pamfunc.html">pamfunc</A>, +<A HREF="pnmgamma.html">pnmgamma</A>, +<A HREF="ppm.html">ppm</A>, + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmforge.html b/ppmforge.html new file mode 100644 index 00000000..85164be5 --- /dev/null +++ b/ppmforge.html @@ -0,0 +1,395 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmforge User Manual</TITLE></HEAD> +<BODY> +<H1>ppmforge</H1> +Updated: 25 October 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmforge - fractal forgeries of clouds, planets, and starry skies +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmforge</B> + +[<B>-clouds</B>] +[<B>-night</B>] +[<B>-dimension</B> <I>dimen</I>] +[<B>-hour</B> <I>hour</I>] +[<B>-inclination|-tilt</B> <I>angle</I>] +[<B>-mesh</B> <I>size</I>] +[<B>-power</B> <I>factor</I>] +[<B>-glaciers</B> <I>level</I>] +[<B>-ice</B> <I>level</I>] +[<B>-saturation</B> <I>sat</I>] +[<B>-seed</B> <I>seed</I>] +[<B>-stars</B> <I>fraction</I>] +[{<B>-xsize</b>|<b>-width</B>} <I>width</I>] +[{<B>-ysize</b>|<b>-height</B>} <I>height</I>] + + +<P>You can abbreviate any options to its shortest unique prefix. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>ppmforge</B> generates three kinds of ``random fractal forgeries,'' +the term coined by Richard F. Voss of the IBM Thomas J. Watson +Research Center for seemingly realistic pictures of natural objects +generated by simple algorithms embodying randomness and fractal +self-similarity. The techniques used by <B>ppmforge</B> are +essentially those given by Voss[1], particularly the technique of +spectral synthesis explained in more detail by Dietmar Saupe[2]. + +<P>The program generates two varieties of pictures: planets and +clouds, which are just different renderings of data generated in an +identical manner, illustrating the unity of the fractal structure of +these very different objects. A third type of picture, a starry sky, +is synthesised directly from pseudorandom numbers. + +<P>The generation of planets or clouds begins with the preparation of +an array of random data in the frequency domain. The size of this +array, the ``mesh size,'' can be set with the <B>-mesh</B> option; the +larger the mesh the more realistic the pictures but the calculation +time and memory requirement increases as the square of the mesh size. +The fractal dimension, which you can specify with the +<B>-dimension</B> option, determines the roughness of the terrain on +the planet or the scale of detail in the clouds. As the fractal +dimension is increased, more high frequency components are added into +the random mesh. + +<P>Once the mesh is generated, an inverse two dimensional Fourier +transform is performed upon it. This converts the original random +frequency domain data into spatial amplitudes. We scale the real +components that result from the Fourier transform into numbers from 0 +to 1 associated with each point on the mesh. You can further modify +this number by applying a ``power law scale'' to it with the +<B>-power</B> option. Unity scale leaves the numbers unmodified; a +power scale of 0.5 takes the square root of the numbers in the mesh, +while a power scale of 3 replaces the numbers in the mesh with their +cubes. Power law scaling is best envisioned by thinking of the data +as representing the elevation of terrain; powers less than 1 yield +landscapes with vertical scarps that look like glacially-carved +valleys; powers greater than one make fairy-castle spires (which +require large mesh sizes and high resolution for best results). + +<P>After these calculations, we have a array of the specified size +containing numbers that range from 0 to 1. The pixmaps are generated +as follows: + +<DL COMPACT> +<DT><B>Clouds</B> + +<DD> +A color map is created that ranges from pure blue to white by +increasing admixture (desaturation) of blue with white. Numbers less +than 0.5 are colored blue, numbers between 0.5 and 1.0 are colored +with corresponding levels of white, with 1.0 being pure white. + +<DT><B>Planet</B> + +<DD> +The mesh is projected onto a sphere. Values less than 0.5 are treated +as water and values between 0.5 and 1.0 as land. The water areas are +colored based upon the water depth, and land based on its elevation. +The random depth data are used to create clouds over the oceans. An +atmosphere approximately like the Earth's is simulated; its light +absorption is calculated to create a blue cast around the limb of the +planet. A function that rises from 0 to 1 based on latitude is +modulated by the local elevation to generate polar ice caps--high +altitude terrain carries glaciers farther from the pole. Based on the +position of the star with respect to the observer, the apparent color +of each pixel of the planet is calculated by ray-tracing from the star +to the planet to the observer and applying a lighting model that sums +ambient light and diffuse reflection (for most planets ambient light +is zero, as their primary star is the only source of illumination). +Additional random data are used to generate stars around the planet. + +<DT><B>Night</B> + +<DD> +A sequence of pseudorandom numbers is used to generate stars with a +user specified density. +</DL> + +<P>Cloud pictures always contain 256 or fewer colors and may be +displayed on most color mapped devices without further processing. +Planet pictures often contain tens of thousands of colors which must +be compressed with <B>pnmquant</B> or <B>ppmdither</B> before encoding +in a color mapped format. If the display resolution is high enough, +<B>ppmdither</B> generally produces better looking planets. +<B>pnmquant</B> tends to create discrete color bands, particularly in +the oceans, which are unrealistic and distracting. The number of +colors in starry sky pictures generated with the <B>-night</B> option +depends on the value specified for <B>-saturation</B>. Small values +limit the color temperature distribution of the stars and reduce the +number of colors in the image. If the <B>-saturation</B> is set to +0, none of the stars will be colored and the resulting image will +never contain more than 256 colors. Night sky pictures with many +different star colors often look best when color compressed by +<B>pamdepth</B> rather than <B>pnmquant</B> or <B>ppmdither</B>. Try +<I>newmaxval</I> settings of 63, 31, or 15 with <B>pamdepth</B> to +reduce the number of colors in the picture to 256 or fewer. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-clouds</B> + +<DD> +Generate clouds. A pixmap of fractal clouds is generated. Selecting clouds +sets the default for fractal dimension to 2.15 and power scale factor +to 0.75. + +<DT><B>-dimension</B> <I>dimen</I> + +<DD> Sets the fractal dimension to the specified <I>dimen</I>, which +may be any floating point value between 0 and 3. Higher fractal +dimensions create more ``chaotic'' images, which require higher +resolution output and a larger FFT mesh size to look good. If no +dimension is specified, 2.4 is used when generating planets and 2.15 +for clouds. + +<DT><B>-glaciers</B> <I>level</I> + +<DD>The floating point <I>level</I> setting controls the extent to +which terrain elevation causes ice to appear at lower latitudes. The +default value of 0.75 makes the polar caps extend toward the equator +across high terrain and forms glaciers in the highest mountains, as on +Earth. Higher values make ice sheets that cover more and more of the +land surface, simulating planets in the midst of an ice age. Lower +values tend to be boring, resulting in unrealistic +geometrically-precise ice cap boundaries. + +<DT><B>-hour</B> <I>hour</I> + +<DD>When generating a planet, <b>ppmforge</b> uses <I>hour</I> as the +"hour angle at the central meridian." If you specify <B>-hour +12</B>, for example, the planet will be fully illuminated, +corresponding to high noon at the longitude at the center of the +screen. You can specify any floating point value between 0 and 24 for +<I>hour</I>, but values which place most of the planet in darkness (0 +to 4 and 20 to 24) result in crescents which, while pretty, don't give +you many illuminated pixels for the amount of computing that's +required. If no <B>-hour</B> option is specified, a random hour angle +is chosen, biased so that only 25% of the images generated will be +crescents. + +<DT><B>-ice</B> <I>level</I> + +<DD>Sets the extent of the polar ice caps to the given floating point +<I>level</I>. The default level of 0.4 produces ice caps similar to +those of the Earth. Smaller values reduce the amount of ice, while +larger <B>-ice</B> settings create more prominent ice caps. +Sufficiently large values, such as 100 or more, in conjunction with +small settings for <B>-glaciers</B> (try 0.1) create "ice +balls" like Europa. + +<DT><B>-inclination|-tilt</B> <I>angle</I> + +<DD>The inclination angle of the planet with regard to its primary +star is set to <I>angle</I>, which can be any floating point value +from -90 to 90. The inclination angle can be thought of as +specifying, in degrees, the ``season'' the planet is presently +experiencing or, more precisely, the latitude at which the star +transits the zenith at local noon. If 0, the planet is at equinox; +the star is directly overhead at the equator. Positive values +represent summer in the northern hemisphere, negative values summer in +the southern hemisphere. The Earth's inclination angle, for example, +is about 23.5 at the June solstice, 0 at the equinoxes in March and +September, and -23.5 at the December solstice. If no inclination +angle is specified, a random value between -21.6 and 21.6 degrees is +chosen. + +<DT><B>-mesh</B> <I>size</I> + +<DD>A mesh of <I>size</I> by <I>size</I> will be used for the fast +Fourier transform (FFT). Note that memory requirements and +computation speed increase as the square of <I>size</I>; if you double +the mesh size, the program will use four times the memory and run four +times as long. The default mesh is 256x256, which produces reasonably +good looking pictures while using half a megabyte for the 256x256 +array of single precision complex numbers required by the FFT. On +machines with limited memory capacity, you may have to reduce the mesh +size to avoid running out of RAM. Increasing the mesh size produces +better looking pictures; the difference becomes particularly +noticeable when generating high resolution images with relatively high +fractal dimensions (between 2.2 and 3). + +<DT><B>-night</B> + +<DD>A starry sky is generated. The stars are created by the same +algorithm used for the stars that surround planet pictures, but the +output consists exclusively of stars. + +<DT><B>-power</B> <I>factor</I> + +<DD>Sets the "power factor" used to scale elevations +synthesised from the FFT to <I>factor</I>, which can be any floating +point number greater than zero. If no factor is specified a default +of 1.2 is used if a planet is being generated, or 0.75 if clouds are +selected by the <B>-clouds</B> option. The result of the FFT image +synthesis is an array of elevation values between 0 and 1. A +non-unity power factor exponentiates each of these elevations to the +specified power. For example, a power factor of 2 squares each value, +while a power factor of 0.5 replaces each with its square root. (Note +that exponentiating values between 0 and 1 yields values that remain +within that range.) Power factors less than 1 emphasise large-scale +elevation changes at the expense of small variations. Power factors +greater than 1 increase the roughness of the terrain and, like high +fractal dimensions, may require a larger FFT mesh size and/or higher +screen resolution to look good. + +<DT><B>-saturation</B> <I>sat</I> + +<DD>Controls the degree of color saturation of the stars that surround +planet pictures and fill starry skies created with the <B>-night</B> +option. The default value of 125 creates stars which resemble the sky +as seen by the human eye from Earth's surface. Stars are dim; only +the brightest activate the cones in the human retina, causing color to +be perceived. Higher values of <I>sat</I> approximate the appearance +of stars from Earth orbit, where better dark adaptation, absence of +skyglow, and the concentration of light from a given star onto a +smaller area of the retina thanks to the lack of atmospheric +turbulence enhances the perception of color. Values greater than 250 +create ``science fiction'' skies that, while pretty, don't occur in +this universe. + +<p>Thanks to the inverse square law combined with Nature's love of +mediocrity, there are many, many dim stars for every bright one. This +population relationship is accurately reflected in the skies created +by <B>ppmforge</B>. Dim, low mass stars live much longer than bright +massive stars, consequently there are many reddish stars for every +blue giant. This relationship is preserved by <B>ppmforge</B>. You +can reverse the proportion, simulating the sky as seen in a starburst +galaxy, by specifying a negative <I>sat</I> value. + +<DT><B>-seed</B> <I>num</I> + +<DD>Sets the seed for the random number generator to the integer +<I>num</I>. The seed used to create each picture is displayed on +standard output (unless suppressed with the <B>-quiet</B> option). +Pictures generated with the same seed will be identical. If no +<B>-seed</B> is specified, a random seed derived from the date and +time will be chosen. Specifying an explicit seed allows you to +re-render a picture you particularly like at a higher resolution or +with different viewing parameters. + +<DT><B>-stars</B> <I>fraction</I> + +<DD>Specifies the percentage of pixels, in tenths of a percent, which +will appear as stars, either surrounding a planet or filling the +entire frame if <B>-night</B> is specified. The default +<I>fraction</I> is 100. + +<DT><B>-xsize|-width</B><I> width</I> + +<DD>Sets the width of the generated image to <I>width</I> pixels. The +default width is 256 pixels. Images must be at least as wide as they +are high; if a width less than the height is specified, it will be +increased to equal the height. If you must have a long skinny pixmap, +make a square one with <B>ppmforge</B>, then use <B>pamcut</B> to +extract a portion of the shape and size you require. + +<DT><B>-ysize|-height</B> <I>height</I> + +<DD>Sets the height of the generated image to <I>height</I> pixels. +The default height is 256 pixels. If the height specified exceeds the +width, the width will be increased to equal the height. + +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<P>The algorithms require the output pixmap to be at least as wide as +it is high, and the width to be an even number of pixels. These +constraints are enforced by increasing the size of the requested +pixmap if necessary. + +<P>You may have to reduce the FFT mesh size on machines with 16 bit +integers and segmented pointer architectures. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppmdither.html">ppmdither</A></B>, +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<DL COMPACT> +<DT>[1] +<DD> +Voss, Richard F., ``Random Fractal Forgeries,'' in Earnshaw +et. al., Fundamental Algorithms for Computer Graphics, Berlin: +Springer-Verlag, 1985. + +<DT>[2] +<DD> +Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images, +New York: Springer Verlag, 1988. + +</DL> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<PRE> +John Walker +Autodesk SA +Avenue des Champs-Montants 14b +CH-2074 MARIN +Suisse/Schweiz/Svizzera/Svizra/Switzerland + <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A> + <B>Fax:</B>038/33 88 15 + <B>Voice:</B>038/33 76 33 +</PRE> + +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided ``as +is'' without express or implied warranty. + +<h3>PLUGWARE!</h3> + +If you like this kind of stuff, you may also enjoy ``James Gleick's +Chaos--The Software'' for MS-DOS, available for $59.95 from your +local software store or directly from Autodesk, Inc., Attn: Science +Series, 2320 Marinship Way, Sausalito, CA 94965, USA. Telephone: +(800) 688-2344 toll-free or, outside the U.S. (415) 332-2344 Ext +4886. Fax: (415) 289-4718. ``Chaos--The Software'' includes a more +comprehensive fractal forgery generator which creates +three-dimensional landscapes as well as clouds and planets, plus five +more modules which explore other aspects of Chaos. The user guide of +more than 200 pages includes an introduction by James Gleick and +detailed explanations by Rudy Rucker of the mathematics and algorithms +used by each program. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> + + + diff --git a/ppmglobe.html b/ppmglobe.html new file mode 100644 index 00000000..ff1c3e39 --- /dev/null +++ b/ppmglobe.html @@ -0,0 +1,148 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><TITLE>Ppmglobe User Manual</TITLE></HEAD> +<BODY> +<H1>ppmglobe</H1> +Updated: 23 February 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2 id="name">NAME</H2> + +ppmglobe - generate strips to glue onto a sphere + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmglobe</B> +[<b>-background=</b><i>colorname</i>] +[<b>-closeok</b>] +<i>stripcount</i> +[<i>filename</i>] + +<P>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmglobe</b> does the inverse of a cylindrical projection of a +sphere. Starting with a cylindrical projection, it produces an image +you can cut up and glue onto a sphere to obtain the spherical image of +which it is the cylindrical projection. + +<p>What is a cylindrical projection? Imagine a map of the Earth on +flat paper. There are lots of different ways cartographers show the +three dimensional information in such a two dimensional map. The +cylindrical projection is one. You could make a cylindrical projection +by putting a light inside a globe and wrapping a rectangular sheet of +paper around the globe, touching the globe at the Equator. Then trace +the image that the light projects onto the paper. Lay the paper out flat +and you have a cylindrical projection. + +<p>Here's where <b>ppmglobe</b> comes in: Pass the image on that paper +through <b>ppmglobe</b> and what comes out the other side looks something +like this: + +<p> +<img src="globe.jpg" alt="Example of map of the earth run through ppmglobe"> + +<p>You could cut out the strips and glue it onto a sphere and you'd +have a copy of the original globe. + +<p>Note that cylindrical projections are not what you normally see as +maps of the Earth. You're more likely to see a Mercator projection. +In the Mercator projection, the Earth gets stretched North-South as +well as East-West as you move away from the Equator. It was invented +for use in navigation, because you can draw straight compass courses +on it, but is used today because it is pretty. + +<p>You can find maps of planets at <a +href="http://maps.jpl.nasa.gov">maps.jpl.nasa.gov</a>. + +<H2 id="parameters">PARAMETERS</H2> + +<p><i>stripcount</i> is the number of strips <b>ppmglobe</b> is to +generate in the output. More strips makes it easier to fit onto a +sphere (less stretching, tearing, and crumpling of paper), but makes +you do more cutting out of the strips. + +<p>The strips are all the same width. If the number of columns of +pixels in the image doesn't evenly divide by the number of strips, +<b>ppmglobe</b> truncates the image on the right to create nothing but +whole strips. In the pathological case that there are fewer columns +of pixels than the number of strips you asked for, <b>ppmglobe</b> +fails. + +<p>Before Netpbm 10.32 (February 2006), instead of truncating the image +on the right, <b>ppmglobe</b> produces a fractional strip on the right. + +<p><i>filename</i> is the name of the input file. If you don't +specify this, <b>ppmglobe</b> reads the image from Standard Input. + + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-background=</B><I>colorname</I> +<DD> +This specifies the color that goes between the strips. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p>The default is black. + +<p>This option was new in Netpbm 10.31 (December 2005). Before that, +the background is always black. + +<DT><B>-closeok</B> +<DD> +This means it is OK if the background isn't exactly the color you specify. +Sometimes, it is impossible to represent a named color exactly due to the +precision (i.e. maxval) of the image's color space. If you specify +<b>-closeok</b> and <b>ppmglobe</b> can't represent the color you name +exactly, it will use instead the closest color to it that is possible. +If you don't specify <b>closeok</b>, <b>ppmglobe</b> fails in that +situation. + +<p>This option was new in Netpbm 10.31 (December 2005). + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B> + +<H2 id="history">HISTORY</H2> + +<P><b>ppmglobe</b> was new in Netpbm 10.16 (June 2003). + +<p>It is derived from <a href="http://www.gensthaler.de/projekte/ppmglobemap"> +Max Gensthaler's <b>ppmglobemap</b></a>. + +<H2 id="authors">AUTHORS</H2> + +<p><a href="mailto:Max@Gensthaler.de">Max Gensthaler</a> +wrote a program he called +<b>ppmglobemap</b> in June 2003 and suggested it for inclusion in +Netpbm. Bryan Henderson modified the code slightly and included it in +Netpbm as <b>ppmglobe</b>. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#name">NAME</A> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#parameters">PARAMETERS</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#authors">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/ppmhist.html b/ppmhist.html new file mode 100644 index 00000000..3ed9a6c7 --- /dev/null +++ b/ppmhist.html @@ -0,0 +1,168 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmhist User Manual</TITLE></HEAD> +<BODY> +<H1>ppmhist</H1> +Updated: 24 June 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmhist - print a histogram of the colors in a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmhist</B> +[<B>-hexcolor</B> | <B>-float</B> | <B>-colorname</B> | <B>-map</B>] +[<B>-nomap</B>] +[<B>-noheader</B>] +[<B>-sort=</B>{<B>frequency</B>,<B>rgb</B>}] +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmhist</b>reads a PPM image as input and generates a histogram +of the colors in the image, i.e. a list of all the colors and how many +pixels of each color are in the image. + +<a name="output"></a> +<h3>Output Format</h3> + +<p>The output is in one of two basic formats: a report for humans +and a PPM image for use by programs. The PPM image is actually quite +readable by humans too. + +<h4>Human Report</h4> + +<p>You get this format by specifying (or defaulting to) the +<b>-nomap</b> option. + +<p>The format is one line for each color in the input image. + +<p>By default, there are two lines of column header at the top. Use the +<b>-noheader</b> option to suppress those lines. + +<p>In each line, <b>ppmhist</b> identifies the color by red, green, +and blue components. By default, it lists each of these in decimal, +using the exact values that are in the PPM input. So if the image has +a maxval of 255, the numbers in the listing range from 0 to 255. With +the <b>-hexcolor</b> option, you can change these numbers to +hexadecimal. With the <b>-float</b> option, the numbers are +fractional, adjusted to a maxval of 1. + +<p>Each line lists the luminosity of the color. It is in decimal +on the same scale as the rgb values (see above). + +<p>Each line lists the number of pixels in the image that have the color. +This is in decimal. + + +<h4>PPM Output</h4> + +<p>You get this format with the <b>-map</b> option. + +<p>The output file is a genuine PPM image, but it is PPM Plain format +and contains comments so that it is not a lot different from the +human report described above. + +<p>As a PPM image, it can be useful as input to other programs that +need some kind of palette. The image is a single row with one +column for each distinct color in the image. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-sort=</B>{<B>frequency</B>,<B>rgb</B>} + +<DD>The <B>-sort</B> option determines the order in which the colors +are listed in the output. <B>frequency</B> means to list them in +order of how pixels in the input image have the color, with the most +represented colors first. <B>rgb</B> means to sort them first by the +intensity of the red component of the color, then of the green, then of +the blue, with the least intense first. + +<P>The default is <B>frequency</B>. + +<DT><B>-hexcolor</B> + +<DD>Print the color components in hexadecimal. See <a +href="#output">output format</a>. + +<p>You may not specify this option along with <b>-float</b> or <b>map</b>. + +<DT><B>-float</B> + +<DD>Print the color components and the luminosity as floating point +numbers in the range [0,1]. See <a href="#output">output format</a>. + +<p>You may not specify this option along with <b>-hexcolor</b> or <b>map</b>. + +<p>This option was added in Netpbm 10.19 (November 2003). + +<DT><B>-map</B> + +<DD>Generates a PPM file of the colormap for the image, with the +color histogram as comments. See <a href="#output">output format</a>. + +<p>You may not specify this option along with <b>-float</b> or <b>hexcolor</b>. + +<DT><B>-nomap</B> + +<DD> +Generates the histogram for human reading. This is the default. + +<DT><B>-colorname</b> + +<dd>Add the color name to the output. This is the name from the <a +href="libppm.html#rgb.txt">system color dictionary</a>. If the exact +color is not in the color dictionary, it is the closest color that is +in the dictionary and is preceded by a '*'. If you don't have a +system color dictionary, the program fails. + +<p>This option was added in Netpbm 10.10 (October 2002). + +<DT><B>-noheader</B> + +<DD>Do not print the column headings. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B>, + +<B><A HREF="pgmhist.html">pgmhist</A></B>, + +<B><A HREF="pnmcolormap.html">pnmcolormmap</A></B>, + +<B><A HREF="pnmhistmap.html">pnmhistmap</A></B>, + +<B><A HREF="ppmchange.html">ppmchange</A></B> + +<P> +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmlabel.html b/ppmlabel.html new file mode 100644 index 00000000..8e38955b --- /dev/null +++ b/ppmlabel.html @@ -0,0 +1,195 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmlabel User Manual</TITLE></HEAD> +<BODY> + +<H1>ppmlabel</H1> +Updated: 15 April 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +ppmlabel - add text to a PPM image + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmlabel</B> + +[<B>-angle</B> <I>angle</I>] + +[<B>-background</B> { <B>transparent</B> | <I>color</I> } ] + +[<B>-color</B> <I>color</I>] + +[<B>-file</B> <I>filename</I>] + +[<B>-size</B> + +<I>textsize</I>] + +[<B>-text</B> <I>text_string</i>] + +[<B>-x</B> <I>column</I>] + +[<B>-y</B> <I>row</I>] + +... + +[<I>ppmfile</I>] + + +<h2 id="example">EXAMPLE</h2> + +<pre> +<code> + ppmlabel -x 50 -y 50 -text hello \ + -angle -30 -text there \ + testimg.ppm +</code> +</pre> + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>ppmlabel</B> uses the text drawing facilities of <B>libnetpbm</B>'s +"ppmd" component to add text to a PBM image. You control +the location, size, baseline angle, color of the text, and background +color (if any) with command line arguments. You can specify the text +on the command line or supply it in files. + +<p>You can add any number of separate labels in a single invocation of +<B>ppmlabel</B>, limited only by any restrictions your environment has +on the number and size of program arguments (e.g. a shell's command +size limit). + +<P>If you don't specify <I>ppmfile</I>, <B>ppmlabel</B> reads its input +PPM image from Standard Input. + +<P>The output image goes to Standard Output. + +<P>A more sophisticated way to add a label to an image is to use +<b>pbmtext</b> or <b>pbmtextps</b> to create an image of the text, then +<b>pamcomp</b> to overlay it onto the base image. + +<p>Another more general program is <b>ppmdraw</b>. It is slightly harder +to use for simple labelling. + +<H2 id="options">OPTIONS</H2> + +<p>The arguments on the <B>ppmlabel</B> command line are not options in +the strict sense; they are commands which control the placement and +appearance of the text being added to the input image. They are +executed left to right, and any number of arguments may appear. + +<P>You can abbreviate any option to its shortest unique prefix. + +<DL COMPACT> +<DT><B>-angle</B><I> angle</I> + +<DD>This option sets the angle of the baseline of subsequent text. +<I>angle</I> is an integral number of degrees, measured +counterclockwise from the row axis of the image. + +<DT><B>-background</b> { <b>transparent</b> | <I>color</I> } + +<DD>If the argument is <B>transparent</B>, <b>ppmlabel</b> draws the +text over the existing pixels in the image. If you specify a +<I>color</I> (see the <B>-color</B> option below for information on +how to specify colors), <b>ppmlabel</b> generates background rectangles +enclosing subsequent text, and those rectangles are filled with that +color. + +<DT><B>-color</B> <I>color</I> + +<DD>This option sets the color for subsequent text. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + +<p><b>-colour</b> is an acceptable alternate spelling. + +<DT><B>-file</B> <I>filename</I> + +<DD>This option causes <b>ppmlabel</b> to read lines of text from the file +named <I>filename</I> and draw it on successive lines. + +<DT><B>-size</B> <I>textsize</I> + +<DD>This option sets the height of the tallest characters above the +baseline to <I>textsize</I> pixels. + +<DT><B>-text</B> <I>text_string</I> + +<DD>This option causes <b>ppmlabel</b> to draw the specified text +string. It advances the location for subsequent text down 1.75 times +the current <i>textsize</i>. That lets you draw multiple lines of +text in a reasonable manner without specifying the position of each +line. +<p> +Note that if you invoke <b>ppmlabel</b> via a shell command and your +text string contains spaces, you'll have to quote it so the shell treats +the whole string as a single token. E.g. +<pre> + $ ppmlabel -text "this is my text" baseimage.ppm >annotatedimage.ppm +</pre> + + +<DT><B>-x</B> <I>column</I> + +<DD>This option sets the pixel column at which subsequent text will +be left justified. Depending on the shape of the first character, the +actual text may begin a few pixels to the right of this point. + +<DT><B>-y</B> <I>row</I> + +<DD>This option sets the pixel row which will form the baseline of +subsequent text. Characters with descenders, such as "y," will extend +below this line. + +</DL> + +<H2 id="limitations">LIMITATIONS</H2> + +<P>Text strings are restricted to 7 bit ASCII. The text font used by +<B>ppmlabel</B> doesn't include definitions for 8 bit ISO 8859/1 characters. + +<P>When drawing multiple lines of text with a non-transparent +background, it should probably fill the space between the lines with +the background color. This is tricky to get right when the text is +rotated to a non-orthogonal angle. + +<H2 id="seealso">SEE ALSO</H2> + + +<B><A HREF="ppmmake.html">ppmmake</A></B>, +<B><A HREF="ppmdraw.html">ppmdraw</A></B>, +<B><A HREF="pbmtext.html">pbmtext</A></B>, +<B><A HREF="pbmtextps.html">pbmtextps</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + +<H2 id="author">AUTHOR</H2> + +Copyright (C) 1995 by John Walker (<A HREF="mailto:kelvin@fourmilab.ch">kelvin@fourmilab.ch</A>)<BR> +WWW home page: <A HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A><BR> + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided +``as is'' without express or implied warranty. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#example">EXAMPLE</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#limitations">LIMITATIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmmake.html b/ppmmake.html new file mode 100644 index 00000000..37d64c86 --- /dev/null +++ b/ppmmake.html @@ -0,0 +1,89 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><title>Ppmmake User Manual</title></HEAD> +<BODY> +<H1>ppmmake</H1> +Updated: 02 September 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmmake - create a PPM image of a specified color and dimensions + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmmake</B> +<b>-maxval=</b><i>maxval</i> +<I>color</I> +<I>width</I> +<i>height</I> + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or an equals sign between an option name +and its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>ppmmake</b> produces a PPM image of the specified color, width, +height, and maxval. + +<P>Specify the color (<i>color</i>) as described for the <a +href="libppm.html#colorname">argument of the <b>ppm_parsecolor()</b> +library routine</a>. + + +<A NAME="example"> </a> +<h2>EXAMPLES</H2> + +<pre> + ppmmake red 50 50 +</pre> +<pre> + ppmmake rgb:ff/80/80 50 100 -maxval=5 +</pre> + + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<DL> +<DT><b>-maxval=</b><i>maxval</i> +<DD> + The maxval for the generated image. Default is 255. +<p> + This option did not exist before June 2002. Before, the maxval was + always 255. +</DL> + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmmake.html">pbmmake</A>, +<A HREF="pgmmake.html">pgmmake</A>, +<A HREF="ppmpat.html">ppmpat</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#example">EXAMPLES</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmmix.html b/ppmmix.html new file mode 100644 index 00000000..b65a5503 --- /dev/null +++ b/ppmmix.html @@ -0,0 +1,64 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmmix User Manual</TITLE></HEAD> +<BODY> +<H1>ppmmix</H1> +Updated: 16 November 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmmix - blend together two PPM images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +ppmmix +<I>fadefactor</I> + +<I>ppmfile1</i> + +<i>ppmfile2</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmmix</b> reads two PPM images as input and mixes them together +using the specified fade factor. The fade factor may be in the range +from 0.0 (only ppmfile1's image data) to 1.0 (only ppmfile2's image +data). Anything in between specifies a smooth blend between the two +images. + +<P>The two pixmaps must have the same size. + +<P><B>pamcomp</B> is a more general alternative. It allows you to mix +images of different size and to have the fade factor vary throughout +the image (through the use of an alpha mask). + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcomp.html">pamcomp</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmnorm.html b/ppmnorm.html new file mode 100644 index 00000000..1dcd7397 --- /dev/null +++ b/ppmnorm.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Ppmnorm User Manual</TITLE> +</HEAD><BODY> +<H1>ppmnorm</H1> +Updated: March 2002 +<BR> +<H2>NAME</H2> +<B>ppmnorm</B> - replaced by pnmnorm +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>ppmnorm</b> was replaced in Netpbm 9.25 (March 2002) by +<b><a href="pnmnorm.html">pnmnorm</a></b>. + +<P><B>pnmnorm</b> is backward compatible with <b>ppmnorm</b> except that +for PBM and PGM input, it produced PBM and PGM output. + +</BODY> +</HTML> diff --git a/ppmntsc.html b/ppmntsc.html new file mode 100644 index 00000000..31c34945 --- /dev/null +++ b/ppmntsc.html @@ -0,0 +1,119 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmntsc User Manual</TITLE></HEAD> +<BODY> +<H1>ppmntsc</H1> +Updated: April 19, 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmntsc - Make RGB colors legal for NTSC or PAL color systems. + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmntsc</B> + +[<B>--pal</B>] +[<B>--legalonly</B>] +[<B>--illegalonly</B>] +[<B>--correctedonly</B>] +[<B>--verbose</B>] +[<B>--debug</B>] +[<I>infile</I>] + +<P>Minimum unique abbreviations of options are acceptable. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p>This program makes colors legal in the NTSC (or PAL) color systems. +Often, images generated on the computer are made for use in movies +which ultimately end up on video tape. However, the range of colors +(as specified by their RGB values) on a computer does not match the +range of colors that can be represented using the NTSC (or PAL) +systems. If an image with "illegal" colors is sent directly +to an NTSC (or PAL) video system for recording, the +"illegal" colors will be clipped. This may result in an +undesirable looking picture. + +<P>This utility tests each pixel in an image to see if it falls +within the legal NTSC (or PAL) range. If not, it raises or lowers the +pixel's saturation in the output so that it does fall within legal +limits. Pixels that are already OK just go unmodified into the +output. + +<P>Input is from the file named <I>input</I>. If <I>input</I> is +<B>-</B>, input is from Standard Input. If you don't specify +<I>input</I>, input is from Standard Input. + +<P>Output is always to Standard Output. + +<P>This program handles multi-image PPM input, producing multi-image +PPM output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>--pal</B> +<DD> +Use the PAL transform instead of the default NTSC. + +<DT><B>--verbose</B> +<DD> +Print a grand total of the number of illegal pixels. + +<DT><B>--debug</B> +<DD> +Produce a humongous listing of illegal colors and their legal counterparts. +NOTE: This option may produce a great deal of output. + +<DT><B>--legalonly</B> +<DD> +Output only pixels that are already legal. Output black in place of pixels +that are not. + +<DT><B>--illegalonly</B> +<DD> +Output only pixels that are illegal (and output them uncorrected). +Output black in place of pixels that are already legal. + +<DT><B>--correctedonly</B> +<DD> +Output only pixels that are corrected versions of illegal pixels. Output +black in place of pixels that are already legal. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppmdim.html">ppmdim</A></B>, +<B><A HREF="ppmbrighten.html">ppmbrighten</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Wes Barris, Minnesota Supercomputer Center, Inc., Bryan Henderson + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmpat.html b/ppmpat.html new file mode 100644 index 00000000..d8a92a89 --- /dev/null +++ b/ppmpat.html @@ -0,0 +1,123 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmpat User Manual</TITLE></HEAD> +<BODY> +<H1>ppmpat</H1> +Updated: 12 June 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmpat - make a pretty PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmpat</B> +{<B>-gingham2</B>|<B>-g2</B>} | +{<B>-gingham3</B>|<B>-g3</B>} | +<B>-madras</B> | +<B>-tartan</B> | +<B>-poles</B> | +<B>-squig</B> | +<B>-camo</B> | +<B>-anticamo</B> +<I>width</I> <I>height</I> + + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmpat</b> produces a PPM of the specified width and height, +with a pattern in it. + +<P>This program is mainly to demonstrate use of the ppmdraw routines, +a simple but powerful drawing library. See the ppmdraw.h include file +for more info on using these routines. Still, some of the patterns +can be rather pretty. If you have a color workstation, something like +<B>ppmpat -squig 300 300 | pnmquant 128</B> +should generate a nice background. + +<p>Some of these patterns have large numbers of colors, so if you want +a simpler pattern, use <b>pnmquant</b> on the output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>The options specify various pattern types: + +<DL COMPACT> +<DT><B>-gingham2</B> + +<DD>A gingham check pattern. Can be tiled. + +<DT><B>-gingham3</B> + +<DD>A slightly more complicated gingham. Can be tiled. + +<DT><B>-madras</B> + +<DD>A madras plaid. Can be tiled. + +<DT><B>-tartan</B> + +<DD>A tartan plaid. Can be tiled. + +<DT><B>-poles</B> + +<DD>Color gradients centered on randomly-placed poles. + +<DT><B>-squig</B> + +<DD>Squiggley tubular pattern. Can be tiled. + +<DT><B>-camo</B> + +<DD>Camouflage pattern. + +<DT><B>-anticamo</B> + +<DD>Anti-camouflage pattern - like -camo, but ultra-bright colors. + +</DL> + +<A NAME="lbAF"> </A> +<H2>REFERENCES</H2> + +Some of the patterns are from "Designer's Guide to Color 3" +by Jeanne Allen. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtile.html">pnmtile</A>, +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="ppmmake.html">ppmmake</A>, +<A HREF="ppmrainbow.html">ppmrainbow</A>, +<A HREF="pamgradient.html">pamgradient</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">REFERENCES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmquant.html b/ppmquant.html new file mode 100644 index 00000000..e002a6cb --- /dev/null +++ b/ppmquant.html @@ -0,0 +1,92 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmquant User Manual</TITLE></HEAD> +<BODY> +<H1>ppmquant</H1> +Updated: 22 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmquant - quantize the colors in a PPM image down to a specified number + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmquant</B> +[<B>-floyd</B>|<B>-fs</B>] +<I>ncolors</I> +[<I>ppmfile</I>] +<BR> +<B>ppmquant</B> +[<B>-floyd</B>|<B>-fs</B>] +[<B>-nofloyd</B>|<B>-nofs</B>] +<B>-mapfile</B> +<I>mapfile</I> +[<I>ppmfile</I>] + +<P> +All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or equals signs between an option name and its +value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmquant</b> is obsolete. All it does now is invoke +<b>pnmquant</b> or <b>pnmremap</b>. You should use one of those +programs in any new program, or if you are modifying an old program, +and your program does not have to work with a version of Netpbm before +9.21 (January 2001). <b>ppmquant</b> exists only for name +compatibility. + +<p><b>pnmquant</b> is fully backward compatible with <b>ppmquant</B> +<em>without</em> the <b>-mapfile</b> option; <b>pnmremap</b> is fully +backward compatible with <b>ppmquant</b> <em>with</em> the +<b>-mapfile</b> option. + +<p>Except with differences suggested by the syntax synopsis above, +<b>ppmquant</B>'s function is the same as <b>pnmquant</b> and +<b>pnmremap</b>. + +<p>Before Netpbm 10.19 (November 2003), <b>ppmquant</b> was a completely +separate program from <b>pnmquant</b>, and was a bona fide PPM program. +That means if you gave it a PGM or PBM image as input, it would process it +as if it were PPM and generate a PPM output. Now, since it is really a +PNM program, it processes PBM and PGM inputs as what they are and produces +the same kind of output. + +<p>Note: The reason <b>ppmquant</b> was changed in Netpbm 10.19 is +that for some time before that, <b>ppmquant</b> had a serious bug that +would have been difficult to fix -- it chose the wrong color set. +Maintaining two versions of the same code did not make sense. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>, +<B><A HREF="pamseq.html">pamseq</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">REFERENCES</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmquantall.html b/ppmquantall.html new file mode 100644 index 00000000..d49f5fcb --- /dev/null +++ b/ppmquantall.html @@ -0,0 +1,77 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmquantall User Manual</TITLE></HEAD> +<BODY> +<H1>ppmquantall</H1> +Updated: 27 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmquantall - run Pnmquant on a bunch of files all at once, so they +share a common colormap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmquantall</B> + +[<B>-ext</B> <I>extension</I>] + +<I>ncolors</i> + +<i>ppmfile</I> ... + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmquantall</b> takes a bunch of PPM images as input, chooses +<I>ncolors</I> colors to best represent all of the images, maps the +existing colors to the new ones, and <strong>overwrites the input +files</strong> with the new quantized versions. + +<P>If you don't want to overwrite your input files, use the +<B>-ext</B> option. The output files are then named the same as the +input files, plus a period and the extension text you specify. + +<P>Verbose explanation: Let's say you've got a dozen PPMs that you +want to display on the screen all at the same time. Your screen can +only display 256 different colors, but the PPMs have a total of a +thousand or so different colors. For a single PPM you solve this +problem with <b>pnmquant</b>; <b>ppmquantall</b> solves it for +multiple PPMs. All it does is concatenate them together into one big +PPM, run <b>pnmquant</b> on that, and then split it up into little +PPMs again. + +<P>(Note that another way to solve this problem is to pre-select a set +of colors and then use <b>pnmremap</b> to separately quantize each PPM +to that set.) + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmquant.html">pnmquant</A></B>, +<B><A HREF="pnmremap.html">pnmremap</A></B>, +<B><A HREF="pnmcolormap.html">pnmcolormap</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmrainbow.html b/ppmrainbow.html new file mode 100644 index 00000000..f1d36268 --- /dev/null +++ b/ppmrainbow.html @@ -0,0 +1,132 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmrainbow User Manual</TITLE></HEAD> +<BODY> +<H1>ppmrainbow</H1> +Updated: 14 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmrainbow - Generate a rainbow + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmrainbow</B> + +[<B>-width=</B><I>number</I>] + +[<B>-height=</B><I>number</I>] + +<BR> + +[<B>-tmpdir=</B><I>directory</I>] + +[<B>-norepeat</B>] + +[<B>-verbose</B>] + +<I>color</I> ... + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one to designate an option. You +may use either white space or equals signs between an option name and +its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>ppmrainbow</B> generates a PPM image that fades from one color to +another to another from left to right, like a rainbow. The colors are +those you specify on the command line, in that order. The first color +is added again on the right end of the image unless you specify the +<b>-norepeat</b> option. + +<P>If you want a vertical or other non-horizontal rainbow, run the output +through <B>pnmrotate</B> or <b>pamflip</b>. + +<P>One use for such a rainbow is to compose it with another image +under an alpha mask in order to add a rainbow area to another image. +In fact, you can make rainbow-colored text by using <B>pbmtext</B>, +<B>pamcomp</B>, and <B>ppmrainbow</B>. + +<p><b>pgmramp</b> does a similar thing for grayscale images. + +<p>If you just want an image containing all the possible colors (for some +kind of processing; not to look at), see <b>pamseq</b>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-width </B><I>number</I> + +<DD> +The width in pixels of the output image. + +<P>Default is 600. + +<DT><B>-height </B><I>number</I> + +<DD> +The height in pixels of the output image. + +<P>Default is 8. + +<DT><b>-norepeat</b> + +<dd>This option makes <b>ppmrainbow</b> end the rainbow with the last +color you specify. Without this option, <b>ppmrainbow</b> adds the +first color you specify to the right end of the rainbow as if you had +repeated it. <i>(I don't understand the point of this default behavior; +it exists today just for backward compatibility).</i> + +<DT><B>-tmpdir</B> + +<DD>The directory specification of the directory <B>ppmrainbow</B> is +to use for temporary files. + +<P>Default is the value of the <B>TMPDIR</B> environment variable, or +<b>/tmp</b> if <B>TMPDIR</B> is not set. + +<DT><B>-verbose</B> + +<DD>Print the "commands" (invocations of other Netpbm +programs) that <B>ppmrainbow</B> uses to create the image. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmramp.html">pgmramp</A></B>, +<B><A HREF="pamseq.html">pamseq</A></B>, +<B><A HREF="pamgradient.html">pamgradient</A></B>, +<B><A HREF="ppmmake.html">ppmmake</A></B>, +<B><A HREF="ppmfade.html">ppmfade</A></B>, +<B><A HREF="ppm.html">ppm</A></B>. + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<P>Arjen Bax wrote <B>ppmrainbow</B> in June 2001 and contributed it +to the Netpbm package. Bryan Henderson wrote this manual in July +2001. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmrelief.html b/ppmrelief.html new file mode 100644 index 00000000..b56c1a40 --- /dev/null +++ b/ppmrelief.html @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmrelief User Manual</TITLE></HEAD> +<BODY> +<H1>ppmrelief</H1> +Updated: 11 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmrelief - run a Laplacian relief filter on a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmrelief</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmrelief</b> reads a PPM image as input, +does a Laplacian relief filter, and writes a PPM image as output. + +<P>The Laplacian relief filter is described in "Beyond +Photography" by Holzmann, equation 3.19. It's a sort of +edge-detection. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pgmbentley.html">pgmbentley</A>, +<A HREF="pgmoil.html">pgmoil</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Wilson Bent (<A +HREF="mailto:whb@hoh-2.att.com">whb@hoh-2.att.com</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmrough.html b/ppmrough.html new file mode 100644 index 00000000..20f6f098 --- /dev/null +++ b/ppmrough.html @@ -0,0 +1,180 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmrough User Manual</TITLE></HEAD> +<BODY> +<H1>ppmrough</H1> +Updated: 23 August 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmrough - create PPM image of two colors with a ragged border between them +<A NAME="lbAC"> </A> + +<H2>SYNOPSIS</H2> + +<B>ppmrough</B> + +[<B>-left </B><I>pixels</I>] + +[<B>-right </B><I>pixels</I>] + +[<B>-top </B><I>pixels</I>] + +[<B>-bottom </B><I>pixels</I>] + +[<B>-width </B><I>pixels</I>] + +[<B>-height </B><I>pixels</I>] + +[<B>-bg </B><I>rgb:##/##/##</I>] + +[<B>-fg </B><I>rgb:##/##/##</I>] + +[<B>-var </B><I>pixels</I>] + +[<B>-init </B><I>seed</I>] + +[<B>-verbose</B>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<P> +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>ppmrough</b> generates a PPM image of the specified width, height, and +colors. <B>ppmrough</B> tiles the image into semi-rectangular regions +with a ragged borders between them. It calculates the fluctuations +with the <b>rand()</b> standard C library function. + +<P><B>ppmrough</B> writes the PPM image to Standard Output. + +<P>The maxval of the output image is 255 (You can change this with +<b>pamdepth</b>). + +<P>Use the options <B>-left</B> or <B>-right</B>, respectively, to +make vertical borders, and <B>-top</B> or <B>-bottom</B>, +respectively, to generate horizontal borders inside the image. Each of +these options needs an integer value <I>pixels</I> that determines the +average distance of the interior border to the related edge of the +image. You may combine the <B>-left</B>, <B>-right</B>, <B>-top</B>, +and <B>-bottom</B> options to generate an image with more than one +border. The algorithm ensures that you can concatenate two images +produced with the same (i.e. <B>-left</B>) value without dislocations. + +<P>You specify the dimensions of the generated image with the +<B>-width</B> and <B>-height</B> options. + +<P>Use the <B>-bg</B> and <B>-fg</B> options to set the background +(margin) color and the foreground (interior) color, respectively. If +you don't specify any of the <B>-left</B>, <B>-right</B>, <B>-top</B>, +and <B>-bottom</B> options, all pixels are set to foreground color. +The defaults are white foreground and black background. + +<P>Use the <B>-var</B> option to control the "raggedness" of +the border. The less its value is the smoother the border is. You +can initialize the pseudo-random generator with the <B>-init</B> +option. + +<P>You could use <b>ppmrough</b> with <b>ppmtopgm</b> to create a PGM +alpha mask and use it to roughen up the edges of another image. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-left </B><I>pixels</I> + +<DD> Specifies the mean distance of the border from the left margin +(default: no border). + +<DT><B>-right </B><I>pixels</I> + +<DD>Specifies the mean distance of the border from the right margin +(default: no border). + +<DT><B>-top </B><I>pixels</I> + +<DD>Specifies the mean distance of the border from the top margin +(default: no border). + +<DT><B>-bottom </B><I>pixels</I> + +<DD>Specifies the mean distance of the border from the bottom margin +(default: no border). + +<DT><B>-width </B><I>pixels</I> + +<DD>Specifies the width of the image (default: 100). + +<DT><B>-height </B><I>pixels</I> + +<DD>Specifies the height of the image (default: 100). + +<DT><B>-bg </B><I>color</I> + +<DD>Background color. Specify this the same way you specify a color with + <b>ppmmake</b>. Default is black. + +<DT><B>-fg </B><I>color</I> + +<DD>Foreground color. Specify this the same way you specify a color with + <b>ppmmake</b>. Default is white. + +<DT><B>-var </B><I>pixels</I> + +<DD> Specifies the variance of the ragged border (default: 10). Must +be a positive integer. Set <I>pixels</I> to 1 to get a straight +border. + +<DT><B>-init </B><I>seed</I> + +<DD>Use this option to initialize the pseudo-random number generator +(the Standard C library <b>rand()</b> function) with <I>seed</I>. + +<DT><B>-verbose</B> + +<DD>Run <B>ppmrough</B> in verbose mode. It reports all parameters on +Standard Error. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmmake.html">ppmmake</A></B>, +<B><A HREF="pnmcat.html">pnmcat</A></B>, +<B><A HREF="ppmtopgm.html">ppmtopgm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<P> +This program was added to Netpbm in Release 10.9 (September 2002). + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2002 by Eckard Specht. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +<HR> +</BODY> +</HTML> diff --git a/ppmshadow.html b/ppmshadow.html new file mode 100644 index 00000000..2089c7a7 --- /dev/null +++ b/ppmshadow.html @@ -0,0 +1,295 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmshadow User Manual</TITLE></HEAD> +<BODY> +<H1>ppmshadow</H1> +Updated: 17 April 2005 +<BR><A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmshadow - add simulated shadows to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmshadow</B> +[<B>-b</B> <I>blur_size</I>] +[<B>-k</B>] +[<B>-t</B>] +[<B>-x</B> <I>xoffset</I>] +[<B>-y</B> <I>yoffset</I>] +[<I>ppmfile</I>] + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><B>ppmshadow</B> adds a simulated shadow to an image, giving the +appearance that the contents of the image float above the page, +casting a diffuse shadow on the background. Shadows can either be +black, as cast by opaque objects, or translucent, where the shadow +takes on the color of the object which casts it. You can specify the +crispness of the shadow and its displacement from the image with command +line options. + +<p><b>ppmshadow</b> sees your image as a foreground on a background. +The background color is whatever color the top left pixel of your image is. +The background is all the pixels that are that color and the foreground +is everything else. The shadow that <b>ppmshadow</b> generates is a +shadow of the foreground, cast on the background. + +<p>The shadow is the same size as the foreground, plus some fringes +as determined by the <b>-b</b> option. It is truncated to fit in your +image. The output image is the same dimensions as the input image. + +<p>You can use <b>pamcomp</b> to place a foreground image over a background +before running <b>ppmshadow</b> on it. You can use <b>ppmmake</b> to make +the background image (just an image of a solid color). + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-b</B> <I>blur_size</I> + +<DD> +Sets the distance of the light source from the image. Larger values +move the light source closer, casting a more diffuse shadow, while +smaller settings move the light further away, yielding a sharper +shadow. <i>blur_size</i> is the number of pixels of fringe there is +on the shadow, beyond where the shadow would be if there were no +blurring. + +<p>The default is 11 pixels. + +<p>Note that this option controls only the fringing effect of moving +the light source closer to the object. It does not make the shadow +grow or shrink as would happpen in the real world if you moved a point +light source closer to and further from an object. + +<DT><B>-k</B> +<DD> +Keep the intermediate temporary image files. When debugging, these +intermediate files provide many clues as to the source of an error. +See <a href="#files">below</a> for a list of the contents of each file. + +<DT><B>-t</B> +<DD> +Consider the non-background material in the image translucent -- it +casts shadows of its own color rather than a black shadow, which is +default. This often results in fuzzy, difficult-to-read images but in +some circumstances may look better. + +<DT><B>-x</B><I> xoffset</I> + +<DD>Specifies the displacement of the light source to the left of the +image. Larger settings of <B>xoffset</B> displace the shadow to the +right, as would be cast by a light further to the left. If not +specified, the horizontal offset is half of <I>blur_size </I> (above), +to the left. + +<DT><B>-y</B><I> yoffset</I> + +<DD> Specifies the displacement of the light source above the top of +the image. Larger settings displace the shadow downward, +corresponding to moving the light further above the top of the image. +If you don't specify <B>-y</B>, the vertical offset defaults to the +same as the horizontal offset (above), upward. + +</DL> + + +<A NAME="files"></a> +<H2>FILES</H2> + +<p>Input is a PPM file named by the <I>ppmfile</I> command line +argument; if you don't specify <I>ppmfile</I>, the input is Standard +Input. + +<P>The output is a PPM file, written to Standard Output. + +<p><B>ppmshadow</B> creates a number of temporary files as it executes. It +creates a new directory for them, <b>/tmp/ppmshadow</b><i>pid</i>, +where <i>pid</i> is the process ID of the <b>ppmshadow</b> process. +If the <b>TMPDIR</b> environment variable is set, <b>ppmshadow</b> creates +the directory there instead of <b>/tmp</b>. + +In normal operation, <B>ppmshadow</B> deletes each temporary file as +soon as it is done with it and leaves no debris around after it +completes. To preserve the intermediate files for debugging, use the +<B>-k</B> command line option. + +<p>The temporary files are: +<DL COMPACT> + +<DT><B>infile.ppm</b> +<DD> +A copy of the input. + +<DT><B>bgmask.ppm</B> +<DD> +Positive binary mask + +<DT><B>convkernel.ppm</B> +<DD> +Convolution kernel for blurring shadow + +<DT><B>blurred.ppm</B> +<DD> +Blurred, colored shadow image + +<DT><B>blurred2.ppm</B> +<DD> +Blurred shadow image before coloring + +<DT><B>shadow.ppm</B> +<DD> +Clipped shadow image, offset as requested + +<DT><B>background.ppm</B> +<DD> +Blank image with background of source image + +<DT><B>shadow.ppm</B> +<DD> +Offset shadow + +<DT><B>fgmask.ppm</B> +<DD> +Inverse mask file + +<DT><B>justfg.ppm</B> +<DD> +Just the foreground. Rest is black. Original image times inverse mask. + +<DT><B>shadback.ppm</B> +<DD> +Generated shadow times positive mask + +<DT><B>allbutfg.ppm</b> +<dd> +Everything but the foreground (foreground area is black). + +</DL> + +<A NAME="lbAG"> </A> +<H2>LIMITATIONS</H2> + +<p>The source image must contain sufficient space on the edges in the +direction in which the shadow is cast to contain the shadow -- if it +doesn't some of the internal steps may fail. You can usually expand +the border of a too-tightly-cropped image with <B>pnmmargin</B> before +processing it with <B>ppmshadow</B>. + +<P>Black pixels and pixels with the same color as the image +background don't cast a shadow. If this causes unintentional +"holes" in the shadow, fill the offending areas with a color +which differs from black or the background by RGB values of 1, which +will be imperceptible to the viewer. Since the comparison is exact, +the modified areas will now cast shadows. + +<P>The background color of the source image (which is preserved in +the output) is deemed to be the color of the pixel at the top left of +the input image. If that pixel isn't part of the background, simply +add a one-pixel border at the top of the image, generate the shadow +image, then delete the border from it. + +<P>If something goes wrong along the way, the error messages from the +various Netpbm programs <B>ppmshadow</B> calls will, in general, +provide little or no clue as to where <B>ppmshadow</B> went astray. +In this case, Specify the <B>-k</B> option and examine the +intermediate results in the temporary files (which this option causes +to be preserved). If you manually run the commands that +<B>ppmshadow</B> runs on these files, you can figure out where the +problem is. In problem cases where you want to manually tweak the +image generation process along the way, you can keep the intermediate +files with the <B>-k </B> option, modify them appropriately with an +image editor, then recombine them with the steps used by the code in +<B>ppmshadow</B>. + +See the <B>ppmshadow.doc</B> file in the Netpbm source tree for +additional details and examples of the intermediate files and debugging +<b>ppmshadow</b>. + +<P>Shadows are by default black, as cast by opaque material in the +image occluding white light. Use the <B>-t</B> option to simulate +translucent material, where the shadow takes on the color of the +object that casts it. If the contrast between the image and +background is insufficient, the <B>-t</B> option may yield +unattractive results which resemble simple blurring of the original +image. + +<P>Because Netpbm used to have a maximum maxval of 255, which meant +that the largest convolution kernel <B>pnmconvol</B> could use was 11 +by 11, <B>ppmshadow</B> includes a horrid, CPU-time-burning kludge +which, if a blur of greater than 11 is requested, performs an initial +convolution with an 11 x 11 kernel, then calls <B>pnmsmooth</B> +(which is itself a program that calls <b>pnmconvol</b> with a 3 x 3 +kernel) as many times as the requested blur exceeds 11. It's ugly, +but it gets the job done on those rare occasions where you need a blur +greater than 11. + +<P>If you wish to generate an image at high resolution, then scale it +to publication size with <B>pamscale</B> in order to eliminate jagged +edges by resampling, it's best to generate the shadow in the original +high resolution image, prior to scaling it down in size. If you scale +first and then add the shadow, you'll get an unsightly jagged stripe +between the edge of material and its shadow, due to resampled pixels +intermediate between the image and background obscuring the shadow. + +<A NAME="lbAH"> </A> +<H2>EXIT STATUS</H2> + +<B>ppmshadow</B> returns status 0 if processing was completed without +errors, and a nonzero Unix error code if an error prevented generation +of output. Some errors may result in the script aborting, usually +displaying error messages from various Netpbm components it uses, +without returning a nonzero error code. When this happens, the output +file will be empty, so be sure to test this if you need to know if the +program succeeded. + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B>, +<B><A HREF="pnmmargin.html">pnmmargin</A></B>, +<B><A HREF="pnmconvol.html">pnmconvol</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="pnmsmooth.html">pnmsmooth</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + + +<A NAME="lbAJ"> </A> +<H2>AUTHOR</H2> + +John Walker <<A +HREF="http://www.fourmilab.ch">http://www.fourmilab.ch</A>> August +8, 1997 + +<A NAME="lbAK"> </A> +<H2>COPYRIGHT</H2> +This software is in the public domain. Permission to use, copy, +modify, and distribute this software and its documentation for any +purpose and without fee is hereby granted, without any conditions or +restrictions. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#files">FILES</A> +<LI><A HREF="#lbAG">LIMITATIONS</A> +<LI><A HREF="#lbAH">EXIT STATUS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#lbAJ">AUTHOR</A> +<LI><A HREF="#lbAK">COPYRIGHT</A> +</UL> +</BODY> +</HTML> diff --git a/ppmshift.html b/ppmshift.html new file mode 100644 index 00000000..356731b9 --- /dev/null +++ b/ppmshift.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmshift User Manual</TITLE></HEAD> +<BODY> +<H1>ppmshift</H1> +Updated: 16 November 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmshift - shift lines of a PPM image left or right by a random amount + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>ppmshift</b> +<I>shift</I> +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmshift</b> reads a PPM image as input. Shifts every row of +image data to the left or right by a certain amount. The <i>shift</i> +parameter determines by how many pixels a row is to be shifted at +most. + +<P>This is another one of those effects I intended to use for MPEG +tests. Unfortunately, this program will not help me here - it creates +too random patterns to be used for animations. Still, it might give +interesting results on still images. + +<A NAME="lbAE"> </A> +<H2>EXAMPLE</H2> + +Check this out: Save your favourite model's picture from something like +alt.binaries.pictures.supermodels (ok, or from any other picture source), +convert it to ppm, and process it e.g. like this, assuming the picture is +800x600 pixels: + +<pre> + #take the upper half, and leave it like it is + pamcut -top=0 -width=800 -height=300 cs.ppm >upper.ppm + + #take the lower half, flip it upside down, dim it and distort it a little + pamcut -top=300 -width=800 -height=300 cs.ppm | \ + pamflip -topbottom | \ + ppmdim 0.7 | \ + ppmshift 10 >lower.ppm + + #and concatenate the two pieces + pnmcat -topbottom upper.ppm lower.ppm >newpic.ppm + +</pre> + +The resulting picture looks like the image being reflected on a water +surface with slight ripples. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="pamcut.html">pamcut</A>, +<A HREF="pamflip.html">pamflip</A>, +<A HREF="ppmdim.html">ppmdim</A>, +<A HREF="pnmcat.html">pnmcat</A> + + +<A NAME="lbAG"> </A> + +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">EXAMPLE</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmspread.html b/ppmspread.html new file mode 100644 index 00000000..7e333987 --- /dev/null +++ b/ppmspread.html @@ -0,0 +1,58 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmspread User Manual</TITLE></HEAD> +<BODY> +<H1>ppmspread</H1> +Updated: 16 November 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmspread - displace a PPM image's pixels by a random amount + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<b>ppmspread</b> + +<I>amount</I> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmspread</b> reads a PPM image as input and moves every pixel +around a bit relative to its original position. <i>amount</i> +determines by how many pixels a pixel is to be moved around at most. + +<P>Pictures processed with this filter will seem to be somewhat +dissolved or unfocussed (although they appear more coarse than images +processed by something like <I>pnmconvol</I>). + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="pnmconvol.html">pnmconvol</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmsvgalib.html b/ppmsvgalib.html new file mode 100644 index 00000000..fddbe7cc --- /dev/null +++ b/ppmsvgalib.html @@ -0,0 +1,131 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmsvgalib User Manual</TITLE></HEAD> +<BODY> +<H1>ppmsvgalib</H1> +Updated: 11 May 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +ppmsvgalib - display PPM image on Linux console using Svgalib + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmsvgalib</B> + +[<B>-mode=</B><I>mode</I>] + +<P>All options can be abbreviated to their shortest unique prefix. You +may use two hyphens instead of one to designate an option. You may +use either white space or an equals sign between an option name and its +value. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<B>ppmsvgalib</B> displays a PPM image on a Linux virtual console +using the Svgalib facility. Svgalib is a popular means of displaying +Graphics in Linux without the use of the X Window System. (To display +a Netpbm image in an X window, see <b>pamx</b>). + +<P>If you run <B>ppmsvgalib</B> with a version of Svgalib earlier than +1.9, you must run it with CAP_SYS_RAWIO capability (on most Linux +systems, that means you run it as superuser), because Svgalib uses the +<b>ioperm()</b> system call to access the console hardware. Newer +Svgalib has its own device driver, so you need only proper +permissions on a device special file to access the console. + +<P><B>ppmsvgalib</B> is not capable of using color mapped video modes. +These are the old video modes that are usually called "8 +bit" color modes. + +<P><B>ppmsvgalib</B> is a bare displayer. It won't do any +manipulation of the image and is not interactive in any way. If you +want a regular interactive graphics viewer that uses Svgalib, try +<B>zgv</B> (not part of Netpbm). + +<P>To exit <B>ppmsvgalib</B> while it is displaying your image, send +it a SIGINTR signal (normally, this means "hit control C"). + +<P><B>ppmsvgalib</B> draws a white border around the edges of the +screen. It does this to help you isolate problems between the image +you're displaying and the facilities you're using to display it. + +<P>(Note: if the image you're displaying reaches the edges of the +screen, it will replace the white border). + +<P><B>ppmsvgalib</B> places the image in the center of the screen. + +<P>If your image is too big to display in the video mode you selected, +<B>ppmsvgalib</B> fails. You can use <B>pamcut</B> to cut out a part +of the image to display or use <B>pamscale</B> to shrink the image to +fit. + +<P>If you want to play with <B>ppmsvgalib</B>, <B>ppmcie</B> is a good +way to generate a test image. + +<P>To be pedantic, we must observe that <B>ppmsvgalib</B> displays a +PPM image in the correct colors only if the display has a transfer +function which is the exact inverse of the gamma function that is +specified in the PPM specification. Happily, most CRT displays are +pretty close. + +<P>Running the PPM image through <B>pnmgamma</B> can help cause +<B>ppmsvgalib</B> to display the correct colors. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>-mode=</B><I>mode</I> + +<DD>This tells <B>ppmsvgalib</B> what video mode to use. <I>mode</I> +is the Svgalib video mode number. You can get a list of all the video +modes and their Svgalib video mode numbers with the program +<B>vgatest</B> that is packaged with Svgalib. (Unfortunately, the +various interesting programs that are packaged with Svgalib are +typically not installed on systems that have the Svgalib library +installed). + +<P>In practice, there are probably only two modes you'll ever care +about: 25 is the standard SVGA direct color mode, which is 1024 +columns by 768 rows with 8 bit red, green, and blue components for +each pixel and no fancy options. 28 is the same, but with the popular +higher resolution of 1280 x 1024. + +<P>But if you have an older video controller (with less than 4MB of +memory), those modes aren't available and you might like mode 19, +which is 640 x 480 and takes less than a megabyte of video memory. +This is a standard VGA video mode. + +</DL> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pamx.html">pamx</A></B>, +<B><A HREF="pamcut.html">pamcut</A></B>, +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="ppmcie.html">ppmcie</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B>zgv</B>, +<B>Svgalib</B>, +<B>vgatest</B> + +<H2 id="author">AUTHOR</H2> + +<p>By Bryan Henderson, January 2002. + +<P>Contributed to the public domain. + +<HR> +<H2 id="index">Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoacad.html b/ppmtoacad.html new file mode 100644 index 00000000..eaca8c6a --- /dev/null +++ b/ppmtoacad.html @@ -0,0 +1,174 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoacad User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoacad</H1> +Updated: 10 October 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoacad - convert PPM to Autocad database or slide + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + + +<B>ppmtoacad</B> + +[<B>-dxb</B>] + +[<B>-poly</B>] + +[<B>-background</B> <I>color</I>] + +[<B>-white</B>] + +[<B>-aspect</B> <I>ratio</I>] + +[<B>-8</B>] + +[<I>ppmfile</I>] + + +<P>You may abbreviate any option to its shortest unique prefix. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoacad</b> reads a PPM image as input and produces an +Autocad® slide file or binary database import (.dxb) file as +output. If you don't specify <I>ppmfile</I>, +<b>ppmtoacad</b> takes the input from Standard Input. + +<p>(Typographical note: the name of Autocad is often rendered as +AutoCAD. Netpbm documentation uses standard American typography, wherein +that is not a valid form of capitalization). + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-dxb</B> + +<DD><b>ppmtoacad</b> writes an Autocad binary database import (.dxb) +file. You read this file with the DXBIN command and, once loaded, it +becomes part of the Autocad geometrical database, so you can view and +edit it like any other object. Each sequence of identical pixels +becomes a separate object in the database; this can result in very +large Autocad drawing files. However, if you want to trace over a +bitmap, it lets you zoom and pan around the bitmap as you wish. + +<DT><B>-poly</B> + +<DD>If you don't specify the <B>-dxb</B> option, <b>ppmtoacad</b> +generates an Autocad slide file. Normally each row of pixels is +represented by an Autocad line entity. If you specify <B>-poly</B>, +<b>ppmtoacad</b> renders the pixels as filled polygons. If you view +the slide on a display with higher resolution than the source image, +this will cause the pixels to expand instead of appearing as discrete +lines against the screen background color. Regrettably, this +representation yields slide files which occupy more storage space and +take longer to display. + +<DT><B>-background</B> <I>color</I> + +<DD>Most Autocad display drivers can be configured to use any +available color as the screen background. Some users prefer a black +screen background, others white, while splinter groups advocate burnt +ocher, tawny puce, and shocking gray. Discarding pixels whose closest +Autocad color representation is equal to the background color can +substantially reduce the size of the Autocad database or slide file +needed to represent a bitmap. If you don't specify +<B>-background</B>, <b>ppmtoacad</b> assumes the screen background +color to be black. You may specify any Autocad color number as the +screen background; <b>ppmtoacad</b> assumes color numbers to specify +the hues defined in the standard Autocad 256 color palette. + +<DT><B>-white</B> + +<DD>Since many Autocad users choose a white screen background, this +option is provided as a short-cut. Specifying <B>-white</B> is +identical in effect to <B>-background 7</B>. + +<DT><B>-aspect</B> <I>ratio</I> + +<DD>If the source image had non-square pixels (which means it is not +standard PPM), specify the ratio of the pixel width to pixel height as +<I>ratio</I>. <b>ppmtoacad</b> will correct the resulting slide or +.dxb file so that pixels on the Autocad screen will be square. For +example, to correct an image made for a 320x200 VGA/MCGA screen, +specify <B>-aspect 0.8333</B>. + +<DT><B>-8</B> + +<DD>Restricts the colors in the output file to the 8 RGB shades. +</DL> + +<A NAME="lbAF"> </A> +<H2>RESTRICTIONS</H2> + +<P>Autocad has a fixed palette of 256 colors, distributed along the +hue, lightness, and saturation axes. So it may poorly render images +which contain many nearly-identical colors, or colors not closely +approximated by Autocad's palette. + +<P><B>ppmtoacad</B> works best if the system displaying its output can +display the full 256 color Autocad palette. Monochrome, 8 color, and +16 color configurations will produce less than optimal results. + +<P>When creating a .dxb file or a slide file with the <B>-poly</B> +option, <B>ppmtoacad</B> finds both vertical and horizontal runs of +identical pixels and consolidates them into rectangular regions to +reduce the size of the output file. This is effective for images with +large areas of constant color but it's no substitute for true raster +to vector conversion. In particular, this process does not optimize +thin diagonal lines at all. + +<P>Output files can be huge. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<p>Autocad Reference Manual: <I>Slide File Format</I> and <I>Binary +Drawing Interchange (DXB) Files</I>, <B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<PRE> +John Walker +Autodesk SA +Avenue des Champs-Montants 14b +CH-2074 MARIN +Suisse/Schweiz/Svizzera/Svizra/Switzerland + <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A> + <B>Fax:</B>038/33 88 15 + <B>Voice:</B>038/33 76 33 +</PRE> + +<P>Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided +"as is" without express or implied warranty. + +<P>Autocad and Autodesk are registered trademarks of Autodesk, Inc. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoarbtxt.html b/ppmtoarbtxt.html new file mode 100644 index 00000000..8e9f0f57 --- /dev/null +++ b/ppmtoarbtxt.html @@ -0,0 +1,215 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoarbtxt User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoarbtxt</H1> +<BR> +Updated: 27 April 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmtoarbtxt - generate image in arbitrary text format from PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoarbtxt</B> +<I>bodyskl</I> +[<B>-hd</B> <I>headskl</I>] +[<B>-tl</B> <I>tailskl</I>] +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>ppmtoarbtxt</b> generates simple text-based graphics formats based on +format descriptions given as input. A text-based graphics format is one in +which an image is represented by text (like PNM plain format, but unlike +PNM raw format). + +<b>ppmtoarbtxt</b>reads a PPM image as input. For each pixel in the +image, <b>ppmtoarbtxt</b> writes the contents of the skeleton file +<I>bodyskl</I>, with certain substitutions based on the value of the +pixel, to stdout. The substitutions are as follows: + +<DL COMPACT> +<DT><B>#(ired</B><I> format blackref whiteref</I><B>)</B> + +<DD>generates an integer in the range <I>blackref</I> to +<I>whiteref</I> using <I>format</I> representing the red intensity of +the pixel. A red intensity of 0 becomes <I>blackref</I>; a red +intensity of maxval becomes <I>whiteref</I>. + +<p><B>#(ired)</B> is equivalent to <B>#(ired %d 0 255)</B>. + +<DT><B>#(igreen</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(ired...</B>, but for green. + +<DT><B>#(iblue</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(ired...</B>, but for blue. + +<DT><B>#(ilum</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(ired...</B>, but representing the luminance value +(0.299*red + 0.587*green + 0.114*blue) of the pixel. + +<DT><B>#(fred</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(ired...</B>, but generates a floating point number instead +of an integer. + +<p> +<B>#(fred)</B> is equivalent to <B>#(fred %f 0.0 1.0)</B>. + +<DT><B>#(fgreen</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(fred...</B>, but for green. + +<DT><B>#(fblue</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(fred...</B>, but for blue. + +<DT><B>#(flum</B><I> format blackref whiteref</I><B>)</B> + +<DD>Same as <B>#(fred...</B>, but representing the luminance value +(0.299*red + 0.587*green + 0.114*blue) of the pixel. + + +<DT><B>#(width)</B> + +<DD>Generates the width in pixels of the image. + +<DT><B>#(height)</B> + +<DD>Generates the height in pixels of the image. + + +<DT><B>#(posx)</B> + +<DD>Generates the horizontal position of the pixel, in pixels from the left +edge of the image. + +<DT><B>#(posy)</B> + +<DD>Generates the vertical position of the pixel, in pixels from the top +edge of the image. + +</DL> + + +<P>If the skeleton file ends with a LF-character, <b>ppmtoarbtxt</b> +ignores it -- it does not include it in the output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-hd</B> <I>headskl</I> + +<DD>This option causes <b>ppmtoarbtxt</b> to place the contents of +the file named <I>headskl</I> at the beginning of the output, before +the first pixel. It does the same substitutions as for +<I>bodyskl</I>, except substitutions based on a pixel value are +undefined. + +<DT><B>-tl</B> <I>tailskl</I> + +<DD>This option causes <b>ppmtoarbtxt</b> to place the contents of +the file named <i>tailskl</i> at the end of the output, after the +last pixel. It is analogous to <b>-hd</b>. +</DL> + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +<h3>gray inversion</H3> + +<P>Here we generate a PGM plain-format image with gray inversion +(like <b>ppmtopgm | pnminvert</b>). + +<p>Contents of our head skeleton file: + +<pre> +P2 +#(width) #(height) +255 +</pre> + +<P>Contents of our body skeleton file: + +<pre> +#(ilum %d 255 0) +</pre> + +<h3>povray file</h3> + +<P>Here we generate a povray file where each pixel is represented by a +sphere at location (x,y,z) = (posx,height-posy,luminance). The color +of the sphere is the color of the pixel. + +<p>Contents of our head skeleton: + +<pre> +#include "colors.inc" +#include "textures.inc" +camera { + location <#(width) * 0.6, #(height) * 0.7, 80> + look_at <#(width) * 0.5, #(height) * 0.5, 0> +} + +light_source { <#(width) * 0.5, #(height) * 0.5, 25> color White +} +</pre> + +<p>Contents of our body skeleton: + +<pre> +sphere { <#(posx),#(height)-#(posy),#(ilum %d 0 10)>, 0.5 + texture { + pigment { + color rgb <#(fred),#(fgreen),#(fblue)> + } + finish { + phong 1 + } + } +} +</pre> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<A href="pnmtoplainpnm.html">pnmtoplainpnm</A> +<A href="ppm.html">ppm</A> + +<H2>HISTORY</H2> +<A NAME="history"> </A> + +<P><B>ppmtoarbtxt</b> was added to Netpbm in Release 10.14 (March 2003). +It existed under the name <b>ppmtotxt</b> since 1995. + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1995 by Peter Kirchgessner + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtobmp.html b/ppmtobmp.html new file mode 100644 index 00000000..ca6717c4 --- /dev/null +++ b/ppmtobmp.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtobmp User Manual</TITLE> +</HEAD><BODY> +<H1>ppmtobmp</H1> +Updated: 13 June 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtobmp - convert a PPM image into a BMP file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtobmp</B> + +[<B>-windows</B>] + +[<B>-os2</B>] + +[<B>-bpp=</B><I>bits_per_pixel</I>] + +[<I>ppmfile</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtobmp</b> reads a PPM image as input and produces a Microsoft +Windows or OS/2 BMP file as output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-windows</B> + +<DD>Tells the program to produce a Microsoft Windows BMP file. (This +is the default.) + +<DT><B>-os2</B> + +<DD>Tells the program to produce an OS/2 BMP file. (Before August +2000, this was the default). + +<DT><B>-bpp</B> + +<DD>This tells how many bits per pixel you want the BMP file to +contain. Only 1, 4, 8, and 24 are possible. By default, +<B>ppmtobmp</B> chooses the smallest number with which it can +represent all the colors in the input image. If you specify a number +too small to represent all the colors in the input image, +<B>ppmtobmp</B> tells you and terminates. You can use <B>pnmquant</B> +or <B>ppmdither</B> to reduce the number of colors in the image. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>NOTES</H2> + +<P>To get a faithful reproduction of the input image, the maxval of the +input image must be 255. If it is something else, +the colors in the BMP file may be slightly different from the colors +in the input. + +<P>Windows icons are not BMP files. Use <B>ppmtowinicon</B> to +create those. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="bmptoppm.html">bmptoppm</A></B>, + +<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>, + +<B><A HREF="pnmquant.html">pnmquant</A></B>, + +<B><A HREF="ppmdither.html">ppmdither</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1992 by David W. Sanderson. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">NOTES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoeyuv.html b/ppmtoeyuv.html new file mode 100644 index 00000000..4c3a5fe8 --- /dev/null +++ b/ppmtoeyuv.html @@ -0,0 +1,56 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoeyuv User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoeyuv</H1> +Updated: April 3, 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoeyuv - convert a PPM image into a Berkeley YUV file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoeyuv</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoeyuv</b> reads a PPM image as input and produces a Berkeley +Encoder YUV (not the same as Abekas YUV) file on the Standard Output +file. + +<P>With no argument, <b>ppmtoeyuv</b>takes input from Standard Input. +Otherwise, <I>ppmfile</I> is the file specification of the input file. + +<P><B>ppmtoeyuv</B> handles multi-image PPM input streams, outputting +consecutive eyuv images. There must be at least one image, though. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="eyuvtoppm.html">eyuvtoppm</A></B>, + +<B><A HREF="ppmtoyuv.html">ppmtoyuv</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtogif.html b/ppmtogif.html new file mode 100644 index 00000000..8fd50f61 --- /dev/null +++ b/ppmtogif.html @@ -0,0 +1,75 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Ppmtogif User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtogif</H1> +<BR> +<p><b>ppmtogif</b> was replaced in Netpbm 10.37 (December 2002) by +<b><a href=pamtogif.html>pamtogif</a></b>. + +<P><B>pamtogif</b> is mostly backward compatible with <b>ppmtogif</b>. + +<P>One way <b>pamtogif</b> is not backward compatible with <b>ppmtogif</b> +is that to specify a transparency (alpha) mask with <b>ppmtogif</b>, you +supply the transparency as a separate pseudo-PGM image and use the +<b>-alpha</b> option, whereas with <b>pamtogif</b>, you supply an input +image that has the transparency integrated into it, and there is no +<b>-alpha</b> option. + +<p><b>ppmtogif</b> still exists as a separate program for backward +compatibility, but it runs <b>pamtogif</b> to do the essential work. +The compatibility <b>ppmtogif</b> interprets an <b>-alpha</b> option +by reading the transparency image and combining it with the input +image, then feeding <b>pamtogif</b> the combined image it expects. +Other than that, the compatibility <b>ppmtogif</b> just passes input and +options directly to <b>pamtogif</b>. + +<P>You should not make any new use of <b>ppmtogif</b> and if you modify an +existing use, you should upgrade to <b>pamtogif</b>. + +<p>Unless you use the <b>-alpha</b> option, you can simply change the name +of the program. If you use <b>-alpha</b>, here is how to upgrade: + +<pre> +<kbd> + $ ppmtogif -alpha=myalpha.pgm myinput.ppm >myoutput.gif +</kbd> +</pre> + +becomes + +<pre> +<kbd> + $ pamstack -tupletype=RGB_ALPHA myinput.ppm myalpha.pgm | \ + pamtogif >myoutput.gif +</kbd> +</pre> + + +<h2>Original Ppmtogif</h2> + +<p>If you are using Netpbm before 10.37, <b>pamtogif</b> doesn't exist, +so you use <b>ppmtogif</b>. You can use the <b>pamtogif</b> manual +for <b>ppmtogif</b>, with the following exceptions. + +<p>The current documentation of <b>pamtogif</b> documents all versions +of that program. Use the information for Version 10.37 only. + +<p><b>ppmtogif</b> before Netpbm 10.31 does not accept PAM input at all. + +<p><b>ppmtogif</b> does not accept PAM input with transparency information +in it. Instead, <b>ppmtogif</b> has an <b>-alpha</b> option. + +<p>The syntax of the option is <b>-alpha=</b><i>pgmfile</i>. +<b>ppmtogif</b> treats the contents of the named PGM file the same as +<b>pamtogif</b> treats the alpha plane of a PAM. The PGM image must +have the same dimensions as the input file. But unlike the PAM case, +the alpha image need not have the same maxval as the input. +<b>ppmtogif</b> interprets the alpha file using the alpha file's +maxval. + +<P>You cannot specify both <B>-transparent</B> and <B>-alpha</B>. + + +</BODY> +</HTML> diff --git a/ppmtoicr.html b/ppmtoicr.html new file mode 100644 index 00000000..b58e2943 --- /dev/null +++ b/ppmtoicr.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoicr User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoicr</H1> +Updated: 30 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoicr - convert a PPM image into NCSA ICR format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoicr</B> + +[<B>-windowname</B> <I>name</I>] + +[<B>-expand</B> <I>expand</I>] + +[<B>-display</B> <I>display</I>] + +[<B>-rle</B>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoicr</b> reads a PPM file as input. Produces an NCSA Telnet +Interactive Color Raster graphic file as output. + +If <I>ppmfile</I> is not supplied, <b>ppmtoicr</b> reads from Standard +Input. + +<P>Interactive Color Raster (ICR) is a protocol for displaying raster +graphics on workstation screens. The protocol is implemented in NCSA +Telnet for the Macintosh version 2.3. The ICR protocol shares +characteristics of the Tektronix graphics terminal emulation protocol. +For example, escape sequences are used to control the display. + +<P><b>ppmtoicr</b> will output the appropriate sequences to create a +window of the dimensions of the input pixmap, create a colormap of up +to 256 colors on the display, then load the picture data into the +window. + +<P>Note that there is no icrtoppm tool - this transformation is one +way. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-windowname</B> <I>name</I> + +<DD>Output will be displayed in <I>name</I> (Default is to use +<I>ppmfile</I> or "untitled" if the input is from Standard +Input). + +<DT><B>-expand</B> <I>expand</I> + +<DD>Output will be expanded on display by factor <I>expand</I> (For +example, a value of 2 will cause four pixels to be displayed for every +input pixel.) + +<DT><B>-display</B> <I>display</I> + +<DD>Output will be displayed on screen numbered <I>display</I> + +<DT><B>-rle</B> + +<DD>Use run-length encoded format for display. (This will nearly +always result in a quicker display, but may skew the colormap). + +</DL> + + +<A NAME="lbAF"> </A> +<H2>EXAMPLES</H2> + +To display a PPM file named <b>ppmfile</b> using the protocol: + +<PRE> + ppmtoicr ppmfile +</PRE> + +This will create a window named <I>ppmfile</I> on the display with the +correct dimensions for <I>ppmfile</I>, create and download a colormap +of up to 256 colors, and download the picture into the window. You +may achieve the same effect with the following sequence: + +<PRE> + ppmtoicr ppmfile > filename + cat filename +</PRE> + +<p>To display a GIF file using the protocol in a window titled after the +input file, zoom the displayed image by a factor of 2, and run-length +encode the data: + +<PRE> + giftopnm giffile | ppmtoicr -w giffile -r -e 2 +</PRE> + +<A NAME="lbAG"> </A> +<H2>LIMITATIONS</H2> + +<P>The protocol uses frequent fflush() calls to speed up display. If +you save the output to a file for later display via <B>cat</B>, +<b>ppmtoicr</b> will draw much more slowly. In either case, +increasing the blocksize limit on the display will speed up +transmission substantially. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B> + +<P>NCSA Telnet for the Macintosh, University of Illinois at +Urbana-Champaign (1989) + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Kanthan Pillay (<A +HREF="mailto:svpillay@Princeton.EDU">svpillay@Princeton.EDU</A>), +Princeton University Computing and Information Technology. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">EXAMPLES</A> +<LI><A HREF="#lbAG">LIMITATIONS</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoilbm.html b/ppmtoilbm.html new file mode 100644 index 00000000..b8159e8a --- /dev/null +++ b/ppmtoilbm.html @@ -0,0 +1,217 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoilbm User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoilbm</H1> +Updated: 31 October 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoilbm - convert a PPM image into an ILBM file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoilbm</B> + +[<B>-maxplanes</B>|<B>-mp</B> <I>N</I>] + +[<B>-fixplanes</B>|<B>-fp</B> <I>N</I>] + +[<B>-ham6</B>|<B>-ham8</B>] + +[{<B>-dcbits</B>|<B>-dcplanes</B>} <i>r</i> <i>g</i> <i>b</i>] + +[ +<B>-normal</B>|<B>-hamif</B>|<B>-hamforce</B>|<B>-24if</B>|<B>-24force</B>| +<b>-dcif</b>|<b>-dcforce</B>|<b>-cmaponly</B> +] + +[<B>-ecs</B>|<B>-aga</B>] + +[<B>-compress</B>|<B>-nocompress</B>] + +[<B>-cmethod</B> <I>type</I>] + +[<B>-map</B> <i>ppmfile</i>] + +[<B>-savemem</B>] + +[<B>ppmfile</B>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoilbm</b> reads a PPM image as input. Produces an ILBM file +as output. <b>ppmtoilbm</b> understands the following ILBM types: + +<UL COMPACT> + +<LI>Normal ILBMs with 1-16 planes + +<LI>Amiga HAM with 3-16 planes + +<LI>24 bit + +<LI>Color map (BMHD + CMAP chunk only, nPlanes = 0) + +<LI>Unofficial direct color. 1-16 planes for each color component. + +</ul> + +<p>Chunks written: BMHD, CMAP, CAMG (only for HAM), BODY (not for +colormap files) unofficial DCOL chunk for direct color ILBM. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<p>Options marked with (*) can be prefixed with a "no", +e.g. "-nohamif". All options can be abbreviated to their +shortest unique prefix. + +<DL COMPACT> +<DT><B>-maxplanes</b> | <b>-mp</b> <i>n</i> + +<DD>(default 5, minimum 1, maximum 16) Maximum planes to write in a +normal ILBM. If the pixmap does not fit into <n> planes, +ppmtoilbm writes a HAM file (if -hamif is used), a 24bit file (if +-24if is used) or a direct color file (if -dcif is used) or aborts +with an error. + +<DT><B>-fixplanes</b> | <b>-fp</b> <i>b</i> + +<DD>(min 1, max 16) If a normal ILBM is written, it will have exactly +<n> planes. + +<DT><B>-hambits</b> | <b>-hamplanes</b> <i>n</i> + +<DD>(default 6, min 3, max 16) Select number of planes for HAM +picture. The current Amiga hardware supports 6 and 8 planes, so for +now you should only use this values. + +<DT><B>-normal</B> + +<DD>Turns off -hamif/-24if/-dcif, -hamforce/-24force/-dcforce and +-cmaponly. Also sets compression type to byterun1. + +<p>This is the default. + +<DT><B>-hamif</B> (*) +<DT><B>-24if</B> (*) +<DT><B>-dcif</B> (*) + +<DD>Write a HAM/24bit/direct color file if the image does not fit into +<maxplanes> planes. + +<DT><B>-hamforce</B> (*) +<DT><B>-24force</B> (*) +<DT><B>-dcforce</B> (*) + +<DD>Write a HAM/24bit/direct color file. + +<DT><B>-dcbits</b> <i>r</i> <i>g</i> <i>b</i> +<DT><b>-dcplanes</b> <i>r</i> <i>g</i> <i>b</i> + +<DD>(default 5, min 1, max 16). Select number of bits for red, green +and blue in a direct color ILBM. + +<DT><B>-ecs</B> + +<DD>Shortcut for: -hamplanes 6 -maxplanes 5 + +<p>This is the default. + +<DT><B>-aga</B> + +<DD>Shortcut for: <b>-hamplanes 8 -maxplanes 8</B> + +<DT><B>-ham6</B> + +<DD>Shortcut for: <b>-hamplanes 6 -hamforce</B> + +<DT><B>-ham8</B> + +<DD>Shortcut for: <b>-hamplanes 8 -hamforce</b> + +<DT><B>-compress</B> (*) + +<DD>This is the default. + +<DD>Compress the BODY chunk. The default compression method is +byterun1. Compression requires building the ILBM image in memory; +turning compression off allows stream-writing of the image, but the +resulting file will usually be 30% to 50% larger. Another alternative +is the -savemem option, this will keep memory requirements for +compression at a minimum, but is very slow. + +<DT><B>-cmethod</b> <b>none</b>|<b>byterun1</B> + +<DD>This option does the same thing as <b>-compress</b>. + +<DT><B>-map</b> <i>ppmfile</i> + +<DD>Write a normal ILBM using the colors in <ppmfile> as the +colormap. The colormap file also determines the number of planes, a +<b>-maxplanes</b> or <b>-fixplanes</b> option is ignored. + +<DT><B>-cmaponly</B> + +<DD>Write a colormap file: only BMHD and CMAP chunks, no BODY chunk, +nPlanes = 0. + +<DT><B>-savemem</B> + +<DD>See the <b>-compress</b> option. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p>HAM pictures will always get a grayscale colormap; a real color +selection algorithm might give better results. On the other hand, +this allows row-by-row operation on HAM images, and all HAM images of +the same depth (no. of planes) share a common colormap, which is +useful for building HAM animations. + +<A NAME="lbAG"> </A> +<H2>REFERENCES</H2> + +Amiga ROM Kernel Reference Manual - Devices (3rd Ed.) +<BR> +Addison Wesley, ISBN 0-201-56775-X + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="ilbmtoppm.html">ilbmtoppm</A> + +<A NAME="lbAI"> </A> +<H2>AUTHORS</H2> + +<p>Copyright (C) 1989 by Jef Poskanzer. + +<p>Modified October 1993 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">REFERENCES</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtojpeg.html b/ppmtojpeg.html new file mode 100644 index 00000000..4cc0aff7 --- /dev/null +++ b/ppmtojpeg.html @@ -0,0 +1,21 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Ppmtojpeg User Manual</TITLE> +</HEAD><BODY> +<H1>ppmtojpeg</H1> +Updated: September 2001 +<BR> +<H2>NAME</H2> +<b>ppmtojpeg</b> - replaced by pnmtojpeg +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>ppmtojpeg</b> was replaced in Netpbm 9.19 (September 2001) by +<b><a href="pnmtojpeg.html">pnmtojpeg</a></b>. + +<P><B>pnmtojpeg</b> is backward compatible with <b>ppmtojpeg</b> +except that with PGM or PBM input, it generates JPEG output in the special +grayscale format. + +</BODY> +</HTML> diff --git a/ppmtoleaf.html b/ppmtoleaf.html new file mode 100644 index 00000000..ffad778b --- /dev/null +++ b/ppmtoleaf.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoleaf User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoleaf</H1> +Updated: 01 June 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoleaf - convert PPM image to Interleaf image format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoleaf</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoleaf</b> reads an Interleaf image file as input and +generates a PPM image as output. + +<P>Interleaf is a now-defunct (actually purchased ca. 2000 by +BroadVision) technical publishing software company. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppm.html">ppm</A></B>, + +<B><A HREF="pnmquant.html">pnmquant</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>The program is copyright (C) 1994 by Bill O'Donnell. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtolj.html b/ppmtolj.html new file mode 100644 index 00000000..a015d4da --- /dev/null +++ b/ppmtolj.html @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtolj User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtolj</H1> +Updated: 4 Sept 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtolj - convert a PPM image to an HP LaserJet PCL 5 Color file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtolj</B> + +[<b>-gamma</b> <I>val</I>] + +[<B>-resolution</B> <B>75</b>|<b>100</b>|<b>150</b>|<b>300</b>|<b>600</B>] + +[<B>-delta</B>] + +[<B>-float</B>] + +[<B>-noreset</b>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtolj</b> reads a PPM image as input and converts it into a +color file suitable to be printed by an HP color PCL 5 printer. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-delta</B> + +<DD> +Apply delta row compression to reduce the size of the pcl file. +<DT><B>-gamma</B> <I>int</I> + +<DD> +Gamma correct the image using the integet parameter as a gamma (default 0). + +<DT><B>-float</B> + +<DD> +Suppress positioning information. The default is to write the sequence +ESC&l0E to the output. + +<DT><B>-noreset</B> + +<DD> +Don't write the reset sequence to the begining and end of the output. + +<DT><B>-resolution</B> + +<DD> +Set the required output resolution 75|100|150|300|600 + +</DL> + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +HP PCL 5 & Color Reference Guide, +<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>, +<a href="pbmtolj.html"><b>pbmtolj.html</b></a>, +<a href="ppmtopj.html"><b>ppmtopj</b></a>, +<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>, +<a href="ppm.html"><b>ppm.html</b></a> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2000 by Jonathan Melvin.(<A +HREF="mailto:jonathan.melvin@heywood.co.uk">jonathan.melvin@heywood.co.uk</A>) + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtomap.html b/ppmtomap.html new file mode 100644 index 00000000..fbd93536 --- /dev/null +++ b/ppmtomap.html @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtomap User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtomap</H1> +Updated: 06 January 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtomap - create a map of all colors in a PPM image + +<A NAME="lbAC"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>This program exists only for backward compatibility. + +<P>Use <B>pnmcolormap</B>, which replaced it in January 2002. + +<P>One trivial difference between <B>ppmtomap</B> and <B>pnmcolormap +all</B> is that if the input is PBM or PGM, <B>ppmtomap</B> would +produce PPM output, whereas <B>pnmcolormap all</B> produces the same +kind of output as the input. This should not be very noticeable, +though, as PBM and PGM images are usually usable anywhere a PPM image +is. + +<A NAME="lbAD"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmcolormap.html">pnmcolormap</A></B> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">DESCRIPTION</A> +<LI><A HREF="#lbAD">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtomitsu.html b/ppmtomitsu.html new file mode 100644 index 00000000..48817344 --- /dev/null +++ b/ppmtomitsu.html @@ -0,0 +1,135 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtomitsu User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtomitsu</H1> +Updated: 29 Jan 1992 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtomitsu - convert a PPM image to a Mitsubishi S340-10 file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtomitsu</B> + +[-sharpness <I>val</I>] + +[<B>-enlarge</B> <I>val</I>] + +[<B>-media</B> <I>string</I>] + +[<B>-copy</B> <I>val</I>] + +[<B>-dpi300</B>] + +[<B>-tiny</B>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtomitsu</b> reads a PPM image as input and converts it into a +format suitable to be printed by a Mitsubishi S340-10 printer, or any +other Mitsubishi color sublimation printer. + +<P>The Mitsubishi S340-10 Color Sublimation printer supports 24bit +color. Images of the available sizes take so long to transfer that +there is a fast method, employing a lookuptable, that ppmtomitsu will +use if there is a maximum of 256 colors in the pixmap. ppmtomitsu +will try to position your image to the center of the paper, and will +rotate your image for you if xsize is larger than ysize. If your +image is larger than the media allows, ppmtomitsu will quit with an +error message. (We decided that the media were too expensive to have +careless users produce misprints.) Once data transmission has +started, the job can't be stopped in a sane way without resetting the +printer. The printer understands putting together images in the +printers memory; ppmtomitsu doesn't utilize this as pnmcat etc provide +the same functionality and let you view the result on-screen, too. +The S340-10 is the lowest common denominator printer; for higher +resolution printers there's the dpi300 option. The other printers also +support higher values for enlarge eg, but I don't think that's +essential enough to warrant a change in the program. + +<A NAME="options"> </A> +<h2>OPTIONS</h2> + +<DL COMPACT> +<DT><B>-sharpness</B> <I>1-4</I> + +<DD> +"sharpness" designation. Default is to use the current sharpness. + +<DT><B>-enlarge</B> <I>1-3</I> + +<DD> +Enlarge by a factor; Default is 1 (no enlarge) + +<DT><B>-media</B> {<B>A</B>|<B>A4</B>|<B>AS</B>|<B>A4S</B>} + +<DD> +Designate the media you're using. Default is 1184 x 1350, which will +fit on any media. A is 1216 x 1350, A4 is 1184 x 1452, AS is 1216 x +1650 and A4S is 1184 x 1754. A warning: If you specify a different +media than the printer currently has, the printer will wait until you +put in the correct media or switch it off. + +<DT><B>-copy</B> <I>1-9</I> + +<DD> +The number of copies to produce. Default is 1. + +<DT><B>-dpi300</B> + +<DD> +Double the number of allowed pixels for a S3600-30 Printer in S340-10 +compatibility mode. (The S3600-30 has 300 dpi). + +<DT><B>-tiny</B> + +<DD> +Memory-safing, but always slow. The printer will get the data +line-by-line in 24bit. It's probably a good idea to use this if your +machine starts paging a lot without this option. + +</DL> + +<A NAME="lbAE"> </A> +<H2>REFERENCES</H2> + +Mitsubishi Sublimation Full Color Printer S340-10 Specifications of +Parallel Interface LSP-F0232F + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmquant.html">pnmquant</A>, +<A HREF="pamscale.html">pamscale</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1992, 93 by S.Petra Zeidler, MPIfR Bonn, Germany. (<A +HREF="mailto:spz@specklec.mpifr-bonn.mpg.de">spz@specklec.mpifr-bonn.mpg.de</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAE">REFERENCES</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtompeg-par.gif b/ppmtompeg-par.gif new file mode 100644 index 00000000..dbaf615a --- /dev/null +++ b/ppmtompeg-par.gif Binary files differdiff --git a/ppmtompeg-snr.gif b/ppmtompeg-snr.gif new file mode 100644 index 00000000..551490ac --- /dev/null +++ b/ppmtompeg-snr.gif Binary files differdiff --git a/ppmtompeg.html b/ppmtompeg.html new file mode 100644 index 00000000..ccafd14f --- /dev/null +++ b/ppmtompeg.html @@ -0,0 +1,1291 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD> +<TITLE>Ppmtompeg User Manual</TITLE> +</HEAD> +<BODY> +<H1>Ppmtompeg</H1> +Updated: 23 July 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> +ppmtompeg - encode an MPEG-1 bitstream + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>ppmtompeg</B> +[<I>options</I>] +<I>parameter-file</I> + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>ppmtompeg</B> produces an MPEG-1 video stream. MPEG-1 is the +first great video compression method, and is what is used in Video CDs +(VCD). <b>ppmtompeg</b> originated in the year 1995. DVD uses a more +advanced method, MPEG-2. There is an even newer method called MPEG-4 +which is also called Divx. I don't know where one finds that used. + +<p>There's technically a difference between a compression method for +video and an actual file (stream) format for a movie, and I don't know +if it can be validly said that the format of the stream +<b>ppmtompeg</b> produces is MPEG-1. + +<p>Mencoder from the <a href="http://www.mplayerhq.hu">Mplayer +package</a> is probably superior for most video format generation +needs, if for no other reason than that it is more popular. + +<p>The programming library <a href="http://pm2v.free.fr"><b>PM2V</b></a> +generates MPEG-2 streams. + +<p>Use <a href="http://www.mplayerhq.hu">Mplayer</a> (not part of Netpbm) +to do the reverse conversion: to create a series of PNM files from an MPEG +stream. + +<p><i>param_file</i> is a parameter file which includes a list of +input files and other parameters. The file is described in detail +below. + +<P>To understand this program, you need to understand something about +the complex MPEG-1 format. One source of information about this +standard format is the section Introduction to MPEG in the<a +href="http://www.faqs.org/faqs/compression-faq">Compression FAQ</a>. + +<H2 id="options">OPTIONS</H2> + +<p>The <b>-gop</b>, <b>-combine_gops</b>, <b>-frames</b>, and +<b>-combine_frames</b> options are all exclusive. + +<DL COMPACT> +<DT><B>-stat stat_file</B> + +<DD>This option causes <b>ppmtompeg</b> to append the statistics that +it write to Standard Output to the file <I>stat_file</I> as well. The +statistics use the following abbreviations: bits per block (bpb), bits +per frame (bpf), seconds per frame (spf), and bits per second (bps). + +<p>These statistics include how many I, P, and B frames there were, +and information about compression and quality. + + +<DT><B>-quiet</b> <i>num_seconds</i> + +<DD> causes <b>ppmtompeg</b> not to report remaining time more often +than every <i>num_seconds</i> seconds (unless the time estimate rises, +which will happen near the beginning of the run). A negative value +tells <b>ppmtompeg</b> not to report at all. 0 is the default +(reports once after each frame). Note that the time remaining is an +estimate and does not take into account time to read in frames. + +<DT><B>-realquiet</B> <DD> causes <b>ppmtompeg</b> to run silently, +with the only screen output being errors. Particularly useful when +reading input from stdin. + +<DT> +<B>-no_frame_summary</B> + +<DD> This option prevents <b>ppmtompeg</b> from printing a summary +line for each frame + +<DT><B>-float_dct</B> + +<DD> forces <b>ppmtompeg</b> to use a more accurate, yet more +computationally expensive version of the DCT. + +<DT><B>-gop</b> <i>gop_num</i> +<DD> +causes <b>ppmtompeg</b> to encode only the numbered GOP (first GOP is 0). The +parameter file is the same as for normal usage. The output file will be +the normal output file with the suffix <b>.gop.</b><i>gop_num</i>. +<b>ppmtompeg</b> does not output any sequence information. + +<DT><B>-combine_gops</B> + +<DD> causes <b>ppmtompeg</b> simply to combine some GOP files into a +single MPEG output stream. <b>ppmtompeg</b> inserts a sequence header +and trailer. In this case, the parameter file needs only to contain +the SIZE value, an output file, and perhaps a list of input GOP +files (see below). + +If you don't supply a list of input GOP files is used, then +<b>ppmtompeg</b> assumes you're using the same parameter file you used +when you created the input (with the <b>-gop</b> option) and +calculates the corresponding gop filenames itself. If this is not the +case, you can specify input GOP files in the same manner as normal +input files -- except instead of using INPUT_DIR, INPUT, and +END_INPUT, use GOP_INPUT_DIR, GOP_INPUT, and GOP_END_INPUT. If no +input GOP files are specified, then the default is to use the output +file name with suffix <b>.gop.</b><i>gop_num</i>, with <i>gop_num</i> +starting from 0, as the input files. + +<p>Thus, unless you're mixing and matching GOP files from different +sources, you can simply use the same parameter file for creating the +GOP files (<b>-gop</b>) and for later turning them into an MPEG stream +(<b>-combine_gops</b>). + + +<DT><B>-frames <i>first_frame</i> <i>last_frame</i></B> + +<DD>This option causes <b>ppmtompeg</b> to encode only the frames numbered +<i>first_frame</i> to <i>last_frame</i>, inclusive. The parameter +file is the same as for normal usage. The output will be placed in +separate files, one per frame, with the file names being the normal +output file name with the suffix <b>.frame.</b><i>frame_num</i>. No +GOP header information is output. (Thus, the parameter file need not +include the GOP_SIZE value) + +<p>Use <b>ppmtompeg -combine_frames</b> to combine these frames later into +an MPEG stream. + + +<DT><B>-combine_frames</B> + +<DD> This option causes <b>ppmtompeg</b> simply to combine some +individual MPEG frames (such as you might have created with an earlier +run of <b>ppmtompeg -frames</b>) into a single MPEG stream. Sequence +and GOP headers are inserted appropriately. In this case, the +parameter file needs to contain only the SIZE value, the GOP_SIZE +value, an output file, and perhaps a list of frame files (see below). + +<p>The parameter file may specify input frame files in the same manner +as normal input files -- except instead of using INPUT_DIR, INPUT, and +END_INPUT, use FRAME_INPUT_DIR, FRAME_INPUT, and FRAME_END_INPUT. If +no input frame files are specified, then the default is to use the +output file name with suffix <b>.frame.</b><i>frame_num</i>, with +<i>frame_num</i> starting from 0, as the input files. + + + +<DT><B>-nice</B> + +<DD>This option causes <b>ppmtompeg</b> to run any remote processes +"nicely," i.e. at low priority. (This is relevant only if you are +running <b>ppmtompeg</b> in parallel mode. Otherwise, there are no +remote processes). See 'man nice.' + +<DT><B>-max_machines <i>num_machines</i></B> + +<DD>This option causes <b>ppmtompeg</b> to use no more than +<i>num_machines</i> machines as slaves for use in parallel encoding. + +<DT><B>-snr</B> + +<DD>This option causes <b>ppmtompeg</b> to include the signal-to-noise +ratio in the reported statistics. Prints SNR (Y U V) and peak SNR (Y +U V) for each frame. In summary, prints averages of luminance only +(Y). SNR is defined as 10*log(variance of original/variance of +error). Peak SNR is defined as 20*log(255/RMSE). Note that +<b>ppmtompeg</b> runs a little slower when you use this option. + +<DT><B>-mse</B> + +<DD>This option causes <b>ppmtompeg</b> to report the mean squared +error per block. It also automatically reports the quality of the +images, so there is no need to specify <b>-snr</b> then. + +<DT><B>-bit_rate_info</b> <i>rate_file</i> + +<DD> This option makes <b>ppmtompeg</b> write bit rate information +into the file <i>rate_file</i>. Bit rate information is bits per frame, and +also bits per I-frame-to-I-frame. + +<DT><B>-mv_histogram</B> + +<DD> This option causes <b>ppmtompeg</b> to print a histogram of the +motion vectors as part of statistics. There are three histograms -- +one for P frame, one for forward B frame, and one for backward B frame +motion vectors. + +<p>The output is in the form of a matrix, each entry corresponding to one +motion vector in the search window. The center of the matrix +represents (0,0) motion vectors. + +<dt><b>-debug_sockets</b> + +<dd>This option causes <b>ppmtompeg</b> to print to Standard Output +messages that narrate the communication between the machines when you run +<b>ppmtompeg</b> in <a href="#parallel">parallel mode</a>. + +<dt><b>-debug_machines</b> + +<dd>This option causes <b>ppmtompeg</b> to print to Standard Output +messages that narrate the progress of the conversion on the various +machines when you run <b>ppmtompeg</b> in <a href="#parallel">parallel +mode</a>. + +</DL> + +<H2 id="parmfile">PARAMETER FILE</H2> + +<P>The parameter file <strong>must</strong> contain the following +lines (except when using the <b>-combine_gops</b> or <b>-combine_frames</b> +options): + +<DL COMPACT> + +<DT><B>PATTERN</b> <i>pattern</i> + +<DD>This statement specifies the pattern (sequence) of I frames, P frames, +and B frames. <i>pattern</i> is just a sequence of the letters I, P, and +B with nothing between. Example: + +<pre> + PATTERN IBBPBBPBBPBBPBB +</pre> + +<p>See <a href="#ipb">I Frames, P Frames, B Frames</a>. + +<DT><B>OUTPUT</b> <i>output file</i> +<DD>This names the file where the output MPEG stream goes. + +<DT><B>INPUT_DIR</b> <i>directory</i> + +<DD>This statement tells where the input images (frames) come from. +If each frame is in a separate file, <i>directory</i> is the directory +where they all are. You may use <b>.</b> to refer to the current +directory. A null <i>directory</i> refers to the root directory of the +system file tree. + +<p>To have <b>ppmtompeg</b> read all the frames serially from Standard +Input, specify +<pre> + INPUT_DIR stdin +</pre> + +<DT><B>INPUT</b> +<DD> +This line must be followed by a list of the input files (in display order) +and then the line <B>END_INPUT</B>. + +<p>There are three types of lines between INPUT and END_INPUT. First, +a line may simply be the name of an input file. Second, the line +may be of the form <i>single_star_expr</i> +<b>[</b><i>x</i><b>-</b><i>y</i><b>]</b>. +<i>single_star_expr</i> can have a single <b>*</b> in it. It is +replaced by all the numbers between x and y inclusive. So, for +example, the line <b>tennis*.ppm [12-15]</b> refers to the files +tennis12.ppm, tennis13.ppm, tennis14.ppm, tennis15.ppm. + +<p>Uniform zero-padding occurs, as well. For example, the line +<b>football.*.ppm [001-130]</b> refers to the files football.001.ppm, +football.002.ppm, ..., football.009.ppm, football.010.ppm, ..., +football.130.ppm. + +<p>The third type of line is: <i>single_star_expr</i> +<b>[</b><i>x</i><b>-</b><i>y</i><b>+</b><i>s</i><b>]</b>, where the +line is treated exactly as above, except that we skip by <i>s</i>. Thus, the +line <b>football.*.ppm [001-130+4]</b> refers to the files +football.001.ppm, football.005.ppm, football.009.ppm, +football.013.ppm, etc. + +<p>Furthermore, a line may specify a shell command to execute to generate +lines to be interpreted as described above, as if those lines were in the +parameter file instead. Use back ticks, like in the +Bourne Shell, like this: + +<pre> + `cat myfilelist` +</pre> + +<p> +If input is from Standard Input (per the <b>INPUT_DIR</b> statement), +<b>ppmtompeg</b> ignores the <B>INPUT</b>/<b>END_INPUT</b> block, but +it still must be present. + +<DT><b>BASE_FILE_FORMAT</b> {<b>PPM</b> | <b>PNM</b> | <b>YUV</b> | + <b>JPEG</b> | <b>JMOVIE</b>} + +<DD><B>ppmtompeg</b> must convert all input files to one of the +following formats as a first step of processing: PNM, YUV, JPEG(v4), +or JMOVIE. (The conversion may be trivial if your input files are +already in one of these formats). This line specifies which of the +four formats. PPM is actually a subset of PNM. The separate +specification is allowed for backward compatibility. Use PNM instead +of PPM in new applications. + +<DT><b>INPUT_CONVERT</b> <i>conversion_command</i> + +<DD>You must specify how to convert a file to the base file format. +If no conversion is necessary, then you would just say: + + <pre> + INPUT_CONVERT * + </pre> + +<p>Otherwise, <i>conversion_command</i> is a shell command that causes +an image in the format your specified with <B>BASE_FILE_FORMAT</b> to +be written to Standard Output. <b>ppmtompeg</b> executes the command +once for each line between <b>INPUT</b> and <b>END_INPUT</b> (which is +normally, but not necessarily, a file name). In the conversion +command, <b>ppmtompeg</b> replaces each '*' with the contents of that +line. + + If you had a bunch of gif files, you might say: + <pre> + INPUT_CONVERT giftopnm * + </pre> + + If you have a bunch of separate a.Y, a.U, and a.V files (where + the U and V have already been subsampled), then you might say: + + <pre> + INPUT_CONVERT cat *.Y *.U *.V + </pre> + +<p>Input conversion is not allowed with input from stdin, so use + + <pre> + INPUT_CONVERT * + </pre> + +as described above. + +<DT><b>SIZE</b> <i>width</i><b>x</b><i>height</i> + +<dd> + +<p><i>width</i> and <i>height</i> are the width and height of each +frame in pixels. + +<p>When <b>ppmtompeg</b> can get this information from the input image +files, it ignores the <b>SIZE</b> parameter and you may omit it. + +<p>When the image files are in YUV format, the files don't contain +dimension information, so <b>SIZE</b> is required. + +<p>When <b>ppmtompeg</b> is running in parallel mode, not all of the +processes in the network have access to the image files, so +<b>SIZE</b> is required and must give the same dimensions as the +input image files. + +<DT><b>YUV_SIZE</b> <i>width</i><b>x</b><i>height</i> + +<dd>This is an obsolete synonym of <b>SIZE</b>. + +<DT><b>YUV_FORMAT</B> {<b>ABEKAS</b> | <b>PHILLIPS</b> | <b>UCB</B> | + <b>EYUV</b> | <i>pattern</i>} + +<DD>This is meaningful only when <b>BASE_FILE_FORMAT</b> specifies +YUV format, and then it is required. It specifies the sub-format of +the YUV class. + + +<DT><b>GOP_SIZE</b> <i>n</i> + +<DD><i>n</i> is the number of frames in a Group of Pictures. Except that +because a GOP must start with an I frame, <b>ppmtompeg</b> makes a GOP as +much longer than <i>n</i> as it has to to make the next GOP start with an +I frame. + +<p>Normally, it makes sense to make your GOP size a multiple of your +pattern length (the latter is determined by the PATTERN parameter file +statement). + +<p>See <a href="#gop">Group Of Pictures</a>. + +<DT><b>SLICES_PER_FRAME</b> <i>n</i> +<dd><i>n</i> is roughly the number of slices per frame. Note, at +least one MPEG player may complain if slices do not start at the left +side of an image. To ensure this does not happen, make sure the +number of rows is divisible by SLICES_PER_FRAME. + +<DT><b>PIXEL</b> {<b>FULL</b> | <b>HALF</b>} + +<dd>use half-pixel motion vectors, or just full-pixel ones It is +usually important that you use half-pixel motion vectors, because it +results in both better quality and better compression. + + +<DT><b>RANGE</b> <i>n</i> +<dd>Use a search range of <i>n</i> pixels in each of the four directions +from a subject pixel. (So the search window is a square <i>n</i>*2 pixels +on a side). + +<DT><b>PSEARCH_ALG</b> {<b>EXHAUSTIVE</B> | <b>TWOLEVEL</b> | + <b>SUBSAMPLE</b> | <b>LOGARITHMIC</b>} + +<dd>This statement tells <b>ppmtompeg</b> what kind of search + technique (algorithm) to use for P frames. You select the desired + combination of speed and compression. <b>EXHAUSTIVE</b> gives the + best compression, but <b>LOGARITHMIC</B> is the fastest. + <B>TWOLEVEL</B> is an exhaustive full-pixel search, followed by a + local half- pixel search around the best full-pixel vector (the + PIXEL option is ignored for this search technique). + +<DT><b>BSEARCH_ALG</b> {<b>SIMPLE</B> | <B>CROSS2</B> | <B>EXHAUSTIVE</B>} + +<dd>This statement tells <b>ppmtompeg</b> what kind of search + technique (algorithm) to use for B frames. <b>SIMPLE</B> means + find best forward and backward vectors, then interpolate. + <B>CROSS2</B> means find those two vectors, then see what backward + vector best matches the best forward vector, and vice versa. + <b>EXHAUSTIVE</b> does an n-squared search and is + <em>extremely</em> slow in relation to the others (<b>CROSS2</b> + is about half as fast as <b>SIMPLE</B>). + +<DT><b>IQSCALE</b> <i>n</i> +<dd>Use <i>n</i> as the qscale for I frames. + See <a href="#qscale">Qscale</a>. + +<DT><b>PQSCALE</b> <i>n</i> +<dd>Use <i>n</i> as the qscale for P frames. + See <a href="#qscale">Qscale</a>. + +<DT><b>BQSCALE</b> <i>n</i> +<dd>Use <i>n</i> as the qscale for B frames. + See <a href="#qscale">Qscale</a>. + +<DT><b>REFERENCE_FRAME</b> {<B>ORIGINAL</B> | <b>DECODED</b>} <dd>This +statement determines whether <b>ppmtompeg</b> uses the original images +or the decoded images when computing motion vectors. Using decoded +images is more accurate and should increase the playback quality of +the output, but it makes the encoding take longer and seems to give +worse compression. It also causes some complications with parallel +encoding. (see the section on parallel encoding). One thing you can +do as a trade-off is select <b>ORIGINAL</b> here, and lower the +qscale (see <b>QSCALE</b> if the quality is not good enough. + +<table border="1" cellpadding="5" cellspacing="0" +summary="comparison of original to decoded"> + <caption>Original or Decoded? (Normalized)</caption> +<?makeman r c c c c c. ?> +<?makeman _ ?> + <tr align="center" bgcolor="#CCCCCC"> + <th>Reference</th> + <th>Compression</th> + <th>Speed</th> + <th>Quality I</th> + <th>Quality P</th> + <th>Quality B</th> + </tr> + <tr> + <td align="right">Decoded</td> + <td align="center">1000</td> + <td align="center">1000</td> + <td align="center">1000</td> + <td align="center">969</td> + <td align="center">919</td> + </tr> + <tr> + <td align="right">Original</td> + <td align="center">885</td> + <td align="center">1373</td> + <td align="center">1000</td> + <td align="center">912</td> + <td align="center">884</td> + </tr> + </table> + + + +</dl> + +<p>The following lines are optional: + +<DL> + +<DT><B>FORCE_ENCODE_LAST_FRAME</B> + +<dd>This statement is obsolete. It does nothing. + +<p>Before Netpbm 10.26 (January 2005), <b>ppmtompeg</b> would drop +trailing B frames from your movie, since a movie can't end with a B +frame. (See <a href="#ipb">I Frames, P Frames, B Frames</a>. +You would have to specify <b>FORCE_ENCODE_LAST_FRAME</b> to stop +that from happening and get the same function that <b>ppmtompeg</b> +has today. + + +<DT><b>NIQTABLE</b> + +<dd>This statement specifies a custom non-intra quantization table. +If you don't specify this statement, <b>ppmtompeg</b> uses a default +non-intra quantization table. + +<p> +The 8 lines immediately following <b>NIQTABLE</b> specify the quantization +table. Each line defines a table row and consists of 8 integers, +whitespace-delimited, which define the table columns. + +<DT><B>IQTABLE</b> + +<dd>This is analogous to NIQTABLE, but for the intra quantization table. + +<DT><b>ASPECT_RATIO</b> <i>ratio</i> + +<dd>This statement specifies the aspect ratio for <b>ppmtompeg</b> to +specify in the MPEG output. I'm not sure what this is used for. + +<p><i>ratio</i> must be 1.0, 0.6735, 0.7031, 0.7615, 0.8055, 0.8437, +0.8935, 0.9157, 0.9815, 1.0255, 1.0695, 1.0950, 1.1575, or 1.2015. + +<DT><b>FRAME_RATE</b> <i>rate</i> +<dd>This specifies the frame rate for <b>ppmtompeg</b> to specify in the +MPEG output. Some players use this value to determine the playback rate. + +<p><i>rate</i> must be 23.976, 24, 25, 29.97, 30, 50, 59.94, or 60. + +<DT><b>BIT_RATE</b> <i>rate</i> +<DD>This specifies the bit rate for Constant Bit Rate (CBR) encoding. + +<p><i>rate</i> must be an integer. + +<DT><b>BUFFER_SIZE</b> <i>size</i> + +<dd>This specifies the value +<b>ppmtompeg</b> is to specify in the MPEG output for the Video +Buffering Verifier (VBV) buffer size needed to decode the sequence. + +<p>A Video Verifying Buffer is a buffer in which a decoder keeps the +decoded bits in order to match the uneven speed of the decoding with +the required constant playback speed. + +<p>As <b>ppmtompeg</b> encodes the image, it simulates the decoding +process in terms of how many bits would be in the VBV as each frame gets +decoded, assuming a VBV of the size you indicate. + +<P>If you specify the <b>WARN_VBV_UNDERFLOW</b> statement, +<b>ppmtompeg</b> issues a warning each time the simulation underflows +the buffer, which suggests that an underflow would occur on playback, +which suggests the buffer is too small. + +<P>If you specify the <b>WARN_VBV_OVERFLOW</b> statement, +<b>ppmtompeg</b> issues a warning each time the simulation overflows +the buffer, which suggests that an overflow would occur on playback, +which suggests the buffer is too small. + +<DT><B>WARN_VBV_UNDERFLOW</B> +<DT><B>WARN_VBV_OVERFLOW</B> + +<dd>See <b>BUFFER_SIZE</b>. + +<p>These options were new in Netpbm 10.26 (January 2005). Before that, +<b>ppmtompeg</b> issued the warnings always. + +</DL> + + +The following statements apply only to parallel operation: + +<DL> + +<DT><b>PARALLEL</b> + +<dd>This statement, paired with <b>END PARALLEL</B>, is what causes +<b>ppmtompeg</b> to operate in parallel mode. See <a +href="#parallel">Parallel Operation</a>. + +<dt><b>END PARALLEL</b> + +<DD>This goes with <b>PARALLEL</b>. + +<DT><b>PARALLEL_TEST_FRAMES</b> <i>n</i> + +<dd>The master starts off by measuring each slave's speed. It does +this by giving each slave <i>n</i> frames to encode and noting how +long the slave takes to finish. These are not just test frames, +though -- they're real frames and the results become part of the +output. +<b>ppmtompeg</b> is old and measures time in undivided seconds, so +to get useful timings, specify enough frames that it will take at +least 5 seconds to process them. The default is 10. + +<p>If you specify <b>FORCE_I_ALIGN</b>, <b>ppmtompeg</b> will increase +the test frames value enough to maintain the alignment. + +<p>If there aren't enough frames for every slave to have the indicated +number of test frames, <b>ppmtompeg</b> will give some slaves fewer. + + +<DT><b>PARALLEL_TIME_CHUNKS</b> <i>t</i> + +<dd>When you specify this statement, the master attempts to feed work +to the slaves in chunks that take <i>t</i> seconds to process. It uses +the speed measurement it made when it started up (see PARALLEL_TEST_FRAMES) +to decide how many frames to put in the chunk. This statement obviously +doesn't affect the first batch of work sent to each slave, which is the +one used to measure the slave's speed. + +<p>Smaller values of <i>t</i> increase communication, but improve load +balancing. The default is 30 seconds. + +<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + +<DT><b>PARALLEL_CHUNK_TAPER</b> + +<DD>When you specify this statement, the master distributes work like +with PARALLEL_TIME_CHUNKS, except that the master chooses the number +of seconds for the chunks. It starts with a large number and, as it +gets closer to finishing the job, reduces it. That way, it reduces +scheduling overhead when precise scheduling isn't helpful, but still +prevents a slave from finishing early after all the work has already +been handed out to the other slaves, and then sitting idle while +there's still work to do. + +<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + + +<DT><b>PARALLEL_PERFECT</b> + +<dd>If this statement is present, <b>ppmtompeg</b> schedules on the +assumption that each machine is about the same speed. The master will +simply divide up the frames evenly between the slaves -- each +slave gets the same number of frames. If some slaves are faster than +others, they will finish first and remain idle while the slower slaves +continue. + +<p>This has the advantage of minimal scheduling overhead. Where slaves +have different speeds, though, it makes inefficient use of the fast +ones. Where slaves are the same speed, it also has the disadvantage +that they all finish at the same time and feed their output to the +single Combine Server in a burst, which makes less efficient use of +the Combine Server and thus can increase the total elapsed time. + +<p>You may specify only one of PARALLEL_TIME_CHUNKS, PARALLEL_CHUNK_TAPER, +and PARALLEL_PERFECT. PARALLEL_CHUNK_TAPER is usually best. + +<DT><b>RSH</b> <i>remote_shell_command</i> + +<DD><b>ppmtompeg</b> executes the shell command +<i>remote_shell_command</i> to start a process on another machine. +The default command is <b>rsh</b>, and whatever command you specify +must have compatible semantics. <b>ssh</b> is usually compatible. +The command <b>ppmtompeg</b> uses is one like this: +<b>ssh remote.host.com -l username shellcommand</b>. + +<p>Be sure to set up <b>.rhosts</b> files or SSH key authorizations +where needed. Otherwise, you'll have to type in passwords. + +<p>On some HP machines, <b>rsh</b> is the restricted shell, and you want +to specify <b>remsh</b>. + +<DT><b>FORCE_I_ALIGN</b> + +<dd>This statement forces each slave to encode a chunk of frames which +is a multiple of the pattern length (see <b>PATTERN</b>). Since the +first frame in any pattern is an I frame, this forces each chunk +encoded by a slave to begin with an I frame. + +<p>This document used to say there was an argument to +<b>FORCE_I_ALIGN</b> which was the number of frames <b>ppmtompeg</b> +would use (and was required to be a multiple of the pattern length). +But <b>ppmtompeg</b> has apparently always ignored that argument, and +it does now. + +<DT><B>KEEP_TEMP_FILES</B> + +<dd>This statement causes <b>ppmtompeg</b> not to delete the temporary +files it uses to transmit encoded frames to the combine server. This +means you will be left with a file for each frame, the same as you +would get with the <b>-frames</b> option. + +<p>This is mostly useful for debugging. + +<p>This works only if you're using a shared filesystem to communicate +between the servers. + +<p>This option was new in Netpbm 10.26 (January 2005). + +</DL> + + +<H3>Parameter File Notes</h3> + +<P> If you use the <b>-combine_gops</b> option, then you need to specify +only the SIZE and OUTPUT values in the parameter file. In +addition, the parameter file may specify input GOP files in the same +manner as normal input files -- except instead of using INPUT_DIR, +INPUT, and END_INPUT, use GOP_INPUT_DIR, GOP_INPUT, and GOP_END_INPUT. +If you specify no input GOP files, then <b>ppmtompeg</b> uses by default the +output file name with suffix <b>.gop.</b><i>gop_num</i>, with <i>gop_num</i> +starting from 0, as the input files. + +<p>If you use the <b>-combine_frames</b> option, then you need to +specify only the SIZE, GOP_SIZE, and OUTPUT values in the +parameter file. In addition, the parameter file may specify input +frame files in the same manner as normal input files -- except instead +of using INPUT_DIR, INPUT, and END_INPUT, use FRAME_INPUT_DIR, +FRAME_INPUT, and FRAME_END_INPUT. If no input frame files are +specified, then the default is to use the output file name with suffix +<b>.frame.</b><i>frame_num</i>, with <i>frame_num</i> starting from 0, +as the input files. + +<p>Any number of spaces and tabs may come between each option and value. Lines +beginning with <b>#</b> are ignored. Any other lines are ignored except for +those between INPUT and END_INPUT. This allows you to use the same +parameter file for normal usage and for <b>-combine_gops</b> and +<b>-combine_frames</b>. + +<P>The file format is case-sensitive so all keywords should be in +upper case. + +<P>The statements may appear in any order, except that the order within +a block statement (such as INPUT ... END INPUT) is significant. + +<P><b>ppmtompeg</b> is prepared to handle up to 16 B frames between +reference frames when encoding with input from stdin. (To build a +modified <b>ppmtompeg</b> with a higher limit, change the constant +B_FRAME_RUN in frame.c and recompile). + +<H2 id="general">GENERAL USAGE INFORMATION</H2> + +<H3 id="qscale">Qscale</h3> + +<p>The quantization scale values (qscale) give a trade-off between +quality and compression. Using different Qscale values has very little +effect on speed. The qscale values can be set separately for I, P, and +B frames. + +<p>You select the qscale values with the <B>IQSCALE</b>, +<b>PQSCALE</b>, and <b>BSCALE</b> parameter file statements. + +<p>A qscale value is an integer from 1 to 31. Larger numbers give +better compression, but worse quality. In the following, the quality +numbers are peak signal-to-noise ratio, defined as: +<img src="ppmtompeg-snr.gif" alt="signal-to-noise formula" height="52" width="302"> +where MSE is the mean squared error. + + +<p>Flower garden tests: + +<table border="1" cellpadding="5" cellspacing="0" summary="Qscale vs Quality"> + <caption>Qscale vs Quality</caption> +<?makeman r r r r. ?> +<?makeman _ ?> + <tr align="center"> + <th>Qscale</th> + <th>I Frames</th> + <th>P Frames</th> + <th>B Frames</th> + </tr> + <tr> + <td align="right">1</td> + <td align="right">43.2</td> + <td align="right">46.3</td> + <td align="right">46.5</td> + </tr> + <tr> + <td align="right">6</td> + <td align="right">32.6</td> + <td align="right">34.6</td> + <td align="right">34.3</td> + </tr> + <tr> + <td align="right">11</td> + <td align="right">28.6</td> + <td align="right">29.5</td> + <td align="right">30.0</td> + </tr> + <tr> + <td align="right">16</td> + <td align="right">26.3</td> + <td align="right">26.8</td> + <td align="right">28.6</td> + </tr> + <tr> + <td align="right">21</td> + <td align="right">24.7</td> + <td align="right">25.0</td> + <td align="right">27.9</td> + </tr> + <tr> + <td align="right">26</td> + <td align="right">23.5</td> + <td align="right">23.9</td> + <td align="right">27.5</td> + </tr> + <tr> + <td align="right">31</td> + <td align="right">22.6</td> + <td align="right">23.0</td> + <td align="right">27.3</td> + </tr> +</table> + +<table border="1" cellpadding="5" cellspacing="0" +summary="Qscale vs Compression"> + <caption>Qscale vs Compression</caption> +<?makeman r r r r. ?> +<?makeman _ ?> + <tr align="center"> + <th>Qscale</th> + <th>I Frames</th> + <th>P Frames</th> + <th>B Frames</th> + </tr> + <tr> + <td align="right">1</td> + <td align="right">2</td> + <td align="right">2</td> + <td align="right">2</td> + </tr> + <tr> + <td align="right">6</td> + <td align="right">7</td> + <td align="right">10</td> + <td align="right">15</td> + </tr> + <tr> + <td align="right">11</td> + <td align="right">11</td> + <td align="right">18</td> + <td align="right">43</td> + </tr> + <tr> + <td align="right">16</td> + <td align="right">15</td> + <td align="right">29</td> + <td align="right">97</td> + </tr> + <tr> + <td align="right">21</td> + <td align="right">19</td> + <td align="right">41</td> + <td align="right">173</td> + </tr> + <tr> + <td align="right">26</td> + <td align="right">24</td> + <td align="right">56</td> + <td align="right">256</td> + </tr> + <tr> + <td align="right">31</td> + <td align="right">28</td> + <td align="right">73</td> + <td align="right">330</td> + </tr> +</table> + + +<h3>Search Techniques</h3> + +<p>There are several different motion vector search techniques +available. There are different techniques available for P frame +search and B frame search. Using different search techniques present +little difference in quality, but a large difference in compression +and speed. + +<p>There are 4 types of P frame search: Exhaustive, TwoLevel, +SubSample, and Logarithmic. + +<p>There are 3 types of B frame search: Exhaustive, Cross2, and +Simple. + +The recommended search techniques are TwoLevel and Logarithmic for +P frame search, and Cross2 and Simple for B frame search. Here are +some numbers comparing the different search methods: + +<table border="1" cellpadding="5" cellspacing="0" +summary="P frame motion vector search"> + <caption>P frame Motion Vector Search (Normalized)</caption> +<?makeman r c c c. ?> +<?makeman _ ?> + <tr align="center"> + <th>Technique</th> + <th>Compression<a href="#smallbetter"><sup>1</sup></a></th> + <th>Speed <a href="#largefaster"><sup>2</sup></a></th> + <th>Quality <a href="#largebetter"><sup>3</sup></a></th> + </tr> + <tr> + <td align="right">Exhaustive</td> + <td align="center">1000</td> + <td align="center">1000</td> + <td align="center">1000</td> + </tr> + <tr> + <td align="right">SubSample</td> + <td align="center">1008</td> + <td align="center">2456</td> + <td align="center">1000</td> + </tr> + <tr> + <td align="right">TwoLevel</td> + <td align="center">1009</td> + <td align="center">3237</td> + <td align="center">1000</td> + </tr> + <tr> + <td align="right">Logarithmic</td> + <td align="center">1085</td> + <td align="center">8229</td> + <td align="center">998</td> + </tr> +</table> + +<table border="1" cellpadding="5" cellspacing="0" +summary="B frame motion vector search"> + <caption>B frame Motion Vector Search (Normalized)</caption> +<?makeman r c c c. ?> +<?makeman _ ?> + <tr align="center"> + <th>Technique</th> + <th>Compression<a href="#smallbetter"><sup>1</sup></a></th> + <th>Speed<a href="#largefaster"><sup>2</sup></a></th> + <th>Quality<a href="#largebetter"><sup>3</sup></a></th> + </tr> + <tr> + <td align="right">Exhaustive</td> + <td align="center">1000</td> + <td align="center">1000</td> + <td align="center">1000</td> + </tr> + <tr> + <td align="right">Cross2</td> + <td align="center">975</td> + <td align="center">1000</td> + <td align="center">996</td> + </tr> + <tr> + <td align="right">Simple</td> + <td align="center">938</td> + <td align="center">1765</td> + <td align="center">991</td> + </tr> +</table> + +<a name="smallbetter"> </a><sup>1</sup>Smaller numbers are better +compression. + +<a name="largefaster"> </a><sup>2</sup>Larger numbers mean faster +execution. + +<a name="largebetter"> </a><sup>3</sup>Larger numbers mean better quality. + +<p>For some reason, Simple seems to give better compression, but it +depends on the image sequence. + +<p>Select the search techniques with the <B>PSEARCH_ALG</B> and +<B>BSEARCH_ALG</b> parameter file statements. + + +<a name="gop"></a> +<h3>Group Of Pictures (GOP)</h3> + +<p>A Group of Pictures (GOP) is a roughly independently decodable +sequence of frames. An MPEG video stream is made of one or more +GOP's. You may specify how many frames should be in each GOP with the +<b>GOP_SIZE</b> parameter file statement. A GOP always starts with an +I frame. + +<p>Instead of encoding an entire sequence, you can encode a single +GOP. To do this, use the <b>-gop</b> command option. You can later +join the resulting GOP files at any time by running <b>ppmtompeg</b> +with the <b>-combine_gops</b> command option. + + +<h3>Slices</h3> + +<p>A slice is an independently decodable unit in a frame. It can be +as small as one macroblock, or it can be as big as the entire frame. +Barring transmission error, adding slices does not change quality or +speed; the only effect is slightly worse compression. More slices are +used for noisy transmission so that errors are more recoverable. Since +usually errors are not such a problem, we usually just use one slice +per frame. + +<p>Control the slice size with the <B>SLICES_PER_FRAME</B> parameter +file statement. + +<p>Some MPEG playback systems require that each slice consist of whole +rows of macroblocks. If you are encoding for this kind of player, if +the height of the image is H pixels, then you should set the +SLICES_PER_FRAME to some number which divides H/16. For example, if +the image is 240 pixels (15 macroblocks) high, then you should use +only 15, 5, 3, or 1 slices per frame. + +<p>Note: these MPEG playback systems are really wrong, since the MPEG +standard says this doesn't have to be so. + + + +<h3>Search Window</h3> + +<p>The search window is the window in which <b>ppmtompeg</b> searches +for motion vectors. The window is a square. You can specify the size +of the square, and whether to allow half-pixel motion vectors or not, +with the <b>RANGE</b> and <b>PIXEL</B> parameter file statements. + +<h3 id="ipb">I Frames, P Frames, B Frames</h3> + +<p>In MPEG-1, a movie is represented as a sequence of MPEG frames, +each of which is an I Frame, a P Frame, or a B Frame. Each represents +an actual frame of the movie (don't get confused by the dual use of +the word "frame." A movie frame is a graphical image. An MPEG frame +is a set of data that describes a movie frame). + +<p>An I frame ("intra" frame) describes a movie frame in isolation -- +without respect to any other frame in the movie. A P frame +("predictive" frame) describes a movie frame by describing how it +differs from the movie frame described by the latest preceding I or +P frame. A B frame ("bidirectional" frame) describes a movie frame by +describing how it differs from the the movie frames described by the +nearest I or P frame before <em>and</em> after it. + +<p>Note that the first frame of a movie must be described by an I +frame (because there is no previous movie frame) and the last movie +frame must be described by an I or P frame (because there is no +subsequent movie frame). + +<p>Beyond that, you can choose which frames are represented by which +types. You specify a pattern, such as IBPBP and <b>ppmtompeg</b> +simply repeats it over and over throughout the movie. The pattern +affects speed, quality, and stream size. Here is a chart which shows +some of the trade-offs: + +<table border="1" cellpadding="5" cellspacing="0" +summary="Comparison of I/P/B Frames"> + <caption>Comparison of I/P/B Frames (Normalized)</caption> +<?makeman r c c c. ?> +<?makeman _ ?> + <tr align="center"> + <th>Frame Type</th> + <th>Size</th> + <th>Speed</th> + <th>Quality</th> + </tr> + <tr> + <td align="right">I frames</td> + <td align="center">1000</td> + <td align="center">1000</td> + <td align="center">1000</td> + </tr> + <tr> + <td align="right">P frames</td> + <td align="center">409</td> + <td align="center">609</td> + <td align="center">969</td> + </tr> + <tr> + <td align="right">B frames</td> + <td align="center">72</td> + <td align="center">260</td> + <td align="center">919</td> + </tr> + </table> + +(this is with constant qscale) + +<p>A standard sequence is IBBPBBPBBPBBPBB. + +<p>Select the sequence with the <B>PATTERN</B> parameter file statement. + +<p>Since the last MPEG frame cannot be a B frame (see above), if the +pattern you specify indicates B frames for the last movie frames, +<b>ppmtompeg</b> makes it an I frame instead. + +<p>Before Netpbm 10.26 (January 2005), <b>ppmtompeg</b> instead drops +the trailing B frames by default, and you need the +<b>FORCE_ENCODE_LAST_FRAME</b> parameter file statement to make it do +this. + +<p>The MPEG frames don't appear in the MPEG-1 stream in the same order that +the corresponding movie frames appear in the movie -- the B frames come after +the I and P frames on which they are based. For example, if the movie is +4 frames that you will represent with the pattern IBBP, the MPEG-1 stream +will start with an I frame describing movie frame 0. The next frame in +the MPEG-1 stream is a P frame describing movie frame 3. The last two +frames in the MPEG-1 stream are B frames describing movie frames 1 and 2, +respectively. + + +<h3>Specifying Input and Output Files</h3> + +<p>Specify the input frame images with the <B>INPUT_DIR</B>, +<B>INPUT</B>, <B>END_INPUT</B>, <B>BASE_FILE_FORMAT</B>, +<B>SIZE</B>, <B>YUV_FORMAT</B> and <b>INPUT_CONVERT</B> parameter +file statements. + +<p>Specify the output file with the <b>OUTPUT</b> parameter file statement. + + +<h3>Statistics</h3> + +<p><b>ppmtompeg</b> can generate a variety of statistics about the +encoding. See the <b>-stat</b>, <b>-snr</b>, <b>-mv_histogram</b>, +<b>-quiet</b>, <b>-no_frame_summary</b>, and <b>-bit_rate_info</b> +options. + + +<H2 id="parallel">PARALLEL OPERATION</H2> + +<P>You can run <b>ppmtompeg</b> on multiple machines at once, encoding +the same MPEG stream. When you do, the machines are used as shown in +the following diagram. We call this "parallel mode." + +<p><img src="ppmtompeg-par.gif" alt="ppmtompeg-par.gif"> + +<p>To do parallel processing, put the statement + +<pre> + PARALLEL +</pre> + +in the parameter file, followed by a listing of the machines, one +machine per line, then + +<pre> + END_PARALLEL +</pre> + +Each of the machine lines must be in one of two forms. If the machine +has filesystem access to the input files, then the line is: + +<p> +<i>machine</i> <i>user</i> <i>executable</i> + +<P>The executable is normally <b>ppmtompeg</b> (you may need to give +the complete path if you've built for different architectures). If +the machine does not have filesystem access to the input files, the line +is: + +<P><b>REMOTE</b> <i>machine</i> <i>user</i> <i>executable</i> +<i>parameter file</i> + +<p>The <b>-max_machines</b> command option limits the number of +machines <b>ppmtompeg</b> will use. If you specify more machines in +the parameter file than <b>-max_machines</b> allows, <b>ppmtompeg</b> +uses only the machines listed first. This is handy if you want to +experiment with different amounts of parallelism. + +<p>In general, you should use full path file names when describing +executables and parameter files. This <em>includes</em> the parameter +file argument on the original invocation of <b>ppmtompeg</b>. + +<p>All file names must be the same on all systems (so if e.g. you're +using an NFS filesystem, you must make sure it is mounted at the same +mountpoint on all systems). + +<P>Because not all of the processes involved in parallel operation +have easy access to the input files, you must specify the <B>SIZE</B> +parameter file statement when you do parallel operation. + +<p>The machine on which you originally invoke <b>ppmtompeg</b> is the +master machine. It hosts a "combine server,", a +"decode server," and a number of "i/o servers," +all as separate processes. The other machines in the network (listed +in the parameter file) are slave machines. Each hosts a single +process that continuously requests work from the master and does it. +The slave process does the computation to encode MPEG frames. It +processes frames in batches identified by the master. + +<p>The master uses a remote shell command to start a process on a +slave machine. By default, it uses an <b>rsh</b> shell command to do +this. But use the <b>RSH</b> parameter file statement to control +this. The shell command the master executes remotely is +<b>ppmtompeg</b>, but with options to indicate that it is to perform +slave functions. + +<p>The various machines talk to each other over TCP connections. Each +machine finds and binds to a free TCP port number and tells its +partners the port number. These port numbers are at least 2048. + +<p>Use the PARALLEL_TEST_FRAMES, PARALLEL_TIME_CHUNKS, and +PARALLEL_PERFECT parameter file statements to control the way the +master divides up work among the slaves. + +<p>Use the <b>-nice</b> command option to cause all slave processes to run +"nicely," i.e. as low priority processes. That way, this substantial and +long-running CPU load will have minimal impact on other, possibly +interactive, users of the systems. + +<A NAME="speed"> </A> +<H2>SPEED</h2> + +<p>Here is a look at <b>ppmtompeg</b> speed, in single-node (not parallel) +operation: + +<table border="1" cellpadding="5" cellspacing="0" summary="Compression speed"> + <caption>Compression Speed</caption> +<?makeman r c. ?> +<?makeman _ ?> + <tr align="center"> + <th>Machine Type</th> + <th>Macroblocks per second<sup>1</sup></th> + </tr> + <tr> + <td align="right">HP 9000/755</td> + <td align="center">280</td> + </tr> + <tr> + <td align="right">DEC 3000/400</td> + <td align="center">247</td> + </tr> + <tr> + <td align="right">HP 9000/750</td> + <td align="center">191</td> + </tr> + <tr> + <td align="right">Sparc 10</td> + <td align="center">104</td> + </tr> + <tr> + <td align="right">DEC 5000</td> + <td align="center">68</td> + </tr> +</table> +<sup>1</sup>A macroblock is a 16x16 pixel square + +<p>The measurements in the table are with inputs and outputs via a +conventional locally attached filesystem. If you are using a network +filesystem over a single 10 MB/s Ethernet, that constrains your speed more +than your CPU speed. In that case, don't expect to get better than 4 +or 5 frames per second no matter how fast your CPUs are. + +<p>Network speed is even more of a bottleneck when the slaves do not +have filesystem access to the input files -- i.e. you declare them +REMOTE. + +<p>Where I/O is the bottleneck, size of the input frames can make a big +difference. So YUV input is better than PPM, and JPEG is better than +both. + +<p>When you're first trying to get parallel mode working, be sure to +use the <b>-debug_machines</b> option so you can see what's going on. +Also, <b>-debug_sockets</b> can help you diagnose communication +problems. + + +<H2 id="authors">AUTHORS</H2> + +<UL> + +<LI>Kevin Gong - University of California, Berkeley, <A +HREF="mailto:keving@cs.berkeley.edu">keving@cs.berkeley.edu</A> + +<LI>Ketan Patel - University of California, Berkeley, <A +HREF="mailto:kpatel@cs.berkeley.edu">kpatel@cs.berkeley.edu</A> + +<LI>Dan Wallach - University of California, Berkeley, <A +HREF="mailto:dwallach@cs.berkeley.edu">dwallach@cs.berkeley.edu</A> + +<LI>Darryl Brown - University of California, Berkeley, <A +HREF="mailto:darryl@cs.berkeley.edu">darryl@cs.berkeley.edu</A> + +<LI>Eugene Hung - University of California, Berkeley, <A +HREF="mailto:eyhung@cs.berkeley.edu">eyhung@cs.berkeley.edu</A> + +<LI>Steve Smoot - University of California, Berkeley, <A +HREF="mailto:smoot@cs.berkeley.edu">smoot@cs.berkeley.edu</A> + +</UL> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A></LI> +<LI><A HREF="#description">DESCRIPTION</A></LI> +<LI><A HREF="#options">OPTIONS</A></LI> +<LI><A HREF="#parmfile">PARAMETER FILE</A></LI> +<LI><A HREF="#general">GENERAL USAGE INFORMATION</A></LI> +<LI><A HREF="#parallel">PARALLEL OPERATION</A></LI> +<LI><A HREF="#speed">SPEED</A></LI> +<LI><A HREF="#authors">AUTHORS</A></LI> +</UL> +</BODY> +</HTML> diff --git a/ppmtoneo.html b/ppmtoneo.html new file mode 100644 index 00000000..68b123b1 --- /dev/null +++ b/ppmtoneo.html @@ -0,0 +1,55 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoneo User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoneo</H1> +Updated: 24 April 2001 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoneo - convert a PPM into an Atari Neochrome .neo file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoneo</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoneo</b> reads a PPM image as input and produces an Atari +Neochrome .neo file as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="neotoppm.html">neotoppm</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2001 by Teemu Hukkanen <<A +HREF="mailto:tjhukkan@iki.fi">tjhukkan@iki.fi</A>>, based on +ppmtopi1 by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopcx.html b/ppmtopcx.html new file mode 100644 index 00000000..5ab9223e --- /dev/null +++ b/ppmtopcx.html @@ -0,0 +1,205 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopcx User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtopcx</H1> +Updated: 27 March 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopcx - convert a PPM image to a PCX file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopcx</B> + +[<B>-24bit</B>] + +[<B>-8bit</B>] + +[<B>-packed</B>] + +[<B>-stdpalette</b>] + +[<B>-palette=</b><i>palettefile</i>] + +[<B>-planes=</b><i>planes</i>] + +[<B>-xpos=</B><I>cols</I>] + +[<B>-ypos=</B><I>rows</I>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopcx</b> reads a PPM image as input and produces a PCX file +as output. The type of the PCX file depends on the number of colors +in the pixmap: + +<DL COMPACT> +<DT>16 colors or fewer: + +<DD>1 bit/pixel, 1-4 planes. + +<DT>more than 16 colors, but no more than 256: + +<DD>8 bits/pixel, 1 plane, colormap at the end of the file. + +<DT>More than 256 colors: + +<DD>24bit truecolor file (8 bits/pixel, 3 planes). + +</DL> + +<p>You can override some of that and explicitly choose the format with +the options below. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-24bit</B> + +<DD>Produce a 24bit truecolor PCX file, even if the image has 256 +colors or fewer. + +<DT><B>-8bit</B> + +<DD>Produce an 8bit (256 colors) PCX file, even if the image has 16 +colors or fewer. + +<p>This option was added in Netpbm 10.18 (August 2003). + +<DT><B>-packed</B> + +<DD>Use "packed pixel" format for files with 16 colors or +fewer: 1, 2, or 4 bits/pixel, 1 plane. + +<DT><B>-stdpalette</B> + +<DD>Instead of computing a palette from the colors in the image, use +a standard, built-in 16 color palette. If the image contains a color +that is not in the standard palette, <b>ppmtopcx</b> fails. + +<p>The standard palette is not only a set of colors, but a specific +mapping of palette indexes to colors. E.g. red is 4. + +<p>You can use <b>pnmremap</b> with a suitable PPM image of the standard +palette to adapt your image to use exactly those colors in the palette +so that <b>ppmtopcx -stdpalette</b> will work on it. + +<p>The file <b>pcxstd.ppm</b>, part of Netpbm, contains the standard +palette. + +<p>Although the PCX header tells exactly what palette is used in the +file, some older PCX interpreters do not use that information. They +instead assume the standard palette. If you don't use the +<b>-stdpalette</b> option, <b>ppmtopcx</b>, <b>ppmtopcx</b> may create +an image that uses a different palette (a rearrangement of the same +colors) and then one of these older interpreters would interpret the +colors in the image wrong. + +<p>You cannot specify this option along with <b>-palette</b>. + +<p>This option was new in Netpbm 10.22 (April 2004). + +<dt><b>-palette=</b><i>palettefile</i> + +<dd>Instead of computing the palette from the colors in the image, use +the palette from the file <i>palettefile</i>. If the palette contains +a color that is not in that palette, <b>ppmtopcx</b> fails. + +<p>The palette file must be a PPM image that contains one pixel for +each color in the palette. It doesn't matter what the aspect ratio +of the palette image is. The order of the colors in the PCX palette +is the order of the pixels in the PPM image in standard western +reading order (left to right, top to bottom). If there is a duplicate +color in the palette, <b>ppmtopcx</b> chooses between them arbitrarily +in building the PCX raster. + +<p>You would need this only if you have a PCX reader that can't read +the palette that is in the PCX file and instead assumes some particular +palette. See also the <b>-stdpalette</b> option. + +<p>If your input image might contain colors other than those in your +palette, you can convert the input image to one that contains only +those colors in your palette with <b>pnmremap</b>. + +<p>You cannot specify this along with <b>-stdpalette</b>. + +<p>This option was new in Netpbhm 10.25 (October 2004). + +<DT><B>-planes=</b><i>planes</i> + +<DD>Generate a PCX file with <i>planes</i> planes, even though the number +of colors in the image could be represented in fewer. This makes the file +larger, but some PCX interpreters are capable of processing only certain +numbers of planes. + +<p>This is meaningful only when <b>ppmtopcx</B> generates an image in +the 16 color palette format without packed pixels. Consequently, you +cannot specify this option together with <b>-24bit</b> or +<b>-8bit</b> or <b>-packed</b>. + +<p>The valid values for <i>planes</i> are 1, 2, 3, and 4. By default, +<b>ppmtopcx</b> chooses the smallest number of planes that can represent +the colors in the image. E.g. if there are 5 colors, <b>ppmtopcx</b> +chooses 3 planes. + +<p>This option was new in Netpbm 10.21 (March 2004). + +<DT><B>-xpos=</B><I>cols</I> + +<DT><B>-ypos=</B><I>rows</I> + +<DD> These options set the position of the image in some field +(e.g. on a screen) in columns to the right of the left edge and rows +below the top edge. The PCX format contains image position +information. Don't confuse this with the position of an area of +interest within the image. For example, using <B>pnmpad</B> to add a +10 pixel left border to an image and then converting that image to PCX +with xpos = 0 is not the same as converting the original image to PCX +and setting xpos = 10. + +<P>The values may be from -32767 to 32768. + +<P>The default for each is zero. + +</DL> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pcxtoppm.html">pcxtoppm</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1994 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + +<p>Based on previous work by Michael Davidson. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopgm.html b/ppmtopgm.html new file mode 100644 index 00000000..b7e59394 --- /dev/null +++ b/ppmtopgm.html @@ -0,0 +1,78 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopgm User Manual</TITLE> +</HEAD><BODY> +<H1>ppmtopgm</H1> +Updated: 10 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopgm - convert a PPM image to a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopgm</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopgm</b> reads a PPM as input and produces a PGM as output. +The output is a "black and white" rendering of the original +image, as in a black and white photograph. The quantization formula +<b>ppmtopgm</b> uses is g = .299 r + .587 g + .114 b. + +<P>Note that although there is a <B>pgmtoppm</B> program, it is not +necessary for simple conversions from pgm to ppm , because any ppm +program can read pgm (and pbm ) files automatically. <B>pgmtoppm</B> +is for colorizing a pgm file. Also, see <B>ppmtorgb3</B> for a +different way of converting color to gray. And <B>ppmdist</B> +generates a grayscale image from a color image, but in a way that +makes it easy to differentiate the original colors, not necessarily a +way that looks like a black and white photograph. + +<A NAME="lbAE"> </A> +<H2>QUOTE</H2> + +<PRE> +Cold-hearted orb that rules the night +Removes the colors from our sight +Red is gray, and yellow white +But we decide which is right +And which is a quantization error. +</PRE> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>, +<B><A HREF="ppmtorgb3.html">ppmtorgb3</A></B>, +<B><A HREF="rgb3toppm.html">rgb3toppm</A></B>, +<B><A HREF="ppmdist.html">ppmdist</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, +<B><A HREF="pgm.html">pgm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">QUOTE</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopi1.html b/ppmtopi1.html new file mode 100644 index 00000000..06f6fb73 --- /dev/null +++ b/ppmtopi1.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopi1 Use Manual</TITLE></HEAD> +<BODY> +<H1>ppmtopi1</H1> +Updated: 19 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopi1 - convert a PPM image into an Atari Degas .pi1 file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopi1</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopi1</b> reads a PPM image as input and produces an Atari +Degas .pi1 file as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pi1toppm.html">pi1toppm</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="pbmtopi3.html">pbmtopi3</A>, +<A HREF="pi3topbm.html">pi3topbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopict.html b/ppmtopict.html new file mode 100644 index 00000000..09eec70a --- /dev/null +++ b/ppmtopict.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopict User Manual</TITLE></HEAD><BODY> +<H1>ppmtopict</H1> +Updated: 15 April 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopict - convert a PPM image to a Macintosh PICT file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopict</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopict</b> reads a PPM image as input and produces a +Macintosh PICT file as output. + +<P> +The generated file is only the data fork of a picture. You will need +a program such as <I>mcvert</I> to generate a Macbinary or a BinHex +file that contains the necessary information to identify the file as a +PICT file to MacOS. + +<P>Even though PICT supports 2 and 4 bits per pixel, <b>ppmtopict</b> +always generates an 8 bits per pixel file. + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +<p>The picture size field is correct only if the output is to a file +since writing into this field requires seeking backwards on a file. +However the PICT documentation seems to suggest that this field is not +critical anyway since it is only the lower 16 bits of the picture +size. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="picttoppm.html">picttoppm</A>, +<A HREF="ppm.html">ppm</A>, +<b>mcvert</b> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1990 by Ken Yap <<A +HREF="mailto:ken@cs.rocester.edu">ken@cs.rocester.edu</A>>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">BUGS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopj.html b/ppmtopj.html new file mode 100644 index 00000000..c518a358 --- /dev/null +++ b/ppmtopj.html @@ -0,0 +1,145 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopj User Manual</TITLE> +</HEAD><BODY> +<H1>ppmtopj</H1> +Updated: 13 July 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopj - convert a PPM image to an HP PaintJet file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopj</B> + +[<b>-gamma</b> <I>val</I>] + +[<B>-xpos</B> <I>val</I>] + +[<B>-ypos</B> <I>val</I>] + +[<B>-back</B> {<B>dark</B>|<B>lite</B>}] + +[<B>-rle</B>] + +[<B>-center</B>] + +[<B>-render</B> { +<B>none</b> | +<b>snap</b> | +<b>bw</b> | +<b>dither</b> | +<b>diffuse</b> | +<b>monodither</b> | +<b>monodiffuse</b> | +<b>clusterdither</b> | +<b>monoclusterdither</B> +}] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>ppmtopj</b> reads a PPM image as input and converts it into a +format suitable to be printed by an HP PaintJet printer. + +<P> +For best results, the input file should be in 8-color RGB form; +i.e. it should have only +the 8 binary combinations of full-on and full-off primaries. +You could convert your input to this format like this: + +<pre> + pamseq 3 1 testimg.ppm >8color.pam + pnmremap -map 8color.pam testimg.pam | ppmtopj +</pre> + +Or you could use use +<pre> + ppmdither -red 2 -green 2 -blue 2 +</pre> + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>-rle</B> + +<DD> +Run length encode the image. +(This can result in larger images) + +<DT><B>-back</B> + +<DD> +Enhance the foreground by indicating if the background is light or +dark compated to the foreground. + +<DT><B>-render</B> <I>alg</I> + +<DD> +Use an internal rendering algorithm (default dither). + +<DT><B>-gamma</B> <I>int</I> + +<DD> +Gamma correct the image using the integer <i>int</i> as a gamma (default 0). + +<DT><B>-center</B> + +<DD> +Center the image to an 8.5 by 11 page + +<DT><B>-xpos</B> <I>pos</I> + +<DD> +Move by <i>pos</i> pixels in the x direction. + +<DT><B>-ypos</B> <I>pos</I> + +<DD> +Move by <i>pos</i> pixels in the y direction. + +</DL> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +HP PaintJet XL Color Graphics Printer User's Guide, +<a href="pnmtopclxl.html"><b>pnmtopclxl.html</b></a>, +<a href="pjtoppm.html"><b>pjtoppm.html</b></a>, +<A href="pamdepth.html"><b>pamdepth</b></A>, +<A HREF="pnmremap.html"><b>pnmremap</b></A>, +<A HREF="pamseq.html"><b>pamseq</b></A>, +<A HREF="ppmdither.html"><b>ppmdither</b></A>, +<a href="pbmtolj.html"><b>pbmtolj.html</b></a>, +<a href="ppmtopj.html"><b>ppmtolj</b></a>, +<a href="thinkjettopbm.html"><b>thinkjettopbm</b></a>, +<A HREF="ppm.html"><b>ppm</b></A> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Christos Zoulas. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopjxl.html b/ppmtopjxl.html new file mode 100644 index 00000000..53d3bea8 --- /dev/null +++ b/ppmtopjxl.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopjxl User Manual</TITLE> +</HEAD><BODY> +<H1>PPMTOPJXL</H1> +Updated: 14 March 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopjxl - convert a PPM image to an HP PaintJet XL PCL file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +ppmtopjxl +[<b>-nopack</b>] +[<b>-gamma</b> <I>n</I>] +[<b>-presentation</b>] +[<b>-dark</b>] +[<b>-diffuse</b>] +[<b>-cluster</b>] +[<b>-dither</b>] +[<b>-xshift</b> <I>s</I>] +[<b>-yshift</b> <I>s</I>] +[<b>-xshift</b> <I>s</I>] +[<b>-yshift</b> <I>s</I>] +[{<b>-xsize</b>|<b>-width</b>|<b>-xscale</b>} <I>s</I>] +[{<b>-ysize</b>|<b>-height</b>|<b>-yscale</b>} <I>s</I>] +[<i>ppmfile</i>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopjxl</b> reads a PPM image as input and produces a PCL file +suitable for printing on an HP PaintJet XL printer as output. + +<P>The generated file is not suitable for printing on a normal +PrintJet printer. The <B>-nopack</B> option generates a file which +does not use the normal TIFF 4.0 compression method. This file might +be printable on a normal PaintJet printer (not an XL). + +<P>The <B>-gamma</B> option sets the gamma correction for the +image. The useful range for the PaintJet XL is approximately 0.6 to +1.5. + +<P>You an alter the rendering algorithm used for images with the +<B>-dither,</B> <B>-cluster,</B> and <B>-diffuse</B> options. These +options select ordered dithering, clustered ordered dithering, or +error diffusion respectively. You can use the <B>-dark</B> option to +enhance images with a dark background when they are reduced in size. +The <B>-presentation</B> option turns on presentation mode, in which +two passes are made over the paper to increase ink density. You +should use this only for images where quality is critical. + +<P>You can resize the image by setting the <B>-xsize</B> and +<B>-ysize</B> options. The parameter to either of these options is +interpreted as the number of dots to set the width or height to, but +you may append an optional dimension of `<B>pt</B>' (points), +`<B>dp</B>' (decipoints), `<B>in</B>' (inches), or `<B>cm</B>' +(centimetres). If you specify only one dimension, <b>ppmtopjxl</b> +will scale the other one appropriately. + +<P>The options <B>-width</B> and <B>-height</B> are synonyms of +<B>-xsize</B> and <B>-ysize.</B> + +<P>You can alternatively use the <B>-xscale</B> and <B>-yscale</B> +options to scale the image by a simple factor. + +<P>You can shift the image on the page with the <B>-xshift</B> and +<B>-yshift</B> options. These move the image the specified dimensions +right and down. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Angus Duggan + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> + + + + diff --git a/ppmtoppm.html b/ppmtoppm.html new file mode 100644 index 00000000..78c1d90e --- /dev/null +++ b/ppmtoppm.html @@ -0,0 +1,69 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML> +<HEAD><title>Ppmtoppm User Manual</title></HEAD> + +<BODY> +<H1>ppmtoppm</H1> +Updated: September 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmtoppm - copy PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoppm</B> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>ppmtoppm</b> simply copies a PPM image from Standard Input to +Standard Output. This may seem an unnecessary duplication of +<b>cat</b>, but remember that a PPM program can read a PBM or PGM image as +if it were PPM. So <b>ppmtoppm</b> can read either a PBM, PGM, or PPM +image and produce a PPM image as output. + +<p>Even that is of limited usefulness because of the fact that almost +any program to which you would feed the resulting PPM image could also +just take the original image directly. However, sometimes you really +need a true PPM image. + +<p>When you know you have a PGM image and want a PPM image, +<b>pgmtoppm</b> is a more general way to do that conversion. +When you know you have a PBM image, use that and <b>pbmtopgm</b>. + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgmtopgm.html">pgmtopgm</A></B>, +<B><A HREF="pnmtopnm.html">pnmtopnm</A></B>, +<B><A HREF="pamtopnm.html">pamtopnm</A></B>, +<B><A HREF="pgmtoppm.html">pgmtoppm</A></B>, +<B><A HREF="pbmtopgm.html">pbmtopgm</A></B>, +<B><A HREF="pbm.html">ppm</A></B>, +<B><A HREF="pgm.html">ppm</A></B>, +<B><A HREF="ppm.html">ppm</A></B>, + +<A NAME="history"> </A> +<H2>HISTORY</H2> + +<p>This program was added to Netpbm in Release 10.9 (September 2002). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtopuzz.html b/ppmtopuzz.html new file mode 100644 index 00000000..b777caf9 --- /dev/null +++ b/ppmtopuzz.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtopuzz User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtopuzz</H1> +Updated: 22 August 1990 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtopuzz - convert a PPM image to an X11 "puzzle" file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtopuzz</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtopuzz</b> reads a PPM image as input and produces an X11 +"puzzle" file as output. A "puzzle" file is for +use with the <b>puzzle</b> program included with the X11 distribution. +<b>puzzle</b>'s <B>-picture</B> option lets you specify an image file. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<b>puzzle</b> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtorgb3.html b/ppmtorgb3.html new file mode 100644 index 00000000..18038cc2 --- /dev/null +++ b/ppmtorgb3.html @@ -0,0 +1,63 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtorgb3 User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtorgb3</H1> +Updated: 10 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtorgb3 - separate a PPM image into three PGMs + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtorgb3</B> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtorgb3</b> reads a PPM image as input and writes three PGM +images as output, one each for red, green, and blue. + +<p><b>ppmtorgb3</b> constructs the output filenames by taking the +input filename, stripping off any extension, and appending +<b>.red</b>, <b>.grn</b>, <b>.blu</b>. For example, separating +<b>lenna.ppm</b> would result in <b>lenna.red</b>, <b>lenna.grn</b>, +and <b>lenna.blu</b>. If the input comes from stdin, the names are +<b>noname.red</b>, <b>noname.grn</b>, and <b>noname.blu</b>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="rgb3toppm.html">rgb3toppm</A>, +<A HREF="pamchannel.html">pamchannel</A>, +<A HREF="ppmtopgm.html">ppmtopgm</A>, +<A HREF="pgmtoppm.html">pgmtoppm</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="pgm.html">pgm</A> + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtosixel.html b/ppmtosixel.html new file mode 100644 index 00000000..e9b6d63a --- /dev/null +++ b/ppmtosixel.html @@ -0,0 +1,100 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtosixel User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtosixel</H1> +Updated: 26 April 1991 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtosixel - convert a PPM image to DEC sixel format + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtosixel</B> + +[<B>-raw</B>] + +[<B>-margin</B>] + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtosixel</b> reads a PPM image as input and produces sixel +commands (SIX) as output. The output is formatted for color printing, +e.g. for a DEC LJ250 color inkjet printer. + +<P>If RGB values from the PPM file do not have maxval=100, +<b>ppmtosixel</b> rescales them to maxval 100. A printer control +header and a color assignment table begin the SIX file. Image data is +in a compressed format by default. A printer control footer ends the +image file. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-raw</B> + +<DD>If you specify this, each pixel will be explicitly described in +the image file. If <B>-raw</B> is not specified, output will default +to compressed format in which identical adjacent pixels are replaced +by "repeat pixel" commands. A raw file is often an order of +magnitude larger than a compressed file and prints much slower. + +<DT><B>-margin</B> + +<DD>If you don't specify <B>-margin</B>, the image will start at the +left margin (of the window, paper, or whatever). If you <em>do</em> +specify <B>-margin</B>, a 1.5 inch left margin will offset the image. + +</DL> + +<A NAME="lbAF"> </A> +<H2>PRINTING</H2> + +<p>Generally, sixel files must reach the printer unfiltered. +Use the lpr -x option or <b>cat filename > /dev/tty0?</b>. + +<A NAME="lbAG"> </A> +<H2>LIMITATIONS</H2> + +Upon rescaling, truncation of the least significant bits of RGB values +may result in poor color conversion. If the original PPM maxval was +greater than 100, rescaling also reduces the image depth. While the +actual RGB values from the ppm file are more or less retained, the +color palette of the LJ250 may not match the colors on your screen. +This seems to be a printer limitation. + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Rick Vinci. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">PRINTING</A> +<LI><A HREF="#lbAG">LIMITATIONS</A> +<LI><A HREF="#lbAH">SEE ALSO</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoterm.html b/ppmtoterm.html new file mode 100644 index 00000000..a8afc658 --- /dev/null +++ b/ppmtoterm.html @@ -0,0 +1,100 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoterm User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoterm</H1> +Updated: 17 August 2002 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoterm - convert a PPM image to a ANSI ISO 6429 ascii image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoterm</B> + +[<I>ppmfile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. +You may use two hyphens instead of one. You may separate an option +name and its value with white space instead of an equals sign. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P>This program tries to produce an accurate representation of a PPM +image on an terminal that implements the ANSI ISO 6429 standard. It +aproximates colors, finding the minimum cartesian distance between the +input RGB vectors and the ones in the generated palette. As the +available color palette is somewhat restricted, you get the best +results when the colors in the original image are few and the RGB +intensities are close to zero, half of maximum, and maximum. + +<P>You can usually get good results with cartoons or images with +plain colors (no gradients). With photos, results can vary, but are +usually not very accurate. + +<P>The output image has one line for each row and one character for each +column of the input image. E.g. an 80 pixel by 25 pixel PPM image would +fill up an 80x25 terminal screen. Use <b>pamscale</b> or <b>pamcut</b> +to make your image fit properly on your screen. + +<P>The image starts at the current cursor position on the terminal +screen. Each successive row starts at Column 0 on the screen. If you want +to shift the image up or down, for example to center it, use +<b>pnmpad</b> on the input. + +<P>This program was born with the objective of displaying nice color +images on the linux console, e.g. a proper logo at Linux boot. + +<p><b>pbmto4425</b> does a similar thing for black and white images, using +line drawing characters, on some terminals. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P> +None. + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamscale.html">pamscale</A></B>, +<B><A HREF="pamcut.html">pamcut</a></b>, +<B><A HREF="pbmtoascii.html">pbmtoascii</a></b>, +<B><A HREF="pbmto4425.html">pbmto4425</a></b>, +<B><A HREF="ppm.html">ppm</A></B> + + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2002 by Ero Carrera. + + +<A NAME="history"></a> +<h2>HISTORY</H2> + +<P>This program was new in Netpbm 10.9 (August 2002). + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/ppmtotga.html b/ppmtotga.html new file mode 100644 index 00000000..25fdab29 --- /dev/null +++ b/ppmtotga.html @@ -0,0 +1,20 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Ppmtotga User Manual</TITLE> +</HEAD><BODY> +<H1>ppmtotga</H1> +Updated: July 2002 +<BR> +<H2>NAME</H2> +ppmtotga - replaced by pamtotga +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>ppmtotga</b> was replaced in Netpbm 10.6 (July 2002) by +<b><a href="pamtotga.html">pamtotga</a></b>. + +<P><B>pamtotga</b> is backward compatible with <b>ppmtotga</b>, but +also recognizes PAM input, including that with an alpha channel. + +</BODY> +</HTML> diff --git a/ppmtouil.html b/ppmtouil.html new file mode 100644 index 00000000..b6790d0a --- /dev/null +++ b/ppmtouil.html @@ -0,0 +1,15 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<title>ppmtouil</title> +</head><body> +<h1>ppmtouil</h1> +Updated: May 2002 +<br> +<h2>NAME</h2> +<B>ppmtouil</B> - replaced by pamtouil +<h2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +In May 2002, <b>ppmtouil</b> was extended and renamed to +<b><a href="pamtouil.html">pamtouil</a></b>. +</body> </html> diff --git a/ppmtowinicon.html b/ppmtowinicon.html new file mode 100644 index 00000000..e8a5c991 --- /dev/null +++ b/ppmtowinicon.html @@ -0,0 +1,132 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtowinicon User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtowinicon</H1> +Updated: 01 May 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtowinicon - convert PPM image into a Windows .ico file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtowinicon</B> + +[<b>-andpgms</b>] + +[<b>-output=</b><i>output.ico</I>] + +[<I>ppmfile</I> [<i>andfile</i>] ...] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtowinicon</b> reads one or more PPM images as input and +produces a Microsoft Windows .ico file as output. + +<P>A Windows icon contains 1 or more images, at different resolutions +and color depths. When Windows wants to display the icon, it searches +through the images to find the one the best matches the number of colors +and resolution of the display. + +<P>Microsoft recommends including at least the following formats in each +icon. + +<ul> +<li>16 x 16 - 4 bpp +<li>32 x 32 - 4 bpp +<li>48 x 48 - 8 bpp +</ul> + +<p>If you don't specify any input files, input is from Standard Input. + +<p>Output is to Standard Output unless you specify <b>-output</b>. + +<h3 id="transparency">Transparency</h3> + +<p>If you specify the <b>-andmask</b> option, you get (partly) +transparent icons. In that case, your arguments are pairs of file +names, with the first file name being that of the image and the second +file name being that of a standard Netpbm PGM transparency mask (see +the <a href="pgm.html">pgm format specification</a>). + +<p>In a .ico file, there is no such thing as partial transparency +(translucency). Where the PGM mask says completely opaque, the icon will +be opaque. Everywhere else, the icon will be transparent. Note that +as with any Netpbm program, you can use a PBM image for the transparency +mask and <b>ppmtowinicon</b> will treat it like a PGM. + +<P>The and mask is like an alpha mask, except for what it signifies in +the "not opaque" areas. In the usual case, the foreground image is +black in those areas, and in that case the areas are fully transparent +-- the background shows through the icon. But in general, a not +opaque pixel signifies that the background and foreground should be +merged as follows: The intensities of the color components in the +forgeground and background are represented as binary numbers, then +corresponding bits of the background and foreground intensities are +exlusive-or'ed together. So there is a sort of reverse video effect. + +<p>If you don't want this special effect and instead want +straightforward transparency, use the <b>-truetransparent</b> option. +This causes <b>ppmtowinicon</b> to make the base image black +everywhere your transparency mask says transparent, regardless of what +color you input image is at that location. + +<p>If you don't specify <b>-andmask</b>, <b>ppmtowinicon</b> puts +all-opaque and masks into the .ico file. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-andpgms</B> + +<DD>Include transparency information in the icons. +See the <a href="#transparency">transparency section</a>. + +<DT><B>-output=</b><i>output.ico</i> + +<DD>Name of output file. By default, <b>ppmtowinicon</b> writes the +icon to Standard Output. + +<DT><B>-truetransparent</b> + +<dd>Make transparency in the icon normal instead of the special reverse +video effect. See the <a href="#transparency">transparency section</a>. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="winicontoppm.html">winicontoppm</A></B>, +<B><A HREF="ppm.html">ppm</A></B> +<B><A HREF="pgm.html">pgm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2000 by Lee Benfield. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<UL> + <LI><A HREF="#transparency">TRANSPARENCY</A> + </UL> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoxpm.html b/ppmtoxpm.html new file mode 100644 index 00000000..7c299777 --- /dev/null +++ b/ppmtoxpm.html @@ -0,0 +1,185 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoxpm User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoxpm</H1> +Updated: Feb 22 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmtoxpm - convert a PPM image to an X11 pixmap + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoxpm </B> +[<B>-name=</B><I>xpmname</I>] +[<B>-hexonly</B>] +[<B>-rgb=</B><I>rgb-textfile</I>] +[<B>-alphamask=</B><I>pgmfile</I>] +[<I>ppmfile</I>] + +<p>Minimum unique abbreviation of option is acceptable. You may use double +hyphens instead of single hyphen to denote options. You may use white +space in place of the equals sign to separate an option name from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoxpm</b> reads a PPM image as input and produces X11 pixmap +(version 3) as output. This format can be loaded by the XPM library. + +<P>In the XPM output, colors may be identified by name, such as "Red", or +in hexadecimal, for example "#FF0000". In the hexadecimal format, there +may be from 1 through 4 hexadecimal digits per RGB component. + +<p>By default, <b>ppmtoxpbm</b> tries to find a name for each color in +the image in the <a href="libppm.html#rgb.txt">system color +dictionary</a>, and if it finds one, uses it. If it doesn't it uses +hexadecimal. You can force <b>ppmtoxpbm</b> to use hexadecimal only +with the <b>-hexonly</b> option. You can specify a different color +dictionary with the <b>-rgb</b> option. + +<p>When <b>ppmtoxpm</b> uses the hexadecimal format for identifying a color, +it uses the one that uses the least number of hexadecimal digits that it +takes to represent the maxval of the input PPM. E.g. if the maxval of the +input PPM is 100, <b>ppmtoxpm</b> uses 2 digits per component, as in +"#FF0000". + +<p>Some programs do not properly handle one-digit-per-component +hexadecimal color specifiers. They see the wrong colors. To produce +an XPM that such a program can handle, make sure the maxval of the input PPM +is greater than 15, such as by running it through <B>pamdepth 255</b>. + +<h3>Color Code Lengths - Image Size</h3> + +<p>In the XPM format, there is a palette ("color map") that +assigns each color in the image to a unique sequence of printable +characters called a color code, and a raster that identifies the color +of each pixel of the image with one of those color codes. The length +of the color code affects the size of the image stream. + +<p>All color codes in an image are the same length, and +<b>ppmtoxpm</b> tries to make it as short as possible. That length +is, of course, determined by the number of colors in the image. +<b>ppmtoxpm</b> counts the colors in the image, excluding those that +will be transparent in the output due to your alpha mask, and chooses +a color code length accordingly. There are 92 printable characters +that can be used in a color code. Therefore, if you have 92 or fewer +colors, your color codes will be one character. If you have more than +92 but not more than 92 * 92, your color codes will be two characters. +And so on. + +<p>There's one exception to the above: If you specify an alpha mask +(the <b>-alpha</b> option, one unique color code represents +"transparent." This is true even if the alpha mask doesn't +actually produce any transparent pixels. So subtract one from the number +of possible colors if you use <b>-alpha</b>. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-name=</B><I>xpmname</I> + +<DD>This option specifies the prefix string which is specified in the +resulting XPM output. If you don't use the <b>-name</b> otpion, +<b>ppmtoxpm</b> defaults to the filename (without extension) of the +<i>ppmfile</i> parameter. If you do not specify <B>-name</B> or +<I>ppmfile</I> (i.e. your input is from Standard Input), the prefix +string defaults to the string <B>noname</B>. + +<DT><B>-hexonly</B> + +<DD>This option says never to put color names in the XPM file, but rather +to identify names by hexadecimal strings that explicitly identify RGB +component intensities. This means the reader of the file need not have +access to a suitable color dictionary to interpret it. + +<P>This option was introduced in Netpbm 10.15 (April 2003). Before that, +it was the default, overridden by specifying <b>-rgb</b>. + +<DT><B>-rgb=</B><I>rgb-textfile</I> + +<DD>This option names the file in which the color dictionary you want +to use resides. By default, <b>ppmtoxpm</b> uses the <a +href="libppm.html#rgb.txt">system color dictionary</a>. + +<P>This option in meaningless when you specify <b>-hexonly</b>. + +<P>Before Netpbm 10.15 (April 2003), <b>ppmtoxpm</b> did not default +to the system color dictionary. If you didn't specify <b>-rgb</b>, +<b>ppmtoxpbm</b> would use only hexadecimal color specifiers. + +<DT><B>-alphamask=</B><I>pgmfile</I> + +<DD> This option names a PGM file to use as an alpha (transparency) +mask. The file must contain an image the same dimensions as the input +image. <B>ppmtoxpm</B> marks as transparent any pixel whose position +in the alpha mask image is at most half white. + +<P>If you don't specify <B>-alphamask</B>, <B>ppmtoxpm</B> makes all +pixels in the output opaque. + +<P><B>ppmcolormask</B> is one way to generate an alpha mask file. You +might also generate it by extracting transparency information from an +XPM file with the <B>-alphaout</B> option to <B>xpmtoppm</B>. + +<P>There are similar options on other Netpbm converters that convert from +formats that include transparency information too. +</DL> + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmcolormask.html">ppmcolormask</A></B>, +<B><A HREF="xpmtoppm.html">xpmtoppm</A></B>, +<B><A HREF="pamdepth.html">pamdepth</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<BR> +XPM Manual by Arnaud Le Hors <A +HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<p> +Copyright (C) 1990 by Mark W. Snitily. +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided +that the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. This software is provided "as is" without express or +implied warranty. +<P> +This tool was developed for Schlumberger Technologies, ATE Division, and +with their permission is being made available to the public with the above +copyright notice and permission notice. + +<P>Upgraded to XPM2 by Paul Breslaw, Mecasoft SA, Zurich, Switzerland (<A +HREF="mailto:paul@mecazh.uu.ch">paul@mecazh.uu.ch</A>), November 8, +1990. + +<P>Upgraded to XPM version 3 by Arnaud Le Hors(<A +HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A>), April +9, 1991. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoyuv.html b/ppmtoyuv.html new file mode 100644 index 00000000..2ca22606 --- /dev/null +++ b/ppmtoyuv.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoyuv User Manual</TITLE></HEAD> +<BODY> + +<H1>ppmtoyuv</H1> +Updated: 06 June 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmtoyuv - convert a PPM image to an Abekas YUV file + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoyuv</B> +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoyuv</b> reads a PPM image as input and produces an Abekas +YUV file as output. + +<p>The output file contains a raster of four byte YUV codes, each +uniquely associated with two side-by-side pixels in the image. The raster +contains rows in order from top to bottom, and within each row columns +from left to right. So the output file size in bytes is twice the number of +pixels in the image. + +<p>Each YUV code is associated with two pixels from the input image that we +will call the left pixel and the right pixel. The 2nd byte of the code is +the Y value of the left pixel. The 4th byte of the code is the Y value of +the right pixel. The 1st byte of the code is an average of the U value of +the pixel <em>to the left of the left pixel</em>, the left pixel, and the +right pixel. The 3rd byte of the code is analogous for V values. These +averages are weighted arithmetic means where the left pixel is weighted +double what the other two pixels are weighted. + +<p>This format is reminiscent of but rather different from the common +YUV 4:2:0 format (aka YUV 420) and the similar YUV 4:4:4, YUV 4:2:2, +YUV 4:1:1, YUV 4:1:1s, and YUV 4:1:0. In YUV 4:2:0, the raster is +different for even numbered lines and odd numbered lines. On even +numbered lines, there are twice as many bits for Y of each pixel as +for U or V. On odd numbered lines, there are the same number of bits +for Y as on even numbered lines, but no bits at all for U and V. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="yuvtoppm.html">yuvtoppm</A>, +<A HREF="ppmtoeyuv.html">ppmtoeyuv</A>, +<A HREF="ppmtoyuvsplit.html">ppmtoyuvsplit</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Marc Boucher <A +HREF="mailto:marc@PostImage.COM">marc@PostImage.COM</A>, based on +Example Conversion Program, A60/A64 Digital Video Interface Manual, +page 69. + +<p>Copyright (C) 1991 by DHD PostImage Inc. + +<P>Copyright (C) 1987 by Abekas Video Systems Inc. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtoyuvsplit.html b/ppmtoyuvsplit.html new file mode 100644 index 00000000..604224c1 --- /dev/null +++ b/ppmtoyuvsplit.html @@ -0,0 +1,72 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtoyuvsplit User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtoyuvsplit</H1> +Updated: 06 March 2003 +<BR> + +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtoyuvsplit - convert a PPM image to 3 subsampled raw YUV files + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ppmtoyuvsplit</B> +<I>basename</I> +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtoyuvsplit</b> reads a PPM image as input. Produces 3 raw +files <i>basename</i>.Y, <i>basename</i>.U and <i>basename.V</i> as +output. + +<p>The output files are the subsampled raw YUV representation of the +input PPM image, as required by the Stanford MPEG codec. The Y output +file contains a byte for each pixel in the image, with the rows going +from top to bottom and the columns within each row going left to +right. The U and V output files are arranged similarly, except that +each byte represents a square of 4 pixels of the image. The value is +the arithmetic mean of the value for each of those 4 pixels. Hence, the +Y file is 4 times the size of the U file or V file. + +<p>The YUV values are scaled according to CCIR.601, as assumed by +MPEG. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="yuvsplittoppm.html">yuvsplittoppm</A>, +<A HREF="ppmtoyuv.html">ppmtoyuv</a>, +<A HREF="ppmtoeyuv.html">ppmtoeyuv</A>, +<A HREF="ppmtompeg.html">ppmtompeg</A>, +<A HREF="ppm.html">ppm</A> + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1993 by Andre Beck. (<A +HREF="mailto:Andre_Beck@IRS.Inf.TU-Dresden.de">Andre_Beck@IRS.Inf.TU-Dresden.de</A>) + +<P>Based on ppmtoyuv.c + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmtv.html b/ppmtv.html new file mode 100644 index 00000000..3a77b37a --- /dev/null +++ b/ppmtv.html @@ -0,0 +1,62 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmtv User Manual</TITLE></HEAD> +<BODY> +<H1>ppmtv</H1> +Updated: 16 November 1993 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ppmtv - make a PPM image look like taken from an American TV + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +ppmtv +<I>dimfactor</I> + +[<I>ppmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmtv</b> reads a PPM image as input and dims every other row of +image data down by the specified dim factor. This factor may be in +the range of 0.0 (the alternate lines are totally black) to 1.0 +(original image). + +<P>This creates an effect similar to what I've once seen in the video +clip 'You could be mine' by Guns'n'Roses. In the scene I'm talking +about you can see John Connor on his motorbike, looking up from the +water trench (?) he's standing in. While the camera pulls back, the +image gets 'normal' by brightening up the alternate rows of it. I +thought this would be an interesting effect to try in MPEG. I did not +yet check this out, however. Try for yourself. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="ppmdim.html">ppmdim</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Frank Neumann + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ppmwheel.html b/ppmwheel.html new file mode 100644 index 00000000..ab23f503 --- /dev/null +++ b/ppmwheel.html @@ -0,0 +1,72 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ppmwheel User Manual</TITLE></HEAD> +<BODY> +<H1>ppmwheel</H1> +Updated: 11 January 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +ppmwheel - make a PPM image of a color wheel + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> +<B>ppmwheel</B> +<I>diameter</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ppmwheel</b> produces a PPM image of a color wheel of the +specified diameter inside a white square just large enough to hold it. + +<p>The color wheel is based on the HSV color model. Hues are +distributed angularly around the circle and the values are distributed +radially and the saturation is zero everywhere. The values are zero at +the center, increasing linearly to maximum at the edge. The maximum value +corresponds to the maxval of the PPM image. + +<p>Hence, the image contains all of the secondary colors based on the +red, green, and blue primary colors. A secondary color is one that is +composed of light of at most two of the three primary colors. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<P>None. + +<A NAME="seealso"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmcie.html">ppmcie</A></B>, +<B><A HREF="ppmrainbow.html">ppmrainbow</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<H2>HISTORY</H2> +<A NAME="history"></a> + +<P><b>ppmwheel</b> was added to Netpbm in Release 10.14 (March 2003). + + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1995 by Peter Kirchgessner + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/psidtopgm.html b/psidtopgm.html new file mode 100644 index 00000000..652416d0 --- /dev/null +++ b/psidtopgm.html @@ -0,0 +1,69 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Psidtopgm User Manual</TITLE></HEAD> +<BODY> +<H1>psidtopgm</H1> +Updated: 02 August 89 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +psidtopgm - convert PostScript "image" data to a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>psidtopgm</B> + +<I>width</i> <i>height</i> <i>bits/sample</I> + +[<I>imagedata</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>psidtopgm</b> reads the "image" data from a PostScript +file as input and produces a PGM image as output. + +<P>This program is obsoleted by <B>pstopnm</B>. + +What follows was written before <B>pstopnm </B> existed. + +<P>This is a very simple and limited program, and is here only because +so many people have asked for it. To use it you have to +<em>manually</em> extract the readhexstring data portion from your +PostScript file, and then give the width, height, and bits/sample on +the command line. Before you attempt this, you should <em>at +least</em> read the description of the "image" operator in +the PostScript Language Reference Manual. + +<P>It would probably not be too hard to write a script that uses this +filter to read a specific variety of PostScript image, but the +variation is too great to make a general-purpose reader. Unless, of +course, you want to write a full-fledged PostScript interpreter... + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtops.html">pnmtops</A>, +<A HREF="pgm.html">pgm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/pstopnm.html b/pstopnm.html new file mode 100644 index 00000000..48a119f7 --- /dev/null +++ b/pstopnm.html @@ -0,0 +1,389 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Pstopnm User Manual</TITLE></HEAD> +<BODY> +<H1>pstopnm</H1> +Updated: 28 May 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +pstopnm - convert a PostScript file to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>pstopnm</B> + +[<B>-stdout</B>] + +[<B>-forceplain</B>] + +[<B>-help</B>] + +[<B>-dpi=</b><i>dpi</i>] + +[<B>-xsize=</B><I>pixels</I>] +[<B>-ysize=</B><I>pixels</I>] + +[<B>-xborder=</B><I>frac</I>] +[<B>-yborder=</B><I>frac</I>] + +[<B>-landscape</B>] + +[<B>-portrait</B>] + +[<B>-nocrop</B>] + +[<B>-pbm</B> + +|<B>-pgm</B> + +|<B>-ppm</B>] + +[<B>-llx=</B><I>s</I>] +[<B>-lly=</B><I>s</I>] +[<B>-urx=</B><I>s</I>] +[<B>-ury=</B><I>s</I>] + +[<B>-verbose</B>] + +[<B>-xmax=</B><I>pixels</I>] +[<B>-ymax=</B><I>pixels</I>] + + +<I>psfile</I>[<B>.ps</B>] + +<?makeman .SH OPTION USAGE ?> +<P>Minimum unique abbreviation of option is acceptable. You may use +double hyphens instead of single hyphen to denote options. You may use +white space in place of the equals sign to separate an option name +from its value. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>pstopnm</b> reads a PostScript file as input and produces PBM, +PGM, or PPM images as output. This program simply uses GhostScript to +render a PostScript file with its PNM device drivers. If you don't +have GhostScript installed or the version you have installed was not +built with the relevant PNM device drivers, <B>pstopnm</B> will fail. +You can see if you have the proper environment by issuing the command +<kbd>gs --help </kbd>. If it responds and lists under "Available +Devices" <B>pbm</B>, <B>pbmraw</B>, <B>pgm</B>, <B>pgmraw</B>, +<B>pnm</B>, <B>pnmraw</B>, <B>ppm</B>, or <B>ppmraw</B>, you're in +business. + +<P><B>pstopnm</B> uses the value of the <B>GHOSTSCRIPT</B> +environment variable as the file name for the Ghostscript program. If +<B>GHOSTSCRIPT</B> is not set, <B>pstopnm</B> searches your +<B>PATH</B> for a regular file named <B>gs</B>. If it doesn't find +one, it assumes Ghostscript is in the file <b>/usr/bin/gs</b>. + +<P><B>pstopnm</B> does not use the Netpbm libraries to generate the +output files, so may not be entirely consistent with most Netpbm +programs. + +<P><I>psfile</I>[<B>.ps</B>] is the name of the input file. +<B>pstopnm</B> will add the <B>ps</B> to the end of the name you +specify if no file exists by the exact name you specify, but one with +added does. Use <B>-</B> to indicate Standard Input. + +<P>If you use the <B>-stdout </B> option, <B>pstopnm</B> outputs +images of all the pages as a multi-image file to Standard Output. +Otherwise, <B>pstopnm</B> creates one file for each page in the +Postscript document. The files are named as follows: If the input +file is named <B>psfile.ps</B>, the name of the files will be +<B>psfile001.ppm</B>, <B>psfile002.ppm</B>, etc. The filetype suffix +is <B>.ppm</B>, <B>.pgm</B>, or <B>.pbm</B>, depending on which kind +of output you choose with your invocation options. If the input file +name does not end in <B>.ps</B>, the whole file name is used in the +output file name. For example, if the input file is named +<B>psfile.old</B>, the output file name is <B>psfile.old001.ppm</B>, +etc. + +<P>Note that the output file selection is inconsistent with most +Netpbm programs, because it does not default to Standard Output. This +is for historical reasons, based on the fact that the Netpbm formats +did not always provide for a sequence of images in a single file. + +<p>Each output image contains a rectangular area of the page to which +it pertains. See <a href="#dimensions">the Dimensions section</a> for +details on what part of the input image goes into the output image and +how big it is in the output and what borders and margins are in the +output image. + +<P>It has been reported that on some Postscript Version 1 input, +Ghostscript, and therefore <B>pstopnm</B>, produces no output. To +solve this problem, you can convert the file to Postscript Version 3 +with the program <B>ps2ps</B>. It is reported that the program +<B>pstops</B> does not work. + +<a name="dimensions"></a> +<h3>Dimensions</h3> + +<p>This section describes what part of the input image gets used in +the output and the dimensions of the output, including borders and +background. + +<p>Note that an output image is associated with a single input page. + +<b>pstopnm</b> starts by taking a rectangular area from the input page. +That is called the subject image. + +<p><b>pstopnm</b> may add borders to the subject image to form what is called +the bordered subject image. + +<p><b>pstopnm</b> places the bordered subject image in the center of +the output image and clips the edges as necessary to fit the computed +output image size. + +<p>The location of the subject image in the Postscript input page is +defined by four numbers, the lower left corner and the upper right +corner x and y coordinates. These coordinates are usually specified +by the BoundingBox DSC statement (a Postscript comment) in the +PostScript file, but they can be overridden by the user by specifying +one or more of the following options: <B>-llx</B>, <B>-lly</B>, +<B>-urx</B>, and <B>-ury</B>. + +<p>The presence and thickness of a border to be added to the subject +image to form the bordered subject image is controlled by the options +<B>-xborder</B> and <B>-yborder</B>. If <B>pstopnm</B> does not find +a BoundingBox statement in the input, and you don't specify image area +coordinates on the command line, <B>pstopnm</B> uses default values. +If your input is from Standard Input, <B>pstopnm</B> does not use the +BoundingBox values (due to the technical difficulty of extracting that +information and still feeding the file to Ghostscript), so you either +have to specify the image area coordinates or take the default. + +<p>The output image size is a confusing thing. In a Postscript file, +things have spatial dimensions. For example, a particular line may be +3 centimeters long. A Postscript printer is supposed to print the +line 3 centimeters long, using however many pixels that takes, without +regard to how big the sheet of paper on which it is printing is. In a +PNM image, by contrast, there is no spatial dimension; there are only +pixels. You might have a line that is 100 pixels long, but the PNM +image says nothing about how long that line should be on a printed +page. + +<p><b>pstopnm</b> fills the role of a Postscript printer. The PNM image +is a virtual printed page. <b>pstopnm</b> must determine how many pixels +it will use in the output image to represent an inch of input image, +which is the "output device resolution." Think of it as the number of +dots per inch the virtual printer prints on the virtual page. + +<p>The simplest thing is for you to tell <b>pstopnm</b> exactly what +output device resolution to use, using the <b>-dpi</b> option. If you +say for example <b>-dpi=300</b> and the bordered subject image is 2 +inches by 2 inches, the PNM output will be 600 pixels by 600 pixels. + +<p>Or you can set the output image dimensions with <b>-xsize</b> and +<b>-ysize</b>. For example, if you say <b>-xsize=1000 -ysize=1000</b> +and the bordered subject image is 2 inches by 2 inches, the output +image is 1000 by 1000 pixels, with each pixel representing 1/500 inch +of input image. + +<p>If you specify one of <b>-xsize</b> and <b>-ysize</b> and not the +other, <b>pstopnm</b> defaults the other such that the output image +has the same aspect ratio as the bordered subject image. + +<p>If you specify neither the output size nor the output device +resolution, <b>pstopnm</b> does some weird computation which exists +mainly for historical reasons: + +<p>If you specify <b>-nocrop</b>, <b>pstopnm</b> uses the values of +<b>-xmax</b> and <b>-ymax</b> for the output image dimensions. These +default to 612 and 792 pixels, respectively. + +<p>The final case, the default, is where you don't specify any size or +resolution options of <b>-nocrop</b>. This is the most complicated +case. In this case, <b>pstopnm</b> first chooses an output device +resolution that would generate the number of pixels indicated by +<b>-xmax</b> and <b>-ymax</b> from the bordered subject image. Then, +based on that resolution, it chooses an output image size that is just +large enough to accomodate the subject image (no borders). Remember +(above) that <b>pstopnm</b> trims the edges of the bordered subject +image to fit the computed output size. + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-forceplain</B> + +<DD> forces the output file to be in plain (text) format. Otherwise, +it is in raw (binary) format. See <B><A HREF="pbm.html">pbm</A></B>, +etc. + +<DT><B>-llx=</B><I>bx</I> + +<DD>selects <I>bx</I> as the lower left corner x coordinate (in +inches) on the Postscript input page of the subject image. +See <a href="#dimensions">the Dimensions section</a>. + +<DT><B>-lly=</B><I>by</I> + +<DD>selects <I>by</I> as the lower left corner y coordinate (in inches) +on the Postscript input page of the subject image. +See <a href="#dimensions">the Dimensions section</a>. + +<DT><B>-landscape</B> + +<DD>renders the image in landscape orientation. + +<DT><B>-portrait</B> + +<DD>renders the image in portrait orientation. + +<DT><B>-nocrop</B> + +<DD>This option causes <b>pstopnm</b> to make the output image +exactly the dimensions of the bordered subject image. By default, +<b>pstopnm</b> makes the output image the dimensions specified by +<b>-xmax</b> and <b>-ymax</b>. See <a href="#dimensions">the Dimensions +section</a>. + +<DT><B>-pbm</b> +<DT><B>-pgm</B> +<DT><B>-ppm</B> + +<DD> +selects the format of the output file. By default, all files are +rendered as portable pixmaps (ppm format). + +<DT><B>-stdout</B> + +<DD>causes output to go to Standard Output instead of to regular +files, one per page (see description of output files above). Use +<B>pnmsplit</B> to extract individual pages from Standard Output. + +<DT><B>-urx=</B><I>tx</I> + +<DD>selects <I>tx</I> as the upper right corner x coordinate (in +inches) on the Postscript input page of the subject image. See <a +href="#dimensions">the Dimensions section</a>. + +<DT><B>-ury=</B><I>ty</I> + +<DD>selects <I>ty</I> as the upper right corner y coordinate (in +inches) on the Postscript input page of the subject image. See <a +href="#dimensions">the Dimensions section</a>. + + +<DT><B>-verbose</B> + +<DD> +prints processing information to stdout. + +<DT><B>-xborder=</B><I>frac</I> + +<DD>specifies that the left and right borders added to the subject +image are to be <I>frac</I> times the subject image width. The +default value is 0.1. See <a href="#dimensions">the Dimensions +section</a>. + + +<DT><B>-xmax=</B><I>xmax</I> + +<DD>specifies that the output image is to be <I>xmax</I> pixels wide. +The default is 612. See <a href="#dimensions">the Dimensions +section</a>. + + +<DT><B>-xsize=</B><I>xsize</I> + +<DD>specifies that the output image is to be <I>xsize</I> pixels wide. +See <a href="#dimensions">the Dimensions section</a>. + +<DT><B>-yborder=</B><I>frac</I> + +<DD>specifies that the top and bottom borders added to the subject +image are to be <I>frac</I> times the subject image height. The +default value is 0.1. See <a href="#dimensions">the Dimensions +section</a>. + + +<DT><B>-ymax=</B><I>ymax</I> + +<DD> +specifies that the output image is to be <i>ymax</i> pixels high. +The default is 792. See <a href="#dimensions">the Dimensions +section</a>. + +<DT><B>-ysize=</B><I>ysize</I> + +<DD>specifies that the output image is to be <i>ymax</i> pixels high. +See <a href="#dimensions">the Dimensions section</a>. + +<DT><B>-dpi=</b><i>dpi</i> + +<DD>specifies the output device resolution, in dots per inch, of the +Postscript printer that <b>pstopnm</b> simulates. This is the number of +PNM pixels <b>pstopnm</b> generates for each inch of image. +See <a href="#dimensions">the Dimensions section</a>. + +<p>This option was new in Netpbm 10.21 (March 2004). + +</DL> + + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<P>The program will produce incorrect results with PostScript files that +initialize the current transformation matrix. In these cases, page +translation and rotation will not have any effect. To render these +files, probably the best bet is to use the following options: + +<pre> + pstopnm -xborder 0 -yborder 0 -portrait -nocrop file.ps +</pre> + +<P>Additional options may be needed if the document is supposed to be +rendered on a medium different from letter-size paper. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B>gs</B>, +<B><A HREF="pnmtops.html">pnmtops</A></B>, +<B><A HREF="psidtopgm.html">psidtopgm</A></B>, +<B><A HREF="pbmtolps.html">pbmtolps</A></B>, +<B><A HREF="pbmtoepsi.html">pbmtoepsi</A></B>, +<B><A HREF="pnmsplit.html">pnmsplit</A></B>, +<B>pstofits</B> + + + +<A NAME="lbAH"> </A> +<H2>COPYRIGHT</H2> + +<p>Copyright (c) 1992 Smithsonian Astrophysical Observatory + +<p>PostScript is a Trademark of Adobe Systems Incorporated. + + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +<p>Alberto Accomazzi, WIPL, Center for Astrophysics. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">COPYRIGHT</A> +<LI><A HREF="#lbAI">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/qrttoppm.html b/qrttoppm.html new file mode 100644 index 00000000..b6bf9764 --- /dev/null +++ b/qrttoppm.html @@ -0,0 +1,49 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Qrttoppm User Manual</TITLE></HEAD> +<BODY> +<H1>qrttoppm</H1> +Updated: 25 August 1989 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +qrttoppm - convert output from the QRT ray tracer to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>qrttoppm</B> + +[<I>qrtfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>qrttoppm</b> reads a QRT file as input and and produces a PPM +image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/rasttopnm.html b/rasttopnm.html new file mode 100644 index 00000000..32f638dc --- /dev/null +++ b/rasttopnm.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rasttopnm User Manual</TITLE></HEAD> +<BODY> +<H1>rasttopnm</H1> +Updated: 13 January 1991 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +rasttopnm - convert a Sun rasterfile to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>rasttopnm</B> + +[<I>rastfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>rasttopnm</b> reads a Sun rasterfile as input and produces a PNM +image as output. The type of the output file depends on the input +file - if it's black and white, <b>rasttopnm</b> writes a PBM image. +If it's grayscale, <b>rasttopnm</b> writes a PGM. If it's color, +<b>rasttopnm</b> writes a PPM. The program tells you which type it is +generating. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtorast.html">pnmtorast</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/rawtopgm.html b/rawtopgm.html new file mode 100644 index 00000000..18e29775 --- /dev/null +++ b/rawtopgm.html @@ -0,0 +1,170 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rawtopgm User Manual</TITLE></HEAD> +<BODY> +<H1>rawtopgm</H1> +Updated: 14 September 2000 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +rawtopgm - convert raw grayscale bytes to a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>rawtopgm</B> + +[<B>-bpp</B> [<B>1</B>|<B>2</B>]] + +[<B>-littleendian</B>] + +[<B>-maxval</B> <I>N</I>] + +[<B>-headerskip</B> <I>N</I>] + +[<B>-rowskip</B> <I>N</I>] + +[<B>-tb</B>|<B>-topbottom</B>] + +[<I>width</I> <I>height</I>] + +[<I>imagefile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>rawtopgm</b> reads raw grayscale values as input and produces a +PGM image as output. The input file is just a sequence of pure binary +numbers, either one or two bytes each, either bigendian or +littleendian, representing gray values. They may be arranged either +top to bottom, left to right or bottom to top, left to right. There +may be arbitrary header information at the start of the file (to which +<B>rawtopgm</B> pays no attention at all other than the header's +size). + +<P>Arguments to <B>rawtopgm</B> tell how to interpret the pixels (a +function that is served by a header in a regular graphics format). + +<P>The <I>width</I> and <I>height</I> parameters tell the dimensions +of the image. If you omit these parameters, <B>rawtopgm</B> assumes +it is a quadratic image and bases the dimensions on the size of the +input stream. If this size is not a perfect square, <B>rawtopgm</B> +fails. + +<P>When you don't specify <I>width</I> and <I>height</I>, +<B>rawtopgm</B> reads the entire input stream into storage at once, +which may take a lot of storage. Otherwise, <B>rawtopgm</B> +ordinarily stores only one row at a time. + +<P>If you don't specify <I>imagefile</I>, or specify <B>-</B>, the +input is from Standard Input. + +<P>The PGM output is to Standard Output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-maxval</B> <I>N</I> + +<DD><I>N</I> is the maxval for the gray values in the input, and is +also the maxval of the PGM output image. The default is the maximum +value that can be represented in the number of bytes used for each +sample (i.e. 255 or 65535). + +<DT><B>-bpp</B> [<B>1</B>|<B>2</B>] + +<DD>tells the number of bytes that represent each sample in the input. +If the value is <B>2</B>, The most significant byte is first in the +stream. + +<P>The default is 1 byte per sample. + +<DT><B>-littleendian</B> + +<DD>says that the bytes of each input sample are ordered with the +least significant byte first. Without this option, <B>rawtopgm</B> +assumes MSB first. This obviously has no effect when there is only +one byte per sample. + +<DT><B>-headerskip</B> <I>N</I> + +<DD><B>rawtopgm</B> skips over <I>N</I> bytes at the beginning of the +stream and reads the image immediately after. The default is 0. + +<P>This is useful when the input is actually some graphics format that +has a descriptive header followed by an ordinary raster, and you don't +have a program that understands the header or you want to ignore the +header. + +<DT><B>-rowskip</B> <I>N</I> + +<DD>If there is padding at the ends of the rows, you can skip it with +this option. Note that rowskip need not be an integer. Amazingly, I +once had an image with 0.376 bytes of padding per row. This turned +out to be due to a file-transfer problem, but I was still able to read +the image. + +<P>Skipping a fractional byte per row means skipping one byte per +multiple rows. + +<DT><B>-bt -bottomfirst</B> + +<DD>By default, <B>rawtopgm</B> assumes the pixels in the input go top +to bottom, left to right. If you specify <B>-bt</B> or +<B>-bottomfirst</B>, <B>rawtopgm</B> assumes the pixels go bottom to +top, left to right. The Molecular Dynamics and Leica confocal format, +for example, use the latter arrangement. + +<P>If you don't specify <B>-bt</B> when you should or vice versa, the +resulting image is upside down, which you can correct with +<B>pamflip</B>. + +<P>This option causes <B>rawtopgm</B> to read the entire input stream +into storage at once, which may take a lot of storage. Ordinarly, +<B>rawtopgm</B> stores only one row at a time. + +<P>For backwards compatibility, <B>rawtopgm</B> also accepts <B>-tb +</B> and <B>-topbottom</B> to mean exactly the same thing. The +reasons these are named backwards is that the original author thought +of it as specifying that the wrong results of assuming the data is top +to bottom should be corrected by flipping the result top for bottom. +Today, we think of it as simply specifying the format of the input +data so that there are no wrong results. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgm.html">pgm</A></B>, + +<B><A HREF="rawtoppm.html">rawtoppm</A></B>, + +<B><A HREF="pamflip.html">pamflip</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHORS</H2> + +Copyright (C) 1989 by Jef Poskanzer. +<BR> + +Modified June 1993 by Oliver Trepte, <A +HREF="mailto:oliver@fysik4.kth.se">oliver@fysik4.kth.se</A> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHORS</A> +</UL> +</BODY> +</HTML> diff --git a/rawtoppm.html b/rawtoppm.html new file mode 100644 index 00000000..a1a8edeb --- /dev/null +++ b/rawtoppm.html @@ -0,0 +1,109 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rawtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>rawtoppm</H1> +Updated: 06 February 1991 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +rawtoppm - convert a stream of raw RGB bytes to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>rawtoppm</B> + +[<B>-headerskip</B> <I>N</I>] + +[<B>-rowskip</B> <I>N</I>] + +[ +<B>-rgb</B>|<B>-rbg</B>|<B>-grb</B> +|<B>-gbr</B>|<B>-brg</B>|<B>-bgr</B> +] + +[<B>-interpixel</B>|<B>-interrow</B>] + +<I>width</i> <i>height</I> + +[<I>imagedata</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>rawtoppm</b> reads raw RGB bytes as input and produces a PPM +image as output. The input file is just RGB bytes. You have to +specify the width and height on the command line, since the program +obviously can't get them from the file. <b>rawtoppm</b> assumes the +maxval of the input samples is 255, and makes the maxval of the output +PPM 255. + +<p><b>rawtoppm</b> assumes the pixels come top first in the input stream. +If they are actually bottom first, the resulting PPM is upside down, so +run it through <b>pamflip -tb</b>. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-headerskip</B> + +<DD>Skip over this many bytes at the beginning of the input stream. +Use this option when the input has some kind of header followed by +a raster suitable for <b>rawtoppm</b>. + +<DT><B>-rowskip</B> + +<DD>Skip this many bytes at the end of each row of the raster. (Some +input streams have padding at the end of rows). + +<DT><B>-rgb -rbg -grb -gbr -brg -bgr</B> + +<DD>This option specifies the order of the color components for each +pixel. The default is <B>-rgb</B>. + +<DT><B>-interpixel -interrow</B> + +<DD>These options specify how the colors are interleaved. The default +is <B>-interpixel</B>, meaning interleaved by pixel. A byte of red, a +byte of green, and a byte of blue, or whatever color order you +specified. <B>-interrow</B> means interleaved by row - a row of red, +a row of green, a row of blue, assuming standard rgb color order. An +<B>-interplane</B> option - all the red pixels, then all the green, +then all the blue - would be an obvious extension, but is not +implemented. You could get the same effect by splitting the file into +three parts (perhaps using <b>dd</b>), turning each part into a PGM +file with <b>rawtopgm</b>, and then combining them with <b>rgb3toppm</b>. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppm.html">ppm</A>, +<A HREF="rawtopgm.html">rawtopgm</A>, +<A HREF="rgb3toppm.html">rgb3toppm</A>, +<A HREF="pamflip.html">pamflip</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/rgb3toppm.html b/rgb3toppm.html new file mode 100644 index 00000000..61073083 --- /dev/null +++ b/rgb3toppm.html @@ -0,0 +1,58 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rgb3toppm User Manual</TITLE></HEAD> +<BODY> +<H1>rgb3toppm</H1> +Updated: 15 February 1990 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +rgb3toppm - combine three PGM images (R, G, B) into one PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>rgb3toppm</B> + +<I>redpgmfile</I> +<I>greenpgmfile</I> +<I>bluepgmfile</I> + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>rgb3toppm</B> reads three PGM images as input, taking each to +represent one component (red, green, and blue) of a color image. It +produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtorgb3.html">ppmtorgb3</A>, +<A HREF="pamstack.html">pamstack</A>, +<A HREF="pgmtoppm.html">pgmtoppm</A>, +<A HREF="ppmtopgm.html">ppmtopgm</A>, +<A HREF="ppm.html">ppm</A>, +<A HREF="pgm.html">pgm</A> + + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/rlatopam.html b/rlatopam.html new file mode 100644 index 00000000..b3467ed9 --- /dev/null +++ b/rlatopam.html @@ -0,0 +1,59 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rlatopam User Manual</TITLE></HEAD> +<BODY> +<H1>RLATOPAM</H1> +Updated: 13 January 2006 +<BR> +<A HREF="#index">Table Of Contents</A> +<H2>NAME</H2> + +rlatopam - convert Alias/Wavefront RLA and RPF image files +to PAM image files. + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>rlatopam</B> + +[<I>rlafile</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>rlatopam</b> converts an Alias RLA (run-length encoded type A) +or RPF (rich pixel format) image to a PAM image file. The output PAM +file can be grayscale or RGB, with or without an alpha channel. + +<p><i>rlafile</i> is the file name of the input file. If you omit this +parameter, <b>rlatopam</b> reads the image from Standard Input. + +<p>There is no program in Netpbm that converts the other direction.x + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pam.html">pam</A></B> + +<h2 id="history">HISTORY</h2> + +<p><b>rlatopam</b> was new in Netpbm 10.32 (February 2006). + +<H2 id="author">AUTHOR</H2> + +Simon Walton +<br> +Matte World Digital +<br> + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/rletopnm.html b/rletopnm.html new file mode 100644 index 00000000..f1520cf7 --- /dev/null +++ b/rletopnm.html @@ -0,0 +1,147 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Rletopnm User Manual</TITLE></HEAD> +<BODY> +<H1>RLETOPNM</H1> +Updated: 13 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> +<H2>NAME</H2> + +rletopnm - convert a Utah Raster Tools RLE image file to a PNM image file. + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>rletopnm</B> + +[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] +[<B>--headerdump</B>|<B>-h</B>] + +[<B>--verbose</B>|<B>-v</B>] + +[<I>rlefile</I>|<B>-</B>] + +<P>All options may be abbreviated to their minimum unique abbreviation +and options and arguments may be in any order. + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>rletopnm</b> converts Utah Raster Toolkit RLE image files to PNM +image files. <B>rletopnm</B> handles four types of RLE files: +Grayscale (8 bit data, no color map), Pseudocolor (8 bit data with a +color map), Truecolor (24 bit data with color map), and Directcolor +(24 bit data, no color map). <B>rletopnm</B> generates a PPM file for +all these cases except for the Grayscale file, for which +<B>rletopnm</B> generates a PGM file. + +<P><I>rlefile</I> is the RLE input file. If it is absent or <B>-</B>, +the input comes from Standard Input. + +<H2 id="options">OPTIONS</H2> + +<DL COMPACT> +<DT><B>--alphaout=</B><I>alpha-filename</I> + +<DD> +<B>rletopnm </B> creates a PGM (portable graymap) file containing the +alpha channel values in the input image. If the input image doesn't +contain an alpha channel, the <I>alpha-filename</I> file contains all +zero (transparent) alpha values. If you don't specify +<B>--alphaout</B>, <B>rletopnm</B> does not generate an alpha file, +and if the input image has an alpha channel, <B>rletopnm</B> simply +discards it. + +<P>If you specify <B>-</B> as the filename, <B>rletopnm</B> writes the +alpha output to Standard Output and discards the image. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +<DT><B>--verbose</B> + +<DD>This option causes <B>rletopnm </B> to operate in verbose mode. +It prints messages about what it's doing, including the contents of +the RLE image header, to Standard Error. + +<DT><B>--headerdump</B> + +<DD>This option causes <B>rletopnm</B> to operate in header dump mode. +It prints the contents of the RLE image header to Standard Error, but +does not produce any other output. + +</DL> + +<H2 id="examples">EXAMPLES</H2> + +<ul> +<li>While running in verbose mode, convert lenna.rle to PPM format and +store the resulting image as lenna.ppm: + +<pre> +<kbd> + rletopnm --verbose lenna.rle >lenna.ppm +</kbd> +</pre> + +<li>Dump the header information of the RLE file called file.rle: + +<pre> +<kbd> + rletopnm --headerdump file.rle +</kbd> +</pre> + +<li>Convert RLE file dart.rle to PPM format as dart.ppm. Store the +alpha channel of dart.rle as dartalpha.pgm (if dart.rle doesn't have +an alpha channel, store a fully transparent alpha mask as +dartalpha.pgm): + +<pre> +<kbd> + rletopnm --alphaout=dartalpha.pgm dart.rle >dart.ppm +</kbd> +</pre> + +</ul> + +<H2 id="seealso">SEE ALSO</H2> + +<B><A HREF="pnmtorle.html">pnmtorle</A></B>, + +<B><A HREF="pnmconvol.html">pnmconvol</A></B>, + +<B><A HREF="pnm.html">pnm</A></B>, + +<B><A HREF="ppm.html">ppm</A></B>, + +<B><A HREF="pgm.html">pgm</A></B>, + +<H2 id="author">AUTHOR</H2> + +Wes Barris +<BR> + +Army High Performance Computing Research Center (AHPCRC) +<BR> + +Minnesota Supercomputer Center, Inc. + +<P>Modifications by Eric Haines to support raw and plain formats. + +<P>Modifications by Bryan Henderson to create alpha files and use +mnemonic options. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#examples">EXAMPLES</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#author">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/sbigtopgm.html b/sbigtopgm.html new file mode 100644 index 00000000..400bcafe --- /dev/null +++ b/sbigtopgm.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Sbigtopgm User Manual</TITLE></HEAD> +<BODY> +<H1>sbigtopgm</H1> +Updated: 23 January 98 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +sbigtopgm - convert an SBIG CCDOPS file to PGM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>sbigtopgm</B> + +[<I>sbigfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>sbigtopgm</b> reads an an image file in the native format used +by the Santa Barbara Instrument Group (SBIG) astronomical CCD cameras, +and produces a PGM image as output. Additional information on SBIG +cameras and documentation of the file format is available at the Web +site, <A HREF="http://www.sbig.com/">http://www.sbig.com/</A>. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pgm.html">pgm</A></B> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +John Walker (<B><A +HREF="http://www.fourmilab.ch/">http://www.fourmilab.ch/</A></B>), +January 1998. This program is in the public domain. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/sgitopnm.html b/sgitopnm.html new file mode 100644 index 00000000..c0f23f01 --- /dev/null +++ b/sgitopnm.html @@ -0,0 +1,86 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Sgitopnm User Manual</TITLE></HEAD> +<BODY> +<H1>sgitopnm</H1> +Updated: 29 Jul 2000 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +sgitopnm - convert a SGI image file to PNM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>sgitopnm</B> + +[<B>-verbose</B>] + +[<B>-channel</B> <I>c</I>] + +[<I>SGIfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>sgitopnm</b> reads an SGI image file as input and produces a PGM +image for a 2-dimensional (1 channel) input file, and a PPM image for +a 3-dimensional (3 or more channels) input file. + +<P>Alternatively, the program produces a PGM image of any one of the +channels in the input file. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-verbose</B> + +<DD>Give some information about the SGI image file. + +<DT><B>-channel</B> <I>c</I> + +<DD>Extract channel <I>c</I> of the image as a PGM image. Without +this option, <B>sgitopnm</B> extracts the first 3 channels as a PPM +image or, if the input has only 1 channel, extracts that as a PGM +image, and if the input has 2 channels, fails. + +</DL> + +<A NAME="lbAF"> </A> +<H2>REFERENCES</H2> + +SGI Image File Format documentation (draft v0.95) by Paul Haeberli (<A +HREF="mailto:paul@sgi.com">paul@sgi.com</A>). Available via ftp at +sgi.com:graphics/SGIIMAGESPEC. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnm.html">pnm</A></B>, + +<B><A HREF="pnmtosgi.html">pnmtosgi</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1994 by Ingo Wilken (<A +HREF="mailto:Ingo.Wilken@informatik.uni-oldenburg.de">Ingo.Wilken@informatik.uni-oldenburg.de</A>) + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">REFERENCES</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/sirtopnm.html b/sirtopnm.html new file mode 100644 index 00000000..f42148cc --- /dev/null +++ b/sirtopnm.html @@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Sirtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>sirtopnm</H1> +Updated: 20 March 1991 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +sirtopnm - convert a Solitaire file to PNM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>sirtopnm</B> + +[<I>sirfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>sirtopnm</b> reads a Solitaire Image Recorder file as input and +produces a PNM image as output. The type of the output file depends +on the input file - if it's an MGI TYPE 17 file, <b>sirtopnm</b> +generates a PGM file. If it's an MGI TYPE 11 file, <b>sirtopnm</b> +generates PPM. The program tells you which type it is writing. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtosir.html">pnmtosir</A>, +<A HREF="pnm.html">pnm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Marvin Landis. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> + diff --git a/sldtoppm.html b/sldtoppm.html new file mode 100644 index 00000000..a5408626 --- /dev/null +++ b/sldtoppm.html @@ -0,0 +1,187 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Sldtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>sldtoppm</H1> +Updated: 10 October 1991 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +sldtoppm - convert an AutoCAD slide file to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>sldtoppm</B> +[<B>-adjust</B>] +[<B>-dir</B>] +[{<B>-height</B>|<B>-ysize</B>} <I>s</I>] +[<B>-info</B>] +[{<B>-lib</B>|<B>-Lib</B>} <I>name</I>] +[<B>-scale</B> <I>s</I>] +[<B>-verbose</B>] +[{<B>-width</B>|<B>-xsize</B>} <I>s</I>] +[<I>slidefile</I>] + +<P>All options can be abbreviated to their shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>sldtoppm</b> reads an AutoCAD® slide file and outputs a PPM +image. If you don't specify <I>slidefile</I>, <b>sldtoppm</b> reads +input from Standard Input. <b>sldtoppm</b> uses the <b>ppmdraw</b> +library to convert the vector and polygon information in the slide +file to a raster; see the file <b>ppmdraw.h</b> for details on this +package. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-adjust</B> + +<DD>If the display on which the slide file was created had non-square +pixels, when you process the slide with <B>sldtoppm</B> and don't +specify <B>-adjust</B>, <b>sldtoppm</b> issues the following warning; + +<blockquote> +Warning - pixels on source screen were non-square. +</blockquote> + +<p>Specifying <B>-adjust</B> will correct the image width to +compensate. Specifying the <B>-adjust</B> option causes +<B>sldtoppm</B> to scale the width of the image so that pixels in the +resulting portable pixmap are square (and hence circles appear as true +circles, not ellipses). The scaling is performed in the vector +domain, before scan converting the objects. The results are, +therefore, superior in appearance to what you'd obtain were you to +perform the equivalent scaling with <B>pamscale</B> after the bitmap +had been created. + +<DT><B>-dir</B> + +<DD>The input is assumed to be an AutoCAD slide library file. A +directory listing each slide in the library is printed on standard +error. + +<DT><B>-height</B> <I>size</I> + +<DD>Scales the image in the vector domain so it is <I>size</I> pixels +in height. If you don't specify <B>-width</B> or <B>-xsize</B>, +<b>sldtoppm</b> adjusts the width to preserve the pixel aspect ratio. + +<DT><B>-info</B> + +<DD>Dump the slide file header on standard error, displaying the original +screen size and aspect ratio among other information. + +<DT><B>-lib</B> <I>name</I> + +<DD>Extracts the slide with the given <I>name</I> from the slide +library given as input. <b>sldtoppm</b> converts the specified +<I>name</I> to upper case. + +<DT><B>-Lib</B><I> name</I> + +<DD>Extracts the slide with the given <I>name</I> from the slide +library given as input. <b>sldtoppm</b> uses <I>name</I> in the case +specified; it does not convert it to upper case. + +<DT><B>-scale</B> <I>s</I> + +<DD>Scales the image by factor <I>s</I>, which may be any floating +point value greater than zero. <b>sldtoppm</b> does the scaling after +aspect ratio adjustment, if any. Since it does the scaling in the +vector domain, before rasterisation, the results look much better than +running the output of <B>sldtoppm</B> through <B>pamscale</B>. + +<DT><B>-verbose</B> + +<DD>Dumps the slide file header and lists every vector and polygon +to Standard Error. + +<DT><B>-width</B> <I>size</I> + +<DD>Scales the image in the vector domain so it is <I>size</I> pixels +wide. If you don't specify <B>-height</B> or <B>-ysize</B>, +<b>sldtoppm</b> adjusts the height to preserve the pixel aspect ratio. + +<DT><B>-xsize</B> <I>size</I> + +<DD>Scales the image in the vector domain so it is <I>size</I> pixels +wide. If you don't specify <B>-height</B> or <B>-ysize</B>, +<b>sldtoppm</b> adjusts the height to preserve the pixel aspect ratio. + +<DT><B>-ysize</B> <I>size</I> + +<DD>Scales the image in the vector domain so it is <I>size</I> pixels +in height. If you don't specify <B>-width</B> or <B>-xsize</B>, +<b>sldtoppm</b> adjusts the width to preserve the pixel aspect ratio. + +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p><b>sldtoppm</b> can convert only Level 2 slides. Level 1 format +has been obsolete since the advent of AutoCAD Release 9 in 1987, and +was not portable across machine architectures. + +<P>Slide library items with names containing 8 bit (such as ISO) or 16 +bit (Kanji, for example) characters may not be found when chosen with +the <B>-lib</B> option unless <B>sldtoppm</B> was built with character +set conversion functions appropriate to the locale. You can always +retrieve slides from libraries regardless of the character set by +using the <B>-Lib</B> option and specifying the precise name of +library member. Use the <B>-dir</B> option to list the slides in a +library if you're unsure of the exact name. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +AutoCAD Reference Manual: <I>Slide File Format</I>, + +<B><A HREF="pamscale.html">pamscale</A></B>, + +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<PRE> +John Walker +Autodesk SA +Avenue des Champs-Montants 14b +CH-2074 MARIN +Suisse/Schweiz/Svizzera/Svizra/Switzerland + <B>Usenet:</B><A HREF="mailto:kelvin@Autodesk.com">kelvin@Autodesk.com</A> + <B>Fax:</B>038/33 88 15 + <B>Voice:</B>038/33 76 33 +</PRE> + +<P> +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +without any conditions or restrictions. This software is provided +"as is" without express or implied warranty. + +<P>AutoCAD and Autodesk are registered trademarks of Autodesk, Inc. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">BUGS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/spctoppm.html b/spctoppm.html new file mode 100644 index 00000000..5e9ba684 --- /dev/null +++ b/spctoppm.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Spctoppm User Manual</TITLE></HEAD> +<BODY> +<H1>spctoppm</H1> +Updated: 19 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +spctoppm - convert an Atari compressed Spectrum file to a PPM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>spctoppm</B> + +[<I>spcfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>spctoppm</b> reads an Atari compressed Spectrum file as input +and produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="sputoppm.html">sputoppm</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/spottopgm.html b/spottopgm.html new file mode 100644 index 00000000..ff51fbac --- /dev/null +++ b/spottopgm.html @@ -0,0 +1,102 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Spottopgm User Manual</TITLE></HEAD> +<BODY> +<H1>spottopgm</H1> +Updated: 22 July 2004 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +spottopgm - convert SPOT satellite images to a PGM image + +<A NAME="lbAC"> </A> +<H2>SYNTAX</H2> + +<b>spottopgm</b> +[<b>-1</b>|<b>-2</b>|<b>-3</b>] +[<i>Firstcol</i> <i>Firstline</i> <i>Lastcol</i> <i>Lastline</i>] +<i>inputfile</i> + +<A NAME="lbAD"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-1</b> +<DT><B>-2</b> +<DT><B>-3</b> + +<DD>Extract the given color from the SPOT image. The colors are +infrared, visible light, and ultraviolet, although I don't know which +corresponds to which number. If the image is in color, +<b>spottopgm</b> announces this on Standard Error. The default color +is 1. + + +</dl> + +<A NAME="parameters"> </A> +<H2>PARAMETERS</H2> +<DL> + +<DT><I>Firstcol Firstline Lastcol Lastline</I> + +<DD>Extract the specified rectangle from the SPOT image. Most SPOT +images are 3000 lines long and 3000 or more columns +wide. Unfortunately, the SPOT format only gives the width and not the +length. The width is printed on standard error. The default +rectangle is the width of the input image by 3000 lines. + +</DL> + +<A NAME="lbAE"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<b>spottopgm</b> converts the named <B>inputfile</B> to PGM format, +defaulting to the first color and the whole SPOT image unless +you specify otherwise with the options. + +<A NAME="lbAG"> </A> +<H2>LIMITATIONS</H2> + +<P><B>spottopgm</B> doesn't determine the length of the input file; +this would involve two passes over the input file. It defaults to +3000 lines instead. + +<P><B>spottopgm</b> could extract a three-color image (as a PPM), but +I didn't feel like making the program more complicated than it is now. +Besides, there is no one-to-one correspondence between red, green, +blue and infrared, visible and ultraviolet. + +<P>I've had only a limited number of SPOT images to play with, and +therefore wouldn't guarantee that this will work on any other images. + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +Warren Toomey <A +HREF="mailto:wkt@csadfa.cs.adfa.oz.au">wkt@csadfa.cs.adfa.oz.au</A> + +<A NAME="lbAI"> </A> +<H2>SEE ALSO</H2> + +<P><B><A HREF="pgm.html">pgm</A></B> + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNTAX</A> +<LI><A HREF="#lbAD">OPTIONS</A> +<LI><A HREF="#lbAE">DESCRIPTION</A> +<LI><A HREF="#lbAG">LIMITATIONS</A> +<LI><A HREF="#lbAH">AUTHOR</A> +<LI><A HREF="#lbAI">SEE ALSO</A> +</UL> +</BODY> +</HTML> diff --git a/sputoppm.html b/sputoppm.html new file mode 100644 index 00000000..2d75322f --- /dev/null +++ b/sputoppm.html @@ -0,0 +1,51 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Sputoppm User Manual</TITLE></HEAD> +<BODY> +<H1>sputoppm</H1> +Updated: 19 July 1990 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +sputoppm - convert an Atari uncompressed Spectrum file to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>sputoppm</B> + +[<I>spufile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>sputoppm</b> reads an Atari uncompressed Spectrum file as input +and produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="spctoppm.html">spctoppm</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1991 by Steve Belczyk (<A +HREF="mailto:seb3@gte.com">seb3@gte.com</A>) and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/testimg.png b/testimg.png new file mode 100644 index 00000000..bccf3372 --- /dev/null +++ b/testimg.png Binary files differdiff --git a/testimg_histbar.png b/testimg_histbar.png new file mode 100644 index 00000000..cb804fcd --- /dev/null +++ b/testimg_histbar.png Binary files differdiff --git a/testimg_histdot.png b/testimg_histdot.png new file mode 100644 index 00000000..26898cd9 --- /dev/null +++ b/testimg_histdot.png Binary files differdiff --git a/tgatoppm.html b/tgatoppm.html new file mode 100644 index 00000000..eb81944e --- /dev/null +++ b/tgatoppm.html @@ -0,0 +1,87 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Tgatoppm User Manual</TITLE></HEAD> +<BODY> +<H1>tgatoppm</H1> +Updated: 02 April 2000 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +tgatoppm - convert TrueVision Targa file to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>tgatoppm</B> + +[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] + +[<B>--headerdump</B>] + +<I>tga-filename</I> + +<P>All options can be abbreviated to their shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>tgatoppm</b> reads a TrueVision Targa file as input and produces +a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> + +<DT><B>--alphaout=</B><I>alpha-filename</I> + +<DD><B>tgatoppm </B> creates a PGM image containing the alpha channel +values in the input image. If the input image doesn't contain an +alpha channel, the <I>alpha-filename</I> file contains all zero +(transparent) alpha values. If you don't specify <B>--alphaout</B>, +<B>tgatoppm</B> does not generate an alpha file, and if the input +image has an alpha channel, <B>tgatoppm</B> simply discards it. + +<P>If you specify <B>-</B> as the filename, <B>tgatoppm</B> writes the +alpha output to Standard Output and discards the image. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +<DT><B>--headerdump</B> + +<DD>Causes <b>tgatoppm</b> to dump information from the TGA header to +Standard Error. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtotga.html">ppmtotga</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p>Partially based on tga2rast, version 1.0, by Ian J. MacPhedran. + +<P>Copyright (C) 1989 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/thinkjettopbm.html b/thinkjettopbm.html new file mode 100644 index 00000000..0dd985ee --- /dev/null +++ b/thinkjettopbm.html @@ -0,0 +1,70 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Thinkjettopbm User Manual</TITLE></HEAD> +<BODY> +<H1>thinkjettopbm</H1> +Updated: 03 April 2001 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +thinkjettopbm - convert HP ThinkJet printer commands file to PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>thinkjettopbm</B> + +[<b>-d</b>] + +[<I>thinkjet_file</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>thinkjettopbm</b> reads HP ThinkJet printer commands from the +standard input, or <I>thinkjet_file</I> if specified, and writes a PBM +image to Standard Output. <p><b>thinkjettopbm</b> silently ignores +text and non-graphics command sequences. + +<P>The <B>-d</B> option turns on debugging messages which are written +to the standard error stream. + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +<P>The program handles only a small subset of ThinkJet command +sequences, but enough to convert screen images from older HP test +equipment. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<b><a href="pnmtopclxl.html">pnmtopclx.html</a></b>, +<b><a href="pbmtolj.html">pbmtolj.html</a></b>, +<b><a href="ppmtolj.html">ppmtopj</a></b>, +<b><a href="ppmtopj.html">ppmtopj</a></b>, +<b><a href="thinkjettopbm.html">thinkjettopbm</a></b>, +<B><A HREF="pbm.html">pbm</A></B>, +<B><A HREF="pjtoppm.html">pjtoppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2001 by W. Eric Norum + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">BUGS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/tifftopnm.html b/tifftopnm.html new file mode 100644 index 00000000..b43e1f5c --- /dev/null +++ b/tifftopnm.html @@ -0,0 +1,300 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Tifftopnm User Manual</TITLE></HEAD> +<BODY> +<H1>tifftopnm</H1> +Updated: 27 March 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +tifftopnm - convert a TIFF file into a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>tifftopnm</B> + +[<B>-alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] +[<B>-headerdump</B>] +<br> +[<B>-respectfillorder</B>] +[<B>-byrow</B>] +[<I>tiff-filename</I>] + +<P>You may abbreviate any option to its shortest unique prefix. You may use +two hyphens instead of one in options. You may separate an option and +its value either by an equals sign or white space. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>tifftopnm</b> reads a TIFF file as input and produces a PNM image +as output. The type of the output file depends on the input file - if +it's black & white, generates a PBM image; if it's grayscale, +generates a PGM image; otherwise, a PPM image. The program tells you +which type it is writing. + +<p>If the TIFF file contains multiple images (multiple +"directories,"), <b>tifftopnm</b> generates a multi-image PNM +output stream. Before Netpbm 10.27 (March 2005), however, it would +just ignore all but the first input image. + +<P>This program cannot read every possible TIFF file -- there are +myriad variations of the TIFF format. However, it does understand +monochrome and gray scale, RGB, RGBA (red/green/blue with alpha +channel), CMYK (Cyan-Magenta-Yellow-Black ink color separation), and +color palette TIFF files. An RGB file can have either single plane +(interleaved) color or multiple plane format. The program reads 1-8 +and 16 bit-per-sample input, the latter in either bigendian or +littlendian encoding. Tiff directory information may also be either +bigendian or littlendian. + +<p>There are many TIFF formats that <b>tifftopnm</b> can read only if +the image is small enough to fit in memory. <b>tifftopnm</b> uses the +TIFF library's TIFFRGBAImageGet() function to process the TIFF image +if it can get enough memory for TIFFRGBAImageGet() to store the whole +image in memory at once (that's what TIFFRGBAImageGet() does). If +not, <b>tifftopnm</b> uses a more primitive row-by-row conversion +strategy using the raw data returned by TIFFReadScanLine() and native +intelligence. That native intelligence does not know as many formats +as TIFFRGBAImageGet() does. And certain compressed formats simply +cannot be read with TIFFReadScanLine(). + +<P>Before Netpbm 10.11 (October 2002), <B>tifftopnm</b> never used +TIFFRGBAImageGet(), so it could not interpret many of the formats it +can interpret today. + +<P>There is no fundamental reason that this program could not read +other kinds of TIFF files even when they don't fit in memory all at +once. The existing limitations are mainly because no one has asked +for more. + +<P>The PNM output has the same maxval as the Tiff input, except that +if the Tiff input is colormapped (which implies a maxval of 65535) the +PNM output has a maxval of 255. Though this may result in lost +information, such input images hardly ever actually have more color +resolution than a maxval of 255 provides and people often cannot deal +with PNM files that have maxval > 255. By contrast, a +non-colormapped Tiff image that doesn't need a maxval > 255 doesn't +<EM>have</EM> a maxval > 255, so when <b>tifftopnm</b> sees a +non-colormapped maxval > 255, it takes it seriously and produces a +matching output maxval. + +<P>Another exception is where the TIFF maxval is greater than 65535, +which is the maximum allowed by the Netpbm formats. In that case, +<b>tifftopnm</b> uses a maxval of 65535, and you lose some information +in the conversion. + +<P>The <I>tiff-filename</I> argument names the regular file that +contains the Tiff image. If you specify "-" or don't +specify this argument, <B>tfftopnm</B> uses Standard Input. In either +case, the file must be seekable. That means no pipe, but any regular +file is fine. + + + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-alphaout=</B><I>alpha-filename</I> + +<DD><B>tifftopnm </B>creates a PGM file containing the alpha channel +values in the input image. If the input image doesn't contain an +alpha channel, the <I>alpha-filename</I> file contains all zero +(transparent) alpha values. If you don't specify <B>-alphaout</B>, + +<B>tifftopnm</B> does not generate an alpha file, and if the input +image has an alpha channel, <B>tifftopnm</B> simply discards it. + +<P>If you specify <B>-</B> as the filename, <B>tifftopnm</B> +writes the alpha output to Standard Output and discards the image. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +<DT><B>-respectfillorder</B> + +<DD>By default, <B>tifftopnm </B> ignores the "fillorder" +tag in the TIFF input, which means it may incorrectly interpret the +image. To make it follow the spec, use this option. For a lengthy +but engaging discussion of why <B>tifftopnm</B> works this way and how +to use the <B>-respectfillorder</B> option, see the note on fillorder +below. + +<DT><B>-byrow</B> + +<DD>This option can make <b>tifftopnm</b> run faster. + +<P><B>tifftopnm</B> has two different ways to do the conversion from Tiff +to PNM, using two different facilities of the TIFF library: + +<DL> + +<DT>Whole Image + +<DD>Decode the entire image into memory at once, using +TIFFRGBAImageGet(), then convert to PNM and output row by row. + +<DT>Row By Row +<DD>Read, convert, and output one row at a time using TIFFReadScanline(). + +</DL> + +<P>Whole Image is preferable because the Tiff library does more of the +work, which means it understands more of the Tiff format possibilities +now and in the future. Also, some compressed TIFF formats don't allow +you to extract an individual row. + +<P>Row By Row uses far less memory, which means with large images, it +can run in environments where Whole Image cannot and may also run +faster. And because Netpbm code does more of the work, it's possible +that it can be more flexible or at least give better diagnostic +information if there's something wrong with the TIFF. + +<P>In Netpbm, we stress function over performance, so by default we +try Whole Image first, and if we can't get enough memory for the +decoded image or TIFFRGBAImageGet() fails, we fall back to Row By Row. +But if you specify the <b>-byrow</b> option, <b>tifftopnm</b> will not +attempt Whole Image. If Row By Row does not work, it simply fails. + +<P>See <a href="#cmyk">Color Separation (CMYK) TIFFs</a> for a +description of one way Row By Row makes a significant difference in +your results. + +<p>Whole Image costs you precision when your TIFF image uses more than +8 bits per sample. TIFFRGBAImageGet() converts the samples to 8 bits. +<b>tifftopnm</b> then scales them back to maxval 65535, but the lower +8 bits of information is gone. + +<P>Before Netpbm 10.11 (October 2002), <B>tifftopnm</b> always did Row +By Row. Netpbm 10.12 always tried Whole Image first. <b>-byrow</b> +came in with Netpbm 10.13 (January 2003). + +<DT><B>-headerdump</B> + +<DD>Dump TIFF file information to stderr. This information may be useful +in debugging TIFF file conversion problems. + +</DL> + +<A NAME="lbAF"> </A> +<H2>NOTES</H2> + +<A NAME="lbAG"> </A> +<H3>Fillorder</H3> + +<P> +There is a piece of information in the header of a TIFF image called +"fillorder." The TIFF specification quite clearly states that this value +tells the order in which bits are arranged in a byte in the description +of the image's pixels. There are two options, assuming that the image has +a format where more than one pixel can be represented by a single byte: +1) the byte is filled from most significant bit to least significant bit +going left to right in the image; and 2) the opposite. +<P> +However, there is confusion in the world as to the meaning of +fillorder. Evidence shows that some people believe it has to do with +byte order when a single value is represented by two bytes. +<P> +These people cause TIFF images to be created that, while they use a +MSB-to-LSB fillorder, have a fillorder tag that says they used LSB-to-MSB. +A program that properly interprets a TIFF image will not end up with the +image that the author intended in this case. +<P> +For a long time, +<B>tifftopnm</B> + +did not understand fillorder itself and assumed the fillorder was +MSB-to-LSB regardless of the fillorder tag in the TIFF header. And as +far as I know, there is no legitimate reason to use a fillorder other +than MSB-to-LSB. So users of +<B>tifftopnm</B> + +were happily using those TIFF images that had incorrect fillorder tags. +<P> +So that those users can continue to be happy, +<B>tifftopnm</B> + +today continues to ignore the fillorder tag unless you tell it not to. +(It does, however, warn you when the fillorder tag does not say +MSB-to-LSB that the tag is being ignored). +<P> +If for some reason you have a TIFF image that actually has LSB-to-MSB +fillorder, and its fillorder tag correctly indicates that, you must use +the +<B>-respectfillorder</B> + +option on +<B>tifftopnm</B> + +to get proper results. +<P> +Examples of incorrect TIFF images are at <A HREF="ftp://weather.noaa.gov.">ftp://weather.noaa.gov.</A> They +are apparently created by a program called +<B>faxtotiff</B>. + +<P> +This note was written on January 1, 2002. + + +<a name="cmyk"></a> +<h3>Color Separation (CMYK) TIFFs</H3> + +<p>Some TIFF images contain color information in CMYK form, whereas PNM +images use RGB. There are various formulas for converting between these +two forms, and <b>tifftopnm</b> can use either of two. + +<p>The TIFF library (Version 3.5.4 from libtiff.org) uses +Y=(1-K)*(1-B) (similar for R and G) in its TIFFRGBAImageGet() service. +When <b>tifftopnm</b> works in Whole Image mode, it uses that service, +so that's the conversion you get. + +<p>But when <b>tifftopnm</b> runs in Row By Row mode, it does not use +TIFFRGBAImageGet(), and you get what appears to be more useful: +Y=1-(B+K). This is the inverse of what <b>pnmtotiffcmyk</b> does. + +<p>See the <b>-byrow</b> option for more information on Whole Image versus +Row By Row mode. + +<p>Before Netpbm 10.21 (March 2004), <b>tifftopnm</b> used the +Y=(1-K)*(1-B) formula always. + + +<A NAME="lbAH"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pnmtotiff.html">pnmtotiff</A></B>, +<B><A HREF="pnmtotiffcmyk.html">pnmtotiffcmyk</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="pnm.html">pnm</A></B> + +<A NAME="lbAI"> </A> +<H2>AUTHOR</H2> + +<p>Derived by Jef Poskanzer from tif2ras.c, which is Copyright (c) +1990 by Sun Microsystems, Inc. Author: Patrick J. Naughton (<A +HREF="mailto:naughton@wind.sun.com">naughton@wind.sun.com</A>). + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> + <LI><A HREF="#lbAB">NAME</A> + <LI><A HREF="#lbAC">SYNOPSIS</A> + <LI><A HREF="#lbAD">DESCRIPTION</A> + <LI><A HREF="#lbAE">OPTIONS</A> + <LI><A HREF="#lbAF">NOTES</A> + <UL> + <LI><A HREF="#lbAG">Fillorder</A> + <LI><A HREF="#cmyk">Color Separation (CMYK) TIFFs</A> + </UL> + <LI><A HREF="#lbAH">SEE ALSO</A> + <LI><A HREF="#lbAI">AUTHOR</A> + </UL> +</BODY> +</HTML> diff --git a/vidtoppm.html b/vidtoppm.html new file mode 100644 index 00000000..56142a15 --- /dev/null +++ b/vidtoppm.html @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD> +<TITLE>Vidtoppm User Manual</TITLE> +</HEAD><BODY> +<H1>vidtoppm</H1> +Updated: 2000 +<BR> +<H2>NAME</H2> +<B>vidtopppm</B> - archived but not working +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. +<p><b>vidtoppm</b> is supposed to convert Parallax XVideo JPEG +to sequence of PPM files. It's source code is part of the Netpbm package +for archival purposes, but it does not presently build because it requires +header files that aren't in the package. If someone comes up with a use +for <b>vidtoppm</b>, we might be able to make it work. + +<b>vidtoppm</b> was in the Berkeley MPEG encoder package from which +Netpbm's <b>ppmtompeg</b> was derived. + +</BODY> +</HTML> diff --git a/wbmptopbm.html b/wbmptopbm.html new file mode 100644 index 00000000..a6b9a8a5 --- /dev/null +++ b/wbmptopbm.html @@ -0,0 +1,61 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Wbmptopbm User Manual</TITLE></HEAD> +<BODY> +<H1>wbmptopbm</H1> +Updated: 19 November 1999 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +wbmptopbm - convert a wireless bitmap (wbmp) file to a PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>wbmptopbm</B> + +[<I>wbmpfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><b>wbmptopbm</b> reads a wbmp file as input and produces a PBM +image as output. + +<A NAME="lbAE"> </A> +<H2>LIMITATIONS</H2> + +<p><b>wbmptopbm</b> recognizes only WBMP type 0. This is the only +type specified in the WAP 1.1 specifications. + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pbm.html">pbm</A></B>, + +<B><A HREF="pbmtowbmp.html">pbmtowbmp</A></B>, + +Wireless Application Environment Specification. + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1999 Terje Sannum <<A +HREF="mailto:terje@looplab.com">terje@looplab.com</A>>. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">LIMITATIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/winicontoppm.html b/winicontoppm.html new file mode 100644 index 00000000..e5409fd2 --- /dev/null +++ b/winicontoppm.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Winicontoppm User Manual</TITLE></HEAD> +<BODY> +<H1>winicontoppm</H1> +Updated: 23 March 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +winicontoppm - convert a Windows .ico image into 1 or more PPM images + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>winicontoppm</B> +[<B>-writeands</B>] +[<B>-allicons</B>|<b>-bestqual</b>] +[<b>-multippm</b>] +[<b>-verbose</b>] +[<I>iconfile</I>] +[<I>ppmdestfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>winicontoppm</b> reads a Microsoft Windows .ico file and +converts it to one or more PPMs. + +<P>A Windows icon contains one or more images, at different resolutions +and color depths. Each image has an 'and' mask, which contains transparancy +data. + +<P>By default, the output goes to Standard Output. If you specify +<I>ppmdestfile</I>, output goes into one or more files named as +follows. If it's just one file (i.e. you specify the <B>-multippm</B> +option or don't specify <B>-allicons</B>), the file name is +<I>ppmdestfile</I><B>.ppm</B>. If it's multiple files, their file +names are <I>ppmdestfile</I><B>_1.ppm</B>, +<I>ppmdestfile</I><B>_2.ppm</B>, etc. <P> When you specify the +<B>-writeands</B> option, the file names above are modified to include +the string <B>xor</B> as in <I>ppmdestfile</I><B>_xor.ppm</B> or +<I>ppmdestfile</I><B>_xor_1.ppm</B>. + +<P><B>winicontoppm</b> can convert .ico images with 1, 4, 8, 24, or +32 bits per pixel. Before Netpbm 10.15 (April 2003), it could not handle +24 and 32. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-writeands</B> + +<DD>For each icon written, also write the 'and' (transparancy) mask as +a separate PBM file. It's name is of the form +<I>ppmdestfile</I><B>_and.pbm</B> or +<I>ppmdestfile</I><B>_and_1.pbm</B>. + +<DT><B>-allicons</B> + +<DD>Extract all images from the .ico file. + +<DT><B>-bestqual</B> + +<DD>Extract only the best quality (largest, then highest bpp) image +from the .ico file. + +<DT><B>-multippm</B> + +<DD>Write all PPMs to a single file. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtowinicon.html">ppmtowinicon</A></B>, +<B><A HREF="bmptopnm.html">bmptopnm</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 2000, 2003 by Lee Benfield. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/xbmtopbm.html b/xbmtopbm.html new file mode 100644 index 00000000..9b1a0dda --- /dev/null +++ b/xbmtopbm.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Xbmtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>xbmtopbm</H1> +Updated: 31 August 1988 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +xbmtopbm - convert an X11 or X10 bitmap to a PBM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>xbmtopbm</B> + +[<I>bitmapfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>xbmtopbm</b> reads an X11 or X10 bitmap as input and produces a +PBM image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtoxbm.html">pbmtoxbm</A>, +<A HREF="pbmtox10bm.html">pbmtox10bm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1988 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ximtoppm.html b/ximtoppm.html new file mode 100644 index 00000000..37509a79 --- /dev/null +++ b/ximtoppm.html @@ -0,0 +1,82 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ximtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>ximtoppm</H1> +Updated: April 2, 2000 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ximtoppm - convert an Xim file to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ximtoppm</B> + +[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] +[<I>ximfile</I>] + +<P>You can abbreviate any option to its shortest unique prefix. + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ximptoppm</b> reads an Xim file as input and produces a PPM +image as output. The Xim toolkit is included in the contrib tree of +the X.V11R4 release. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>--alphaout=</B><I>alpha-filename</I> + +<DD><B>ximtoppm</B> creates a PGM file containing the alpha channel +values in the input image. If the input image doesn't contain an +alpha channel, the <I>alpha-filename</I> file contains all zero +(transparent) alpha values. If you don't specify <B>--alphaout</B>, +<B>ximtoppm</B> does not generate an alpha file, and if the input +image has an alpha channel, <B>ximtoppm</B> simply discards it. + +<P>If you specify <B>-</B> as the filename, <B>ximtoppm</B> writes the +alpha output to Standard Output and discards the image. + +<P>Actually, an Xim image can contain an arbitrary fourth channel -- +it need not be an Alpha channel. <B>ximtoppm</B> extracts any fourth +channel it finds as described above; it doesn't matter if it is an +alpha channel or not. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +<p>Copyright (C) 1991 by Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/xpmtoppm.html b/xpmtoppm.html new file mode 100644 index 00000000..dbeed4ee --- /dev/null +++ b/xpmtoppm.html @@ -0,0 +1,101 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Xpmtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>xpmtoppm</H1> +Updated: 05 October 2005 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +xpmtoppm - convert an X11 pixmap to a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>xpmtoppm</B> + +[<B>--alphaout=</B>{<I>alpha-filename</I>,<B>-</B>}] +[<B>-verbose</B>] + +[<I>xpmfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>xpbtoppm</b> reads an X11 pixmap (XPM version 1 or 3) as input +and produces a PPM image as output. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>--alphaout=</B><I>alpha-filename</I> + +<DD><B>xpmtoppm</B> creates a PBM file containing the transparency +mask for the image. If the input image doesn't contain transparency +information, the <I>alpha-filename</I> file contains all white +(opaque) alpha values. If you don't specify <B>--alphaout</B>, +<B>xpmtoppm</B> does not generate an alpha file, and if the input +image has transparency information, <B>xpmtoppm</B> simply discards +it. + +<P>If you specify <B>-</B> as the filename, <B>xpmtoppm</B> writes the +alpha output to Standard Output and discards the image. + +<P>See <B><A HREF="pamcomp.html">pamcomp</A></B> for one way to use +the alpha output file. + +<p><b>xpmtoppm</b> can't handle a line longer than 8K characters in +the the XPM input. If an input line exceeds this limit, +<b>xpmtoppm</b> quits with an error message to that effect. Before +Netpbm 10.30 (October 2005), the limit was 2K. + +<DT><B>--verbose</B> + +<DD> +<B>xpmtoppm</B> prints information about its processing on Standard Error. + +</DL> + +<A NAME="lbAF"> </A> +<H2>LIMITATIONS</H2> + +<p>The recogized XPM version 3 features are limited. Comments can +only be single lines and there must be for every pixel a default +colorname for a color type visual. + +<A NAME="lbAG"> </A> +<H2>SEE ALSO</H2> + +<B><A HREF="ppmtoxpm.html">ppmtoxpm</A></B>, +<B><A HREF="pamcomp.html">pamcomp</A></B>, +<B><A HREF="ppm.html">ppm</A></B> + +<A NAME="lbAH"> </A> +<H2>AUTHOR</H2> + +<P>Copyright (C) 1991 by Jef Poskanzer. + +<P>Upgraded to work with XPM version 3 by +Arnaud Le Hors <<A +HREF="mailto:lehors@mirsa.inria.fr">lehors@mirsa.inria.fr</A>>, Tue +Apr 9 1991. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">LIMITATIONS</A> +<LI><A HREF="#lbAG">SEE ALSO</A> +<LI><A HREF="#lbAH">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/xvminitoppm.html b/xvminitoppm.html new file mode 100644 index 00000000..fe4eda19 --- /dev/null +++ b/xvminitoppm.html @@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Xvminitoppm User Manual</TITLE></HEAD> +<BODY> +<H1>xvminitoppm</H1> +Updated: 02 April 2006 +<BR> +<A HREF="#index">Table Of Contents</A> + +<H2>NAME</H2> + +xvminitoppm - convert an XV "thumbnail" picture to PPM + +<H2 id="synopsis">SYNOPSIS</H2> + +<B>xvminitoppm</B> + +[<I>xvminipic</I>] + +<H2 id="description">DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>xvminittoppm</b> reads an XV "thumbnail" picture (a +miniature picture generated by the "VisualSchnauzer" +browser) as input and produces a PPM image as output. + +<H2 id="seealso">SEE ALSO</H2> + +<A HREF="pamtoxvmini.html">pamtoxvmini</A>, +<A HREF="ppm.html">ppm</A>, +<b>xv</b> manual + +<h2 id="history">HISTORY</h2> + +<p>A program of this name was written in 1993 by Ingo Wilken and was +part of Netpbm until Release 10.34 (April 2006). At that time, it was +replaced in Netpbm by the current program, which was written by Bryan +Henderson. The function of the newer program is identical to that of +the older one; the reason for the replacement is that the newer one is +easier to maintain. + + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#synopsis">SYNOPSIS</A> +<LI><A HREF="#description">DESCRIPTION</A> +<LI><A HREF="#seealso">SEE ALSO</A> +<LI><A HREF="#history">HISTORY</A> +</UL> +</BODY> +</HTML> diff --git a/xwdtopnm.html b/xwdtopnm.html new file mode 100644 index 00000000..3b28615d --- /dev/null +++ b/xwdtopnm.html @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Xwdtopnm User Manual</TITLE></HEAD> +<BODY> +<H1>xwdtopnm</H1> +Updated: 21 October 2003 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> +xwdtopnm - convert an X11 or X10 window dump file to a PNM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>xwdtopnm</B> +[<b>-verbose</b>] +[<b>-headerdump</b>] +[<I>xwdfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>xwdtopnm</b> reads an X11 or X10 window dump file as input and +produces a PNM image as output. The type of the output image depends +on the input file - if it's black and white, the output is PBM. If +it's grayscale, the output is PGM. Otherwise, it's PPM. The program +tells you which type it is writing. + +<P>Using this program, you can convert anything you can display on an +X workstation's screen into a PNM image. Just display whatever you're +interested in, run the <b>xwd</b> program to capture the contents of +the window, run it through <b>xwdtopnm</b>, and then use <b>pamcut</b> +to select the part you want. + +<p>Note that a pseudocolor XWD image (typically what you get when you +make a dump of a pseudocolor X window) has maxval 65535, which means +the PNM file that <b>xwdtopnm</b> generates has maxval 65535. Many +older image processing programs (that aren't part of the Netpbm +package and don't use the Netpbm programming library) don't know how +to handle a PNM image with maxval greater than 255 (because there are +two bytes instead of one for each sample in the image). So you may +want to run the output of <b>xwdtopnm</b> through <b>pamdepth</b> +before feeding it to one of these old programs. + +<A NAME="options"> </A> +<H2>OPTIONS</H2> + +<dl> +<dt><b>-verbose</b> +<dd>This option causes <b>xwdtopnm</b> to display handy information about the +input image and the conversion process + +<dt><b>-headerdump</b> + +<dd>This option causes <b>xwdtopnm</b> to display the contents of the +X11 header. It has no effect when the input is X10. This option was +new in Netpbm 10.26 (December 2004). + +</dl> + + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnmtoxwd.html">pnmtoxwd</A>, +<A HREF="pnm.html">pnm</A>, +<b>xwd</b> man page + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1989, 1991 by Jef Poskanzer. + +<HR> + +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#options">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/ybmtopbm.html b/ybmtopbm.html new file mode 100644 index 00000000..d55cc08b --- /dev/null +++ b/ybmtopbm.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Ybmtopbm User Manual</TITLE></HEAD> +<BODY> +<H1>ybmtopbm</H1> +Updated: 06 March 1990 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +ybmtopbm - convert a Bennet Yee "face" file to PBM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>ybmtopbm</B> + +[<I>facefile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>ymtopbm</b> reads a file acceptable to the <b>face</b> and +<b>xbm</b> programs by Bennet Yee (<A +HREF="mailto:bsy+@cs.cmu.edu">bsy+@cs.cmu.edu</A>). and writes a PBM +image as output. + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pbmtoybm.html">pbmtoybm</A>, +<A HREF="pbm.html">pbm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +<P>Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +x<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/yuvsplittoppm.html b/yuvsplittoppm.html new file mode 100644 index 00000000..f5fc19da --- /dev/null +++ b/yuvsplittoppm.html @@ -0,0 +1,72 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Yuvsplittoppm User Manual</TITLE> +</HEAD><BODY> +<H1>yuvsplittoppm</H1> +Updated: 26 August 93 +<BR> +<A HREF="#index">Table Of Contents</A> + +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +yuvsplittoppm - convert separate Y, U, and V files into a PPM image + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>yuvsplittoppm </B> + +<I>basename</i> +<i>width</i> +<i>height</I> +[<b>-ccir601</b>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>yuvsplittoppm</b> reads three files, containing the YUV +components, as input. These files are <I>basename</I>.Y, +<I>basename</I>.U, and <I>basename</I>.V. Produces a portable pixmap +on stdout. + +<P>Since the YUV files are raw files, the dimensions <I>width</I> and +<I>height</I> must be specified on the command line. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-ccir601</B> + +<DD> +Assumes that the YUV triplets are scaled into the smaller range of the +CCIR 601 (MPEG) standard. Else, the JFIF (JPEG) standard is assumed. +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtoyuvsplit.html">ppmtoyuvsplit</A>, +<A HREF="yuvtoppm.html">yuvtoppm</A>, <A HREF="ppm.html">ppm</A> + +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Marcel Wijkstra <<A +HREF="mailto:wijkstra@fwi.uva.nl">wijkstra@fwi.uva.nl</A>>, based +on <b>ppmtoyuvsplit</b>. + +<HR> +<A NAME="index"> </A><H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/yuvtoppm.html b/yuvtoppm.html new file mode 100644 index 00000000..4c2fa594 --- /dev/null +++ b/yuvtoppm.html @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Yuvtoppm User Manual</TITLE></HEAD> +<BODY> +<H1>yuvtoppm</H1> +Updated: 25 March 91 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +yuvtoppm - convert Abekas YUV bytes to PPM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>yuvtoppm</B> + +<I>width</i> +<i>height</i> +[<I>imagedata</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<p><b>yuvtoppm</b> reads raw Abekas YUV bytes as input and produces a +PPM image as output. The input file is just YUV bytes. You have to +specify the width and height on the command line, since the program +obviously can't get them from the file. <b>yuvotppm</b> assumes the +maxval of the input is 255. + +<p>The <a href="ppmtoyuv.html"><b>ppmtoyuv</b> manual</a> tells a little +about the Abekas YUV format. + + +<A NAME="lbAE"> </A> +<H2>SEE ALSO</H2> + +<A HREF="ppmtoyuv.html">ppmtoyuv</A>, +<A HREF="ppm.html">ppm</A> + +<A NAME="lbAF"> </A> +<H2>AUTHOR</H2> + +Marc Boucher <<A +HREF="mailto:marc@PostImage.COM">marc@PostImage.COM</A>>, based on +Example Conversion Program, A60/A64 Digital Video Interface Manual, +page 69. + +<p>Copyright (C) 1991 by DHD PostImage Inc. + +<P>Copyright (C) 1987 by Abekas Video Systems Inc. + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">SEE ALSO</A> +<LI><A HREF="#lbAF">AUTHOR</A> +</UL> +</BODY> +</HTML> diff --git a/zeisstopnm.html b/zeisstopnm.html new file mode 100644 index 00000000..a6443222 --- /dev/null +++ b/zeisstopnm.html @@ -0,0 +1,71 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<HTML><HEAD><TITLE>Zeisstopnm User Manual</TITLE></HEAD> +<BODY> +<H1>zeisstopnm</H1> +Updated: 15 June 1993 +<BR> +<A HREF="#index">Table Of Contents</A> +<A NAME="lbAB"> </A> +<H2>NAME</H2> + +zeisstopnm - convert a Zeiss confocal file to PNM + +<A NAME="lbAC"> </A> +<H2>SYNOPSIS</H2> + +<B>zeisstopnm</B> + +[<b>-pgm</b> | <b>-ppm</b>] + +[<I>zeissfile</I>] + +<A NAME="lbAD"> </A> +<H2>DESCRIPTION</H2> + +<p>This program is part of <a href="index.html">Netpbm</a>. + +<P><B>zeisstopnm</B> reads a Zeiss confocal file as input and produces +a PNM image as output. + +<p>By default, the exact type of the output depends on the input file: +If it's grayscale a PGM image; otherwise a PPM. The program tells you +which type it is writing. You can override the default with the +<b>-pgm</b> and <b>-ppm</b> options. + +<A NAME="lbAE"> </A> +<H2>OPTIONS</H2> + +<DL COMPACT> +<DT><B>-pgm</B> + +<DD>Force the output to be in PGM format. + +<DT><B>-ppm</B> + +<DD> +Force the output to be in PPM format. + +</DL> + +<A NAME="lbAF"> </A> +<H2>SEE ALSO</H2> + +<A HREF="pnm.html">pnm</A> +<A NAME="lbAG"> </A> +<H2>AUTHOR</H2> + +Copyright (C) 1993 by Oliver Trepte + +<HR> +<A NAME="index"> </A> +<H2>Table Of Contents</H2> +<UL> +<LI><A HREF="#lbAB">NAME</A> +<LI><A HREF="#lbAC">SYNOPSIS</A> +<LI><A HREF="#lbAD">DESCRIPTION</A> +<LI><A HREF="#lbAE">OPTIONS</A> +<LI><A HREF="#lbAF">SEE ALSO</A> +<LI><A HREF="#lbAG">AUTHOR</A> +</UL> +</BODY> +</HTML> |