1 HELP See PBMplus and OVERVIEW. 1 OVERVIEW Enhanced portable bitmap toolkit. The PBMPLUS toolkit allows conversions between image files of different format. By means of using common intermediate formats, only 2 * N conversion filters are required to support N distinct formats, instead of the N**2 which would be required to convert directly between any one format and any other. The package also includes simple tools for manipulating portable bitmaps. The package consists of four upwardly compatible sections: pbm Supports monochrome bitmaps (1 bit per pixel). pgm Supports grayscale images. Reads either PBM or PGM formats and writes PGM format. ppm Supports full-color images. Reads either PBM, PGM, or PPM formats, writes PPM format. pnm Supports content-independent manipulations on any of the three formats listed above, as well as external formats having multiple types. Reads either PBM, PGM, or PPM formats, and generally writes the same type as it read (whenever a PNM tool makes an exception and ``promotes'' a file to a higher format, it informs the user). See PBMplus for more infomation. 1 PBMplus Enhanced portable bitmap toolkit. The PBMPLUS toolkit allows conversions between image files of different format. By means of using common intermediate formats, only 2 * N conversion filters are required to support N distinct formats, instead of the N**2 which would be required to convert directly between any one format and any other. The package also includes simple tools for manipulating portable bitmaps. The package consists of four upwardly compatible sections: pbm Supports monochrome bitmaps (1 bit per pixel). pgm Supports grayscale images. Reads either PBM or PGM formats and writes PGM format. ppm Supports full-color images. Reads either PBM, PGM, or PPM formats, writes PPM format. pnm Supports content-independent manipulations on any of the three formats listed above, as well as external formats having multiple types. Reads either PBM, PGM, or PPM formats, and generally writes the same type as it read (whenever a PNM tool makes an exception and ``promotes'' a file to a higher format, it informs the user). 2 Description_of_Contents A brief, one-line description of each of the individual programs in the PBMplus package. They are sorted by general type. 3 pbm atktopbm convert Andrew Toolkit raster object to portable bitmap brushtopbm convert Xerox doodle brushes to portable bitmap cmuwmtopbm convert CMU window manager format to portable bitmap g3topbm convert Group 3 FAX to portable bitmap icontopbm convert Sun icon to portable bitmap gemtopbm convert GEM .img format to portable bitmap macptopbm convert MacPaint to portable bitmap mgrtopbm convert MGR format to portable bitmap pktopbm convert packed (PK) format font into portable bitmap(s) pbmmerge merge wrapper routine pbmto10x convert portable bitmap to Gemini 10x printer graphics pbmto4425 convert portable bitmap to AT&T 4425 terminal pbmtoascii convert portable bitmap to ASCII graphic form pbmtoatk convert portable bitmap to Andrew Toolkit raster object pbmtobbnbg convert portable bitmap to BBN BitGraph graphics pbmtocmuwm convert portable bitmap to CMU window manager format pbmtoepson convert portable bitmap to Epson printer graphics pbmtog3 convert portable bitmap to Group 3 FAX pbmtogem convert portable bitmap into GEM .img file pbmtogo convert portable bitmap to GraphOn graphics pbmtoicon convert portable bitmap to Sun icon pbmtolj convert portable bitmap to HP LaserJet graphics pbmtoln03 convert portable bitmap to DEC LN03+ Laserprinter pbmtolps convert portable bitmap to PostScript pbmtomacp convert portable bitmap to MacPaint pbmtomgr convert portable bitmap to MGR format pbmtopgm convert portable bitmap to portable graymap by ave. areas pbmtopi3 convert portable bitmap to Atari Degas .pi3 pbmtopk convert portable bitmap into a packed (PK) format font pbmtoplot convert portable bitmap into Unix plot(5) file pbmtoptx convert portable bitmap to Printronix graphics pbmtoxbm convert portable bitmap to X11 bitmap pbmtox10bm convert portable bitmap to X10 bitmap pbmtoybm convert portable bitmap into Bennet Yee "face" file pbmtozinc convert portable bitmap to Zinc Interface Library icon pbmtoepsi convert portable bitmap into an encapsulated PostScript pi3topbm convert Atari Degas .pi3 to portable bitmap xbmtopbm convert X10 or X11 bitmap to portable bitmap ybmtopbm convert Bennet Yee "face" file into portable bitmap pbmclean flip isolated pixels in portable bitmap pbmlife apply Conway's rules of Life to a portable bitmap pbmmake create a blank bitmap of a specified size and color pbmmask create a mask bitmap from a regular bitmap pbmreduce reduce a portable bitmap N times, using Floyd-Steinberg pbmspcale enlarge a portable bitmap with edge smoothing pbmtext render text into a bitmap pbmupc create a Universal Product Code bitmap 3 pgm asciitopgm convert ASCII graphics into a portable graymap fstopgm convert Usenix FaceSaver format to portable graymap hipstopgm convert HIPS format to portable graymap lispmtopgm convert a Lisp Machine bitmap file into pgm format bioradtopgm convert a Biorad confocal file into a portable graymap psidtopgm convert PostScript "image" data to portable graymap rawtopgm convert raw grayscale bytes to portable graymap spottopgm convert SPOT satellite images to Portable Greymap format pgmtofs convert portable graymap to Usenix FaceSaver format pgmtolispm convert a portable graymap into Lisp Machine format pgmtopbm convert portable graymap to portable bitmap pgmbentley Bentleyize a portable graymap pgmcrater create cratered terrain by fractal forgery pgmedge edge-detect a portable graymap pgmenhance edge-enhance a portable graymap pgmhist print a histogram of the values in a portable graymap pgmkernel generate a convolution kernel pgmmerge merge wrapper routine pgmnoise create a graymap made up of white noise pgmnorm normalize contrast in a portable graymap pgmoil turn a portable graymap into an oil painting pgmramp generate a grayscale ramp pgmtexture calculate textural features on a portable graymap 3 ppm bmptoppm convert BMP file to portable pixmap gouldtoppm convert Gould scanner file to portable pixmap ilbmtoppm convert IFF ILBM to portable pixmap imgtoppm convert Img-whatnot to portable pixmap mtvtoppm convert MTV ray-tracer output to portable pixmap pcxtoppm convert PC Paintbrush format to portable pixmap pgmtoppm colorize a portable graymap into a portable pixmap pi1toppm convert Atari Degas .pi1 to portable pixmap picttoppm convert Macintosh PICT to portable pixmap pjtoppm convert HP PaintJet file to portable pixmap ppmtoacad convert portable pixmap to AutoCAD database or slide ppmtobmp convert portable pixmap to BMP file ppmtogif convert portable pixmap to GIF ppmtoicr convert portable pixmap to NCSA ICR graphics ppmtoilbm convert portable pixmap to IFF ILBM ppmtomitsu convert a portable pixmap to a Mitsubishi S340-10 file ppmtomap extract all colors from a portable pixmap ppmtopcx convert portable pixmap to PC Paintbrush format ppmtopgm convert portable pixmap to portable graymap ppmtopi1 convert portable pixmap to Atari Degas .pi1 ppmtopict convert portable pixmap to Macintosh PICT ppmtopj convert portable pixmap to HP PaintJet file ppmtopjxl convert portable pixmap to HP PaintJet XL PCL file ppmtopuzz convert portable pixmap to X11 "puzzle" file ppmtorgb3 separate a portable pixmap to three portable graymaps ppmtosixel convert portable pixmap to DEC sixel format ppmtotga convert portable pixmap to TrueVision Targa file ppmtouil convert portable pixmap to Motif UIL icon file ppmtoxpm convert portable pixmap to XPM format ppmtoyuv convert portable pixmap to Abekas YUV format qrttoppm convert QRT ray-tracer output to portable pixmap rawtoppm convert raw RGB bytes to portable pixmap rgb3toppm combine three portable graymaps to one portable pixmap sldtoppm convert an AutoCAD slide file into a portable pixmap spctoppm convert Atari compressed Spectrum to portable pixmap sputoppm convert Atari uncompressed Spectrum to portable pixmap tgatoppm convert TrueVision Targa file to portable pixmap ximtoppm convert Xim to portable pixmap xpmtoppm convert XPM format to portable pixmap xvminitoppm convert a XV "thumbnail" picture to PPM yuvtoppm convert Abekas YUV format to portable pixmap ppm3d convert 2 portable pixmap to a red/blue 3d glasses pixmap ppmbrighten change images Saturation and Value from an HSV map ppmchange change pixels of one color to another in a portable pixmap ppmdim dim a portable pixmap down to total blackness ppmdist simple grayscale for machine generated, color images ppmdither ordered dither for color images ppmflash brighten a picture up to complete white-out ppmforge fractal forgeries of clouds, planets, and starry skies ppmhist print a histogram of a portable pixmap ppmmake create a pixmap of a specified size and color ppmmix blend together two portable pixmaps ppmpat create a pretty pixmap ppmquant quantize colors down to a specified number ppmqvga 8 plane quantization ppmrelief run a Laplacian Relief filter on a portable pixmap ppmshift shift lines of a portable pixmap left or right by a random amount ppmspread displace a portable pixmap's pixels by a random amount 3 pnm pnmtoddif convert portable anymap to DDIF format pnmtofits convert a portable anymap into FITS format pnmtops convert portable anymap to PostScript pnmtorast convert portable anymap to Sun raster file pnmtotiff convert portable anymap to TIFF file pnmtoxwd convert portable anymap to X11 window dump fitstopnm convert a FITS file into a portable anymap rasttopnm convert Sun raster file to portable anymap tifftopnm convert TIFF file to portable anymap xwdtopnm convert X10 or X11 window dump to portable anymap pnmtosir convert a portable anymap into a Solitaire format sirtopnm convert a Solitaire file into a portable anymap zeisstopnm convert a Zeiss confocal file into a portable anymap pnmalias antialias a portable anyumap. pnmarith perform arithmetic on two portable anymaps pnmcat concatenate portable anymaps pnmcomp composite two portable anymap files together pnmconvol general MxN convolution on a portable anymap pnmcrop crop all like-colored borders off a portable anymap pnmcut select a rectangular region from a portable anymap pnmdepth change the maxval in a portable anymap pnmenlarge enlarge a portable anymap N times pnmfile describe a portable anymap pnmflip perform one or more flip operations on a portable anymap pnmgamma perform gamma correction on a portable anymap pnmhistmap draw a histogram for a PGM or PPM file pnminvert invert a portable anymap pnmnlfilt non-linear filters: smooth, alpha trim mean, optimal estimation smoothing, edge enhancement pnmnoraw force a portable anymap into ASCII format pnmpad add borders to portable anymap pnmpaste paste a rectangle into a portable anymap pnmrotate rotate a portable anymap pnmscale scale a portable anymap pnmshear shear a portable anymap pnmtile replicate a portable anymap into a specified size 2 See_Also There are a number of related image-manipulation tools: IM Raster Toolkit A portable and efficient format toolkit. The format supports pixels of arbitrary channels, components, and bit precisions, while allowing compression and machine byte-order independence. Support for image manipulation, digital halftoning, and format conversion. Previously distributed on tape c/o the University of Waterloo (an ftp version is to appear later). Author: Alan Paeth (awpaeth@watcgl.uwaterloo.ca). Utah RLE Toolkit Conversion and manipulation package, similar to PBMPLUS. Available via ftp as cs.utah.edu: pub/toolkit-2.0.tar.Z and ucsd.edu: graphics/utah-raster-toolkit.tar.Z. Fuzzy Pixmap Manipulation Conversion and manipulation package, similar to PBMPLUS. Version 1.0 available via ftp as nl.cs.cmu.edu: /usr/mlm/ftp/fbm.tar.Z, uunet.uu.net: pub/fbm.tar.Z, and ucsd.edu: graphics/fbm.tar.Z. Author: Michael Mauldin (mlm@nl.cs.cmu.edu). Img Software Set Reads and writes its own image format, displaying results on an X11 screen, and does some image manipulations. Version 1.3 is available via ftp as ftp.x.org:contrib/img_1.3.tar.Z, and venera.isi.edu:pub/img_1.3.tar.Z, along with a large collection of color images. Author: Paul Raveling (raveling@venera.isi.edu). Xim Reads and writes its own image format, displays on an X11 screen, and does some image manipulations. Available in your nearest X11R4 source tree as it contrib/clients/xim. A more recent version is available via ftp from video.mit.edu. It uses X11R4 and the OSF/Motif toolkit to provide basic interactive image manipulation and reads/writes GIF, xwd, xbm, tiff, rle, xim, and other formats. Author: Philip R. Thompson. xloadimage Reads in images in various formats and displays them on an X11 screen. Available via ftp as ftp.x.org:contrib/xloadimage*, and in your nearest comp.sources.x archive. Author: Jim Frost (madd@std.com). TIFF Software Nice portable library for reading and writing TIFF files, plus a few tools for manipulating them and reading other formats. Available via ftp as sgi.com:pub/graphics/*.tar.Z or uunet.uu.net:graphics/tiff.tar.Z. Author: Sam Leffler (sam@sgi.com). ALV A Sun-specific image toolkit. Version 2.0.6 posted to comp.sources.sun on 11 December 1989. Also available via email to alv-users-request@cs.bris.ac.uk. popi An image manipulation language. Version 2.1 posted to comp.sources.misc on 12 December 1989. ImageMagick X11 package for display and interactive manipulation of images. Uses its own format (MIFF), and includes some converters. Available via ftp as ftp.x.org:contrib/ImageMagick.tar.Z. Khoros Huge (~100 meg) graphical development environment based on X11R4. Components include a visual programming language, code generators for extending the visual language and adding new application packages to the system, an interactive user interface editor, an interactive image display package, an extensive library of image and signal processing routines, and 2D/3D plotting packages. Available via ftp as pprg.unm.edu:pub/khoros/*. JPEG package JPEG is a a standardized compression method for full-color and gray-scale images of "real-world" scenes; this experimental package includes programs to compress gif and ppm format files to JPEG format ( cjpeg(1L)), and to decompress them (djpeg(1L)). Available by ftp as uunet.uu.net:graphics/jpeg/jpegsrc.v1.tar.Z. libpbm(3L), libpgm(3L), libpnm(3L), libppm(3L), pbm(5L), pgm(5L), pnm(5L), ppm(5L), rasterfile(1) 2 Author Distribution of 1 December 1991. Copyright 1989, 1991 by Jef Poskanzer. Feedback and questions are welcome. Please send them to: jef@well.sf.ca.us apple!well!jef When sending bug reports, always include the output from running any pbmplus program with the -version flag, including descriptions of the type of system you are on, the compiler you use, and whether you are using Makefiles or Imakefiles. When suggesting new formats or features, please include whatever documentation you have, and a uuencoded sample. The response time will depend upon my schedule and the complexity of the task; if you need it right away, or it is a complicated job, you might consider paying me. The Usenet newsgroup alt.graphics.pixutils is a forum for discussion of image conversion and editing packages. Posting queries there may be better than mailing them to me, since it allows other people to help provide answers. 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. Thus, you may do what you want with this software. Build it into your package, steal code from it, whatever. Just be sure to let people know where it came from. 1 asciitopgm asciitopgm - convert ASCII graphics into a portable graymap 2 Synopis asciitopgm [-d divisor] height width [asciifile] 2 Description Reads ASCII data as input. Produces a portable graymap 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 ver light, and a space is white. Input lines which are fewer than width characters are automatically padded with spaces. The divisor argument is a floating-point number by which the output pixels are divided; the default value is 1.0. This can be used to adjust the brightness of the graymap: for example, if the image is too dim, reduce the divisor. In keeping with (I believe) Fortran line-printer conventions, input lines beginning with a + (plus) character are assumed to "overstrike" the previous line, allowing a larger range of gray values. This tool contradicts the message in the pbmtoascii manual: "Note that there is no asciitopbm tool - this transformation is one-way." 2 Bugs The table of ASCII-to-grey values is subject to interpretation, and, of course, depends on the typeface intended for the input. 2 See_Also pbmtoascii(1), pgm(5) 2 Author Wilson H. Bent. Jr. (whb@usc.edu) 1 atktopbm atktopbm - convert Andrew Toolkit raster object to portable bitmap 2 Synopsis atktopbm [atkfile] 2 Description Reads an Andrew Toolkit raster object as input. Produces a portable bitmap as output. 2 See_Also pbmtoatk, pbm 2 Author Copyright (C) 1991 by Bill Janssen. 1 brushtopbm brushtopbm - convert a doodle brush file into a portable bitmap 2 Synopsis brushtopbm [brushfile] 2 Description Reads a Xerox doodle brush file as input. Produces a port- able bitmap as output. Note that there is currently no pbmtobrush tool. 2 See_Also pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 cmuwmtopbm cmuwmtopbm - convert a CMU window manager bitmap into a portable bitmap 2 Synopsis cmuwmtopbm [cmuwmfile] 2 Description Reads a CMU window manager bitmap as input. Produces a portable bitmap as output. 2 See_Also pbmtocmuwm, pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 g3topbm g3topbm - convert a Group 3 fax file into a portable bitmap 2 Synopsis g3topbm [-kludge] [-reversebits] [-stretch] [g3file] 2 Description Reads a Group 3 fax file as input. Produces a portable bit- map as output. 2 Options -kludge Tells g3topbm to ignore the first few lines of the file; sometimes fax files have some junk at the begin- ning. -reversebits Tells g3topbm 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 flag. -stretch Tells g3topbm to stretch the image vertically by dupli- cating each row. This is for the low-quality transmis- sion mode. All flags can be abbreviated to their shortest unique pre- fix. 2 References The standard for Group 3 fax is defined in CCITT Recommenda- tion T.4. 2 Bugs Probably. 2 See_Also pbmtog3, pbm 2 Author Copyright (C) 1989 by Paul Haeberli . 1 icontopbm icontopbm - convert a Sun icon into a portable bitmap 2 Synopsis icontopbm [iconfile] 2 Description Reads a Sun icon as input. Produces a portable bitmap as output. 2 See_Also pbmtoicon, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 gemtopbm gemtopbm - convert a GEM .img file into a portable bitmap 2 Synopsis gemtopbm [-d] gemfile 2 Description Reads a GEM .img file as input. Produces a portable bitmap as output. 2 Options -d Produce output describing the contents of the .img file. 2 Bugs Does not support file containing more than one plane. Can't read from standard input. 2 See_Also pbmtogem, pbm 2 Author Copyright (C) 1988 Diomidis D. Spinellis (dds@cc.ic.ac.uk). 1 macptopbm macptopbm - convert a MacPaint file into a portable bitmap 2 Synopsis macptopbm [-extraskip N] [macpfile] 2 Description Reads a MacPaint file as input. Produces a portable bitmap as output. 2 Options -extraskip This flag 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 -extraskip 128, and if that still doesn't look right try another value. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also picttoppm, pbmtomacp, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. The MacPaint-reading code is copyright (c) 1987 by Patrick J. Naughton (naughton@wind.sun.com). 1 mgrtopbm mgrtopbm - convert a MGR bitmap into a portable bitmap 2 Synopsis mgrtopbm [mgrfile] 2 Description Reads a MGR bitmap as input. Produces a portable bitmap as output. 2 See_Also pbmtomgr, pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pbmclean pbmclean - flip isolated pixels in portable bitmap 2 Synopsis pbmclean [-connect] [pbmfile] 2 Description Reads a portable bitmap as input. Outputs a portable bitmap with every pixel which has less than connect identical neighbours inverted. Pbmclean can be used to clean up "snow" on bitmap images. 2 See_Also pbm 2 Author Copyright (C) 1990 by Angus Duggan Copyright (C) 1989 by Jef Poskanzer. 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 docu- mentation. This software is provided "as is" without express or implied warranty. 1 pbmlife pbmlife - apply Conway's rules of Life to a portable bitmap 2 Synopsis pbmlife [pbmfile] 2 Description Reads a portable bitmap as input. Applies the rules of Life to it for one generation, and produces a portable bitmap as output. A white pixel in the image is interpreted as a live beastie, and a black pixel as an empty space. 2 See_Also pbm 2 Author Copyright (C) 1988, 1991 by Jef Poskanzer. 1 pbmmake pbmmake - create a blank bitmap of a specified size 2 Synopsis pbmmake [-white|-black|-gray ] width height 2 Description Produces a portable bitmap of the specified width and height. The color defaults to white. 2 Options In addition to the usual -white and -black, this program implements -gray. This gives a simple 50% gray pattern with 1's and 0's alternating. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pbm, ppmmake 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pbmmask pbmmask - create a mask bitmap from a regular bitmap 2 Synopsis pbmmask [-expand] [pbmfile] 2 Description Reads a portable bitmap as input. Creates a corresponding mask bitmap and writes it out. 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. This lets you do a masked paste like this, for objects with a black background: pbmmask obj > objmask pnmpaste < dest -and objmask | pnmpaste -or obj For objects with a white background, you can either invert them or add a step: pbmmask obj > objmask pnminvert objmask | pnmpaste -and obj 0 0 > blackback pnmpaste < dest -and objmask | pnmpaste -or blackback Note that this three-step version works for objects with black backgrounds too, if you don't care about the wasted time. You can also use masks with graymaps and pixmaps, using the pnmarith tool. For instance: ppmtopgm obj.ppm | pgmtopbm -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 An interesting variation on this is to pipe the mask through the pnmsmooth script before using it. This makes the boun- dary between the two images less sharp. -expand 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 pbmlife tool into a general cellular automaton tool...) 2 See_Also pnmpaste, pnminvert, pbm, pnmarith, pnmsmooth 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmpscale pbmpscale - enlarge a portable bitmap with edge smoothing 2 Synopsis pbmpscale N [ pbmfile ] 2 Description Reads a portable bitmap as input, and outputs a portable bitmap enlarged N times. Enlargement is done by pixel repli- cation, with some additional smoothing of corners and edges. 2 See_Also pnmenlarge, ppmscale, pbm 2 Author Copyright (C) 1990 by Angus Duggan Copyright (C) 1989 by Jef Poskanzer. 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 docu- mentation. This software is provided "as is" without express or implied warranty. 2 Notes pbmpscale 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. 1 pbmreduce pbmreduce - read a portable bitmap and reduce it N times 2 Synopsis pbmreduce [-floyd|-fs|-threshold ] [-value val] N [pbmfile] 2 Description Reads a portable bitmap as input. Reduces it by a factor of N, and produces a portable bitmap as output. pbmreduce duplicates a lot of the functionality of pgmtopbm; you could do something like pnmscale | pgmtopbm, but pbmreduce is a lot faster. pbmreduce can be used 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 pbmreduce. You can even correct the brightness of an image, by using the -value flag. 2 Options By default, the halftoning after the reduction is done via boustrophedonic Floyd-Steinberg error diffusion; however, the -threshold flag can be used to specify simple threshold- ing. This gives better results when reducing line drawings. The -value flag alters the thresholding value for all quant- izations. It should be a real number between 0 and 1. Above 0.5 means darker images; below 0.5 means lighter. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmenlarge, pnmscale, pgmtopbm, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmtext pbmtext - render text into a bitmap 2 Synopsis pbmtext [-font fontfile] [text] 2 Description Takes the specified text, either a single line from the com- mand line or multiple lines from standard input, and renders it into a bitmap. 2 Options By default, pbmtext uses a built-in font. You can also specify your own font with the -font flag. The fontfile is a pbm file, created in a very specific way. In your window system of choice, display the following text in the desired (fixed-width) font: M ",/^_[`jpqy| M / !"#$%&'()*+ / < ,-./01234567 < > 89:;<=>?@ABC > @ DEFGHIJKLMNO @ _ PQRSTUVWXYZ[ _ { \]^_`abcdefg { } hijklmnopqrs } ~ tuvwxyz{|}~ ~ M ",/^_[`jpqy| M Do a screen grab or window dump of that text, using for instance xwd, xgrabsc, or screendump. Convert the result into a pbm file. If necessary, use pnmcut to remove every- thing except the text. Finally, run it through pnmcrop to make sure the edges are right up against the text. pbmtext can figure out the sizes and spacings from that. 2 See_Also pbm, pnmcut, pnmcrop 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pbmto4425 pbmto4425 - Display PBM images on an AT&T 4425 terminal 2 Synopsis pbmto4425 [pbmfile] 2 Description Pbmto4425 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. Pbmto4425 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: % pnmscale -xscale 2.6 pnmfile \ | pnmscale -xysize 264 69 \ | ppmtopgm \ | pgmtopbm \ | pbmto4425 2 Author Copyright (C) 1993 by Robert Perlberg 1 pbmto10x pbmto10x - convert a portable bitmap into Gemini 10X printer graphics 2 Synopsis pbmto10x [-h] [pbmfile] 2 Description Reads a portable bitmap as input. Produces a file of Gemini 10X printer graphics as output. The 10x's printer codes are alleged to be similar to the Epson codes. Note that there is no 10xtopbm tool - this transformation is one way. 2 Options The resolution is normally 60H by 72V. If the -h flag is specified, resolution is 120H by 144V. You may find it use- ful to rotate landscape images before printing. 2 See_Also pbm 2 Author Copyright (C) 1990 by Ken Yap 1 pbmtoascii pbmtoascii - convert a portable bitmap into ASCII graphics 2 Synopsis pbmtoascii [-1x2|-2x4] [pbmfile] 2 Description Reads a portable bitmap as input. Produces a somewhat crude ASCII graphic as output. Note that there is no asciitopbm tool - this transformation is one-way. 2 Options The -1x2 and -2x4 flags give you two alternate ways for the bits to get mapped to characters. With 1x2, the default, each character represents a group of 1 bit across by 2 bits down. With -2x4, each character represents 2 bits across by 4 bits down. With the 1x2 mode you can see the individual bits, so it's useful for previewing small bitmaps on a non- graphics terminal. The 2x4 mode lets you display larger bitmaps on a standard 80-column display, but it obscures bit-level details. 2x4 mode is also good for displaying graymaps - "pnmscale -width 158 | pgmnorm | pgmtopbm -thresh" should give good results. 2 See_Also pbm 2 Author Copyright (C) 1988, 1992 by Jef Poskanzer. 1 pbmtoatk pbmtoatk - convert portable bitmap to Andrew Toolkit raster object 2 Synopsis pbmtoatk [pbmfile] 2 Description Reads a portable bitmap as input. Produces a Andrew Toolkit raster object as output. 2 See_Also atktopbm, pbm 2 Author Copyright (C) 1991 by Bill Janssen. 1 pbmtobg pbmtobg - convert a portable bitmap into BitGraph graphics 2 Synopsis pbmtobg [rasterop] [x y] < pbmfile 2 Description Reads a portable bitmap as input. Produces BBN BitGraph terminal Display Pixel Data (DPD) sequence as output. 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. Note that there is no bgtopbm tool. 2 See_Also pbm 2 Author Copyright 1989 by Mike Parker. 1 pbmtocmuwm pbmtocmuwm - convert a portable bitmap into a CMU window manager bitmap 2 Synopsis pbmtocmuwm [pbmfile] 2 Description Reads a portable bitmap as input. Produces a CMU window manager bitmap as output. 2 See_Also cmuwmtopbm, pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pbmtoepsi pbmtoepsi - convert a portable bitmap into an encapsulated PostScript style preview bitmap 2 Synopsis pbmtoepsi [-bbonly] [pbmfile] 2 Description Reads a portable bitmap as input. Produce 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. Note that there is no epsitopbm tool - this transformation is one way. This utility is a part of the pstoepsi tool by Doug Crabill (dgc@cs.purdue.edu). 2 Options -bbonly Only create a boundary box, don't fill it with the image. 2 See_Also pbm, pnmtops, psidtopgm 2 Author Copyright (C) 1988 Jef Poskanzer, modified by Doug Crabill 1992 1 pbmtoepson pbmtoepson - convert a portable bitmap into Epson printer graphics 2 Synopsis pbmtoepson [pbmfile] 2 Description Reads a portable bitmap as input. Produces a file of Epson printer graphics as output. Note that there is no epsontopbm tool - this transformation is one way. 2 See_Also pbm 2 Author Copyright (C) 1991 by John Tiller (tiller@galois.msfc.nasa.gov) and Jef Poskanzer. 1 pbmtog3 pbmtog3 - convert a portable bitmap into a Group 3 fax file 2 Synopsis pbmtog3 [pbmfile] 2 Description Reads a portable bitmap as output. Produces a Group 3 fax file as input. REFERENCES The standard for Group 3 fax is defined in CCITT Recommenda- tion T.4. 2 Bugs Probably. 2 See_Also g3topbm, pbm 2 Author Copyright (C) 1989 by Paul Haeberli . 1 pbmtogem pbmtogem - convert a portable bitmap into a GEM .img file 2 Synopsis pbmtogem [pbmfile] 2 Description Reads a portable bitmap as input. Produces a GEM .img file as output. 2 Bugs It does not support compression of the data. 2 See_Also gemtopbm, pbm 2 Author Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer. 1 pbmtogo pbmtogo - convert a portable bitmap into compressed GraphOn graphics 2 Synopsis pbmtogo [pbmfile] 2 Description Reads a portable bitmap as input. Produces 2D compressed GraphOn graphics as output. 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. 2 See_Also pbm 2 Author Copyright (C) 1988, 1989 by Jef Poskanzer, Michael Haberler, and Bo Thide'. 1 pbmtoicon pbmtoicon - convert a portable bitmap into a Sun icon 2 Synopsis pbmtoicon [pbmfile] 2 Description Reads a portable bitmap as input. Produces a Sun icon as output. 2 See_Also icontopbm, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmtolj pbmtolj - convert a portable bitmap into HP LaserJet format 2 Synopsis pbmtolj [-resolution N] [pbmfile] 2 Description Reads a portable bitmap as input. Produces HP LaserJet data as output. Note that there is no ljtopbm tool. 2 Options -resolution Specifies the resolution of the output device, in dpi. Typical values are 75, 100, 150, 300. The default is 75. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pbm 2 Author Copyright (C) 1988 by Jef Poskanzer and Michael Haberler. 1 pbmtoln03 pbmtoln03 - convert protable bitmap to DEC LN03+ Sixel out- put 2 Synopsis pbmtoln03 [-rltbf] pbmfile 2 Description Reads a portable bitmap as input. Produces a DEC LN03+ Sixel output file. 2 Options -l nn Use "nn" as value for left margin (default 0). -r nn Use "nn" as value for right margin (default 2400). -t nn Use "nn" as value for top margin (default 0). -b nn Use "nn" as value for bottom margin (default 3400). -f nn Use "nn" as value for form length (default 3400). 2 See_Also pbm 2 Author Tim Cook, 26 Feb 1992 1 pbmtolps pbmtolps - convert portable bitmap to PostScript 2 Synopsis pbmtolps [ -dpi n ] [ pbmfile ] 2 Description Reads a portable bitmap as input, and outputs PostScript. The output Postscript uses lines instead of the image opera- tor to generate a (device dependent) picture which will be imaged much faster. 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. 2 See_Also pgmtops, ppmtops, pbm 2 Author George Phillips 1 pbmtomacp pbmtomacp - convert a portable bitmap into a MacPaint file 2 Synopsis pbmtomacp [-l left] [-r right] [-b bottom] [-t top] [pbmfile] 2 Description Reads a portable bitmap as input. If no input-file is given, standard input is assumed. Produces a MacPaint file as output. The generated file is only the data fork of a picture. You will need a program such as mcvert to generate a Macbinary or a BinHex file that contains the necessary information to identify the file as a PNTG file to MacOS. 2 Options Left, right, bottom & top 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 ). 2 Bugs The source code contains comments in a language other than English. 2 See_Also ppmtopict, macptopbm, pbm, mcvert 2 Author Copyright (C) 1988 by Douwe van der Schaaf (...!mcvax!uvapsy!vdschaaf). 1 pbmtomgr pbmtomgr - convert a portable bitmap into a MGR bitmap 2 Synopsis pbmtomgr [pbmfile] 2 Description Reads a portable bitmap as input. Produces a MGR bitmap as output. 2 See_Also mgrtopbm, pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pbmtopi3 pbmtopi3 - convert a portable bitmap into an Atari Degas .pi3 file 2 Synopsis pbmtopi3 [pbmfile] 2 Description Reads a portable bitmap as input. Produces an Atari Degas .pi3 file as output. 2 See_Also pi3topbm, pbm, ppmtopi1, pi1toppm 2 Author Copyright (C) 1988 by David Beckemeyer (bdt!david) and Jef Poskanzer. 1 pbmtoplot pbmtoplot - convert a portable bitmap into a Unix plot file 2 Synopsis pbmtoplot [pbmfile] 2 Description Reads a portable bitmap as input. Produces a Unix plot file. Note that there is no plottopbm tool - this transformation is one-way. 2 See_Also pbm, plot 2 Author Copyright (C) 1990 by Arthur David Olson. 1 pbmtoptx pbmtoptx - convert a portable bitmap into Printronix printer graphics 2 Synopsis pbmtoptx [pbmfile] 2 Description Reads a portable bitmap as input. Produces a file of Prin- tronix printer graphics as output. Note that there is no ptxtopbm tool - this transformation is one way. 2 See_Also pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmtox10bm pbmtox10bm - convert a portable bitmap into an X10 bitmap 2 Synopsis pbmtox10bm [pbmfile] 2 Description Reads a portable bitmap as input. Produces an X10 bitmap as output. This older format is maintained for compatibility. Note that there is no x10bmtopbm tool, because xbmtopbm can read both X11 and X10 bitmaps. 2 See_Also pbmtoxbm, xbmtopbm, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmtoxbm pbmtoxbm - convert a portable bitmap into an X11 bitmap 2 Synopsis pbmtoxbm [pbmfile] 2 Description Reads a portable bitmap as input. Produces an X11 bitmap as output. 2 See_Also pbmtox10bm, xbmtopbm, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 pbmtoybm pgmtoybm - convert a portable bitmap into a Bennet Yee "face" file 2 Synopsis pbmtoybm [pbmfile] 2 Description Reads a portable bitmap as input. Produces as output a file acceptable to the face and xbm programs by Bennet Yee (bsy+@cs.cmu.edu). 2 See_Also ybmtopbm, pbm, face, face, xbm 2 Author Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. 1 pbmtozinc pbmtozinc - convert a portable bitmap into a Zinc bitmap 2 Synopsis pbmtozinc [pbmfile] 2 Description Reads a portable bitmap as input. Produces a bitmap in the format used by the Zinc Interface Library (ZIL) Version 1.0 as output. 2 See_Also pbm 2 Author Copyright (C) 1988 by James Darrell McCauley (jdm5548@diamond.tamu.edu) and Jef Poskanzer. 1 pbmupc pbmupc - create a Universal Product Code bitmap 2 Synopsis pbmupc [-s1|-s2] type manufac product 2 Description Generates a Universal Product Code symbol. The three argu- ments are: a one digit product type, a five digit manufac- turer code, and a five digit product code. For example, "0 72890 00011" is the code for Heineken. As presently configured, pbmupc produces a bitmap 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 pnmenlarge or pnmscale. 2 Options The -s1 and -s2 flags select the style of UPC to generate. The default, -s1, looks more or less like this: |||||||||||||||| |||||||||||||||| |||||||||||||||| |||||||||||||||| 0||12345||67890||5 The other style, -s2, puts the product type digit higher up, and doesn't display the checksum digit: |||||||||||||||| |||||||||||||||| 0|||||||||||||||| |||||||||||||||| ||12345||67890|| 2 See_Also pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pi3topbm pi3topbm - convert an Atari Degas .pi3 file into a portable bitmap 2 Synopsis pi3topbm [pi3file] 2 Description Reads an Atari Degas .pi3 file as input. Produces a port- able bitmap as output. 2 See_Also pbmtopi3, pbm, pi1toppm, ppmtopi1 2 Author Copyright (C) 1988 by David Beckemeyer (bdt!david) and Diomidis D. Spinellis. 1 pktopbm pktopbm - convert packed (PK) format font into portable bitmap(s) 2 Synopsis pktopbm pkfile[.pk] [-c num] pbmfile ... 2 Description Reads a packed (PK) font file as input, and produces port- able bitmaps as output. If the filename "-" is used for any of the filenames, the standard input stream (or standard output where appropriate) will be used. 2 Options -c num Sets the character number of the next bitmap written to num. 2 See_Also pbmtopk, pbm 2 Author Adapted from Tom Rokicki's pxtopk by Angus Duggan . 1 xbmtopbm xbmtopbm - convert an X11 or X10 bitmap into a portable bit- map 2 Synopsis xbmtopbm [bitmapfile] 2 Description Reads an X11 or X10 bitmap as input. Produces a portable bitmap as output. 2 See_Also pbmtoxbm, pbmtox10bm, pbm 2 Author Copyright (C) 1988 by Jef Poskanzer. 1 ybmtopbm ybmtopbm - convert a Bennet Yee "face" file into a portable bitmap 2 Synopsis ybmtopbm [facefile] 2 Description Reads a file acceptable to the face and xbm programs by Ben- net Yee (bsy+@cs.cmu.edu). Writes a portable bitmap as out- put. 2 See_Also pbmtoybm, pbm, face, face, xbm 2 Author Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. 1 pbmtopk pbmtopk - convert a portable bitmap into a packed (PK) for- mat font 2 Synopsis pbmtopk pkfile[.pk] tfmfile[.tfm] resolution [-s designsize] [-p num param...] [-C codingscheme] [-F family] [-f optfile] [-c num] [-W width] [-H height] [-D depth] [-I ital] [-h horiz] [-v vert] [-x xoff] [-y yoff] [pbmfile]... 2 Description Reads portable bitmaps 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, the standard input stream (or standard output where appropriate) will be used. 2 Options -s designsize 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. -p num param... Sets the first num font parameters for the font. The first seven parameters are the slant, interword spac- ing, 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. -C codingscheme Sets the coding scheme comment in the TFM file. -F family Sets the font family comment in the TFM file. -f optfile Reads the file optfile, which should contain a lines of the form: filename xoff yoff horiz vert width height depth ital 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. -c num Sets the character number of the next bitmap encoun- tered to num. -W width Sets the TFM width of the next character to width (in design size multiples). -H height Sets the TFM height of the next character to height (in design size multiples). -D depth Sets the TFM depth of the next character to depth (in design size multiples). -I ital Sets the italic correction of the next character to ital (in design size multiples). -h horiz Sets the horizontal escapement of the next character to horiz (in pixels). -v vert Sets the vertical escapement of the next character to vert (in pixels). -x xoff Sets the horizontal offset of the next character to xoff (in pixels). -y yoff Sets the vertical offset of the next character to yoff (in pixels, from the top row). 2 See_Also pktopbm, pbm 2 Author Adapted from Tom Rokicki's pxtopk by Angus Duggan . 1 libpbm C LIBRARY FUNCTIONS libpbm libpbm - functions to support portable bitmap programs 2 Synopsis #include cc ... libpbm.a 2 Description - PACKAGE-WIDE ROUTINES KEYWORD MATCHING int pm_keymatch( char* str, char* keyword, int minchars ) Does a case-insensitive match of str against keyword. str can be a leading sunstring of keyword, but at least minchars must be present. LOG BASE TWO int pm_maxvaltobits( int maxval ) int pm_bitstomaxval( int bits ) Convert between a maxval and the minimum number of bits required to hold it. MESSAGES AND ERRORS void pm_message( char* fmt, ... ) printf() style routine to write an informational message. void pm_error( char* fmt, ... ) printf() style routine to write an error message and abort. void pm_usage( char* usage ) Write a usage message. The string should indicate what arguments are to be provided to the program. GENERIC FILE MANAGEMENT FILE* pm_openr( char* name ) Open the given file for reading, with appropriate error checking. A filename of "-" is taken as equivalent to stdin. FILE* pm_openw( char* name ) Open the given file for writing, with appropriate error checking. void pm_close( FILE* fp ) Close the file descriptor, with appropriate error checking. ENDIAN I/O int pm_readbigshort( FILE* in, short* sP ) int pm_writebigshort( FILE* out, short s ) int pm_readbiglong( FILE* in, long* lP ) int pm_writebiglong( FILE* out, long l ) int pm_readlittleshort( FILE* in, short* sP ) int pm_writelittleshort( FILE* out, short s ) int pm_readlittlelong( FILE* in, long* lP ) int pm_writelittlelong( FILE* out, long l ) Routines to read and write short and long ints in either big- or little-endian byte order. 2 Description - PBM-SPECIFIC ROUTINES TYPES AND CONSTANTS typedef ... bit; #define PBM_WHITE ... #define PBM_BLACK ... each bit should contain only the values of PBM_WHITE or PBM_BLACK. #define PBM_FORMAT ... #define RPBM_FORMAT ... #define PBM_TYPE PBM_FORMAT #define PBM_FORMAT_TYPE(f) ... For distinguishing different file formats and types. INITIALIZATION void pbm_init( int* argcP, char* argv[] ) All PBM programs must call this routine. MEMORY MANAGEMENT bit** pbm_allocarray( int cols, int rows ) Allocate an array of bits. bit* pbm_allocrow( int cols ) Allocate a row of the given number of bits. void pbm_freearray( bit** bits, int rows ) Free the array allocated with pbm_allocarray() containing the given number of rows. void pbm_freerow( bit* bitrow ) Free a row of bits. READING FILES void pbm_readpbminit( FILE* fp, int* colsP, int* rowsP, int* formatP ) Read the header from a PBM file, filling in the rows, cols and format variables. void pbm_readpbmrow( FILE* fp, bit* bitrow, int cols, int format ) Read a row of bits into the bitrow array. Format and cols were filled in by pbm_readpbminit(). bit** pbm_readpbm( FILE* fp, int* colsP, int* rowsP ) Read an entire bitmap file into memory, returning the allo- cated array and filling in the rows and cols variables. This function combines pbm_readpbminit(), pbm_allocarray() and pbm_readpbmrow(). char* pm_read_unknown_size( FILE* fp, long* nread ) Read an entire file or input stream of unknown size to a buffer. Allocate memory more memory as needed. The calling routine has to free the allocated buffer with free(). pm_read_unknown_size() returns a pointer to the allocated buffer. The nread argument returns the number of bytes read. WRITING FILES void pbm_writepbminit( FILE* fp, int cols, int rows, int forceplain ) Write the header for a portable bitmap file. The forceplain flag forces a plain-format file to be written, as opposed to a raw-format one. void pbm_writepbmrow( FILE* fp, bit* bitrow, int cols, int forceplain ) Write a row from a portable bitmap. void pbm_writepbm( FILE* fp, bit** bits, int cols, int rows, int forceplain ) Write the header and all data for a portable bitmap. This function combines pbm_writepbminit() and pbm_writepbmrow(). 2 See_Also libpgm, libppm, libpnm 2 Author Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. 1 pbm pbm - portable bitmap file format 2 Description The portable bitmap format is a lowest common denominator monochrome file format. It was originally designed to make it reasonable to mail bitmaps between different types of machines using the typical stupid network mailers we have today. Now it serves as the common language of a large fam- ily of bitmap conversion filters. The definition is as fol- lows: - A "magic number" for identifying the file type. A pbm file's magic number is the two characters "P1". - Whitespace (blanks, TABs, CRs, LFs). - A width, formatted as ASCII characters in decimal. - Whitespace. - A height, again in ASCII decimal. - Whitespace. - Width * height bits, each either '1' or '0', starting at the top-left corner of the bitmap, proceeding in normal English reading order. - The character '1' means black, '0' means white. - Whitespace in the bits section is ignored. - Characters from a "#" to the next end-of-line are ignored (comments). - No line should be longer than 70 characters. Here is an example of a small bitmap in this format: 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 Programs that read this format should be as lenient as pos- sible, accepting anything that looks remotely like a bitmap. There is also a variant on the format, available by setting the RAWBITS option at compile time. This variant is dif- ferent in the following ways: - The "magic number" is "P4" instead of "P1". - The bits are stored eight per byte, high bit first low bit last. - No whitespace is allowed in the bits section, and only a single character of whitespace (typically a newline) is allowed after the height. - The files are eight times smaller and many times faster to read and write. 2 See_Also atktopbm, brushtopbm, cmuwmtopbm, g3topbm, gemtopbm, icontopbm, macptopbm, mgrtopbm, pi3topbm, xbmtopbm, ybmtopbm, pbmto10x, pnmtoascii, pbmtoatk, pbmtobbnbg, pbmtocmuwm, pbmtoepson, pbmtog3, pbmtogem, pbmtogo, pbmtoicon, pbmtolj, pbmtomacp, pbmtomgr, pbmtopi3, pbmtoplot, pbmtoptx, pbmtox10bm, pbmtoxbm, pbmtoybm, pbmtozinc, pbmlife, pbmmake, pbmmask, pbmreduce, pbmtext, pbmupc, pnm, pgm, ppm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 bioradtopgm bioradtopgm - convert a Biorad confocal file into a portable graymap 2 Synopsis bioradtopgm [-image#] [imagedata] 2 Description Reads a Biorad confocal file as input. Produces a portable graymap as output. If the resulting image is upside down, run it through pnmflip -tb . 2 Options -image# A Biorad image file may contain more than one image. With this flag, 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 pro- duced. 2 Bugs A Biorad image may be in word format. If PbmPlus is not com- piled with the "BIGGRAYS" flag, word files can not be con- verted. See the Makefile. 2 See_Also pgm, pnmflip 2 Authors Copyright (C) 1993 by Oliver Trepte 1 fitstopgm fitstopgm - convert a FITS file into a portable graymap 2 Synopsis fitstopgm [-image N] [FITSfile] 2 Description Reads a FITS file as input. Produces a portable graymap as output. The results may need to be flipped top for bottom; if so, just pipe the output through pnmflip -tb. 2 Options The -image 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. All flags can be abbreviated to their shortest unique pre- fix. 2 References FITS stands for Flexible Image Transport System. A full description can be found in Astronomy & Astrophysics Supple- ment Series 44 (1981), page 363. 2 See_Also pgmtofits, pgm, pnmflip 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 fstopgm fstopgm - convert a Usenix FaceSaver(tm) file into a port- able graymap 2 Synopsis fstopgm [fsfile] 2 Description Reads a Usenix FaceSaver(tm) file as input. Produces a portable graymap as output. FaceSaver(tm) files sometimes have rectangular pixels. While fstopgm won't re-scale them into square pixels for you, it will give you the precise pnmscale command that will do the job. Because of this, reading a FaceSaver(tm) image is a two-step process. First you do: fstopgm > /dev/null This will tell you whether you need to use pnmscale. Then use one of the following pipelines: fstopgm | pgmnorm fstopgm | pnmscale -whatever | pgmnorm To go to PBM, you want something more like one of these: fstopgm | pnmenlarge 3 | pgmnorm | pgmtopbm fstopgm | pnmenlarge 3 | pnmscale | pgmnorm | pgmtopbm You want to enlarge when going to a bitmap because otherwise you lose information; but enlarging by more than 3 does not look good. FaceSaver is a registered trademark of Metron Computerware Ltd. of Oakland, CA. 2 See_Also pgmtofs, pgm, pgmnorm, pnmenlarge, pnmscale, pgmtopbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 hipstopgm hipstopgm - convert a HIPS file into a portable graymap 2 Synopsis hipstopgm [hipsfile] 2 Description Reads a HIPS file as input. Produces a portable graymap as output. If the HIPS file contains more than one frame in sequence, hipstopgm will concatenate all the frames vertically. HIPS is a format developed at the Human Information Process- ing Laboratory, NYU. 2 See_Also pgm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 lispmtopgm lispmtopgm - convert a Lisp Machine bitmap file into pgm format 2 Synopsis lispmtopgm [lispmfile] 2 Description Reads a Lisp Machine bitmap as input. Produces a portable graymap as output. This is the file format written by the tv:write-bit-array- file function on TI Explorer and Symbolics lisp machines. 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. 2 See_Also pgmtolispm, pgm 2 Bugs 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. 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. No color. 2 Author Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. 1 pbmtopgm pbmtopgm - convert portable bitmap to portable graymap by averaging areas 2 Synopsis pbmtopgm [pbmfile] 2 Description Reads a portable bitmap as input. Outputs a portable graymap created by averaging the number of pixels within a sample area of width by height around each point. Pbmtopgm is simi- lar to a special case of ppmconvol. A ppmsmooth step may be needed after pbmtopgm. Pbmtopgm has the effect of anti-aliasing bitmaps which con- tain distinct line features. 2 See_Also pbm 2 Author Copyright (C) 1990 by Angus Duggan Copyright (C) 1989 by Jef Poskanzer. 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 docu- mentation. This software is provided "as is" without express or implied warranty. 2 Notes Pbmtopgm works best with odd sample width and heights. 1 pgmbentley pgmbentley - Bentleyize a portable graymap 2 Synopsis pgmbentley [pgmfile] 2 Description Reads a portable graymap as input. Performs The Bentley Effect, and writes a portable graymap as output. The Bentley Effect is described in "Beyond Photography" by Holzmann, chapter 4, photo 4. It's a vertical smearing based on brightness. 2 See_Also pgmoil, ppmrelief, pgm 2 Author Copyright (C) 1990 by Wilson Bent (whb@hoh-2.att.com) 1 pgmenhance pgmenhance - edge-enhance a portable graymap 2 Synopsis pgmenhance [-N] [pgmfile] 2 Description Reads a portable graymap as input. Enhances the edges, and writes a portable graymap as output. 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. 2 Options The optional -N flag should be a digit from 1 to 9. 1 is the lowest level of enhancement, 9 is the highest, The default is 9. 2 See_Also pgmedge, pgm, pbm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pgmhist pgmhist - print a histogram of the values in a portable graymap 2 Synopsis pgmhist [pgmfile] 2 Description Reads a portable graymap as input. Prints a histogram of the gray values. 2 See_Also pgmnorm, pgm, ppmhist 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pgmnoise pgmnoise - create a graymap made up of white noise 2 Synopsis pgmnoise width height 2 Description 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. 2 See_Also pgm(5) 2 Author Copyright (C) 1993 by Frank Neumann 1 pgmnorm pgmnorm - normalize the contrast in a portable graymap 2 Synopsis pgmnorm [-bpercent N | -bvalue N] [-wpercent N | -wvalue N] [pgmfile] 2 Description Reads a portable graymap as input. Normalizes the contrast by forcing the lightest pixels to white, the darkest pixels to black, and linearly rescaling the ones in between; and produces a portable graymap as output. 2 Options By default, the darkest 2 percent of all pixels are mapped to black, and the lightest 1 percent are mapped to white. You can override these percentages by using the -bpercent and -wpercent flags, or you can specify the exact pixel values to be mapped by using the -bvalue and -wvalue flags. Appropriate numbers for the flags can be gotten from the pgmhist tool. 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 bvalue. If you want to lighten the image, then set bvalue to 0 and just fiddle with wvalue; similarly, to darken the image, set wvalue to maxval and play with bvalue. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pgmhist, pgm 2 Author Partially based on the fbnorm filter in Michael Mauldin's "Fuzzy Pixmap" package. Copyright (C) 1989 by Jef Poskanzer. 1 pgmoil pgmoil - turn a portable graymap into an oil painting 2 Synopsis pgmoil [-n N] [pgmfile] 2 Description Reads a portable graymap as input. Does an "oil transfer", and writes a portable graymap as output. The oil transfer is described in "Beyond Photography" by Holzmann, chapter 4, photo 7. It's a sort of localized smearing. 2 Options The optional -n flag controls the size of the area smeared. The default value is 3. 2 Bugs Takes a long time to run. 2 See_Also pgmbentley, ppmrelief, pgm 2 Author Copyright (C) 1990 by Wilson Bent (whb@hoh-2.att.com) 1 pgmramp pgmramp - generate a grayscale ramp 2 Synopsis pgmramp -lr|-tb | -rectangle|-ellipse width height 2 Description Generates a graymap of the specified size containing a black-to-white ramp. These ramps are useful for multiplying with other images, using the pnmarith tool. 2 Options -lr A left to right ramp. -tb A top to bottom ramp. -rectangle A rectangular ramp. -ellipse An elliptical ramp. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmarith, pgm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pgmtofits pgmtofits - convert a portable graymap into FITS format 2 Synopsis pgmtofits [pgmfile] 2 Description Reads a portable graymap as input. Produces a FITS file as output. FITS stands for Flexible Image Transport System. A full description can be found in Astronomy & Astrophysics Supple- ment Series 44 (1981), page 363. 2 See_Also fitstopgm, pgm 2 Author Copyright (C) 1989 by Wilson H. Bent (whb@hoh-2.att.com). 1 pgmtofs pgmtofs - convert portable graymap to Usenix FaceSaver(tm) format 2 Synopsis pgmtofs [pgmfile] 2 Description Reads a portable graymap as input. Produces Usenix FaceSaver(tm) format as output. FaceSaver is a registered trademark of Metron Computerware Ltd. of Oakland, CA. 2 See_Also fstopgm, pgm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pgmtolispm pgmtolispm - convert a portable graymap into Lisp Machine format 2 Synopsis pgmtolispm [pgmfile] 2 Description Reads a portable graymap as input. Produces a Lisp Machine bitmap as output. This is the file format read by the tv:read-bit-array-file function on TI Explorer and Symbolics lisp machines. Given a pgm (instead of a pbm) a multi-plane image will be output. This is probably not useful unless you have a color lisp machine. 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. 2 See_Also lispmtopgm, pgm 2 Bugs 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). No color. 2 Author Copyright (C) 1991 by Jamie Zawinski and Jef Poskanzer. 1 pgmtopbm pgmtopbm - convert a portable graymap into a portable bitmap 2 Synopsis pgmtopbm [-floyd|-fs|-threshold |-dither8|-d8|-cluster3 |- c3|-cluster4|-c4 |-cluster8|-c8] [-value val] [pgmfile] 2 Description Reads a portable graymap as input. Produces a portable bit- map as output. Note that there is no pbmtopgm converter, because any pgm program can read pbm files automagically. 2 Options The default quantization method is boustrophedonic Floyd- Steinberg error diffusion (-floyd or -fs). Also available are simple thresholding (-threshold); Bayer's ordered dither (-dither8) with a 16x16 matrix; and three different sizes of 45-degree clustered-dot dither (-cluster3, -cluster4, - cluster8). 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 pnmconvol tool, for tasks like edge and peak detection. And clustered-dot dithering gives a newspaper-ish look, a useful special effect. The -value flag 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. All flags can be abbreviated to their shortest unique pre- fix. 2 References The only reference you need for this stuff is "Digital Half- toning" by Robert Ulichney, MIT Press, ISBN 0-262-21009-6. 2 See_Also pbmreduce, pgm, pbm, pnmconvol 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 psidtopgm psidtopgm - convert PostScript "image" data into a portable graymap 2 Synopsis psidtopgm width height bits/sample [imagedata] 2 Description Reads the "image" data from a PostScript file as input. Produces a portable graymap as output. 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 manually 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 at least read the description of the "image" operator in the PostScript Language Reference Manual. 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... 2 See_Also pnmtops, pgm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 spottopgm spottopgm - convert SPOT satellite images to Portable Grey- map format 2 Synopis spottopgm [-1|2|3] [Firstcol Firstline Lastcol Lastline] inputfile 2 Options -1|2|3 Extract the given colour from the SPOT image. The colours are infra-red, visible light and ultra- violet, although I don't know which corresponds to which number. If the image is in colour, this will be announced on standard error. The default colour is 1. Firstcol Firstline Lastcol Lastline 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. 2 Description Spottopgm converts the named inputfile into Portable Greymap format, defaulting to the first color and the whole SPOT image unless specified by the options. 2 INSTALLATION You must edit the source program and either define BIGNDIAN or LITTLENDIAN, and fix the typedefs for uint32, uint16 and uint8 appropriately. 2 Bugs Currently spottopgm doesn't determine the length of the input file; this would involve two passes over the input file. It defaults to 3000 lines instead. Spottopgm could extract a three-color image (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 infra-red, visible and ultra- violet. I've only had a limited number of SPOT images to play with, and therefore wouldn't guarantee that this will work on any other images. 2 Author Warren Toomey wkt@csadfa.cs.adfa.oz.au 1 pgmcrater pgmcrater - create cratered terrain by fractal forgery 2 Synopsis pgmcrater [-number n] [-height|-ysize s] [-width|-xsize s] [-gamma g] 2 Description pgmcrater creates a portable graymap which mimics cratered terrain. The graymap 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 distri- buted pseudorandom sequence was developed by Rudy Rucker. High resolution images with large numbers of craters often benefit from being piped through pnmsmooth. The averaging performed by this process eliminates some of the jagged pix- els and lends a mellow ``telescopic image'' feel to the overall picture. 2 Options -number n Causes n craters to be generated. If no -number specification is given, 50000 craters will be gen- erated. 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 gen- eral, the more craters you specify the more real- istic the result; ideally you want the entire ter- rain to have been extensively turned over again and again by cratering. High resolution images containing five to ten million craters are stun- ning but take quite a while to create. -height height Sets the height of the generated image to height pixels. The default height is 256 pixels. -width width Sets the width of the generated image to width pixels. The default width is 256 pixels. -xsize width Sets the width of the generated image to width pixels. The default width is 256 pixels. -ysize height Sets the height of the generated image to height pixels. The default height is 256 pixels. -gamma factor The specified factor is used to gamma correct the graymap in the same manner as performed by pnmgamma. 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. All flags can be abbreviated to their shortest unique pre- fix. 2 Bugs The -gamma option isn't really necessary since you can achieve the same effect by piping the output from pgmcrater through pnmgamma. However, pgmcrater performs an internal gamma map anyway in the process of rendering the elevation array into a graymap, so there's no additional overhead in allowing a user-specified gamma. Real craters have two distinct morphologies. pgmcrater 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: /\ /\ _____/ \____________/\____________/ \_____ Larger craters should really use this profile, including the central peak, and totally obliterate the pre-existing ter- rain. 2 See_Also pgm, pnmgamma, pnmsmooth [1] Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images, New York: Springer Verlag, 1988. 2 Author John Walker Autodesk SA Avenue des Champs-Montants 14b CH-2074 MARIN Suisse/Schweiz/Svizzera/Svizra/Switzerland Usenet: kelvin@Autodesk.com Fax: 038/33 88 15 Voice: 038/33 76 33 software and its documentation for any purpose and without fee is hereby granted, without any conditions or restric- tions. This software is provided ``as is'' without express or implied warranty. PLUGWARE! 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 introduc- tion by James Gleick and detailed explanations by Rudy Rucker of the mathematics and algorithms used by each pro- gram. 1 pgmedge pgmedge - edge-detect a portable graymap 2 Synopsis pgmedge [pgmfile] 2 Description Reads a portable graymap as input. Outlines the edges, and writes a portable graymap as output. Piping the result through pgmtopbm -threshold and playing with the threshold value will give a bitmap 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. 2 See_Also pgmenhance, pgmtopbm, pgm, pbm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pgmtexture pgmtexture - calculate textural features on a portable gray- map 2 Synopsis pgmtexture [-d d] [pgmfile] 2 Description Reads a portable graymap as input. Calculates textural features based on spatial dependence matrices at 0, 45, 90, and 135 degrees for a distance d (default = 1). Textural features include: (1) Angular Second Moment, (2) Contrast, (3) Correlation, (4) Variance, (5) Inverse Difference Moment, (6) Sum Average, (7) Sum Variance, (8) Sum Entropy, (9) Entropy, (10) Difference Variance, (11) Difference Entropy, (12, 13) Information Measures of Correlation, and (14) Maximal Correlation Coefficient. Algorithm taken from: Haralick, R.M., K. Shanmugam, and I. Dinstein. 1973. Tex- tural features for image classification. IEEE Transactions on Systems, Man, and Cybertinetics, SMC-3(6):610-621. 2 Bugs The program can run incredibly slow for large images (larger than 64 x 64) and command line options are limited. The method for finding (14) the maximal correlation coefficient, which requires finding the second largest eigenvalue of a matrix Q, does not always converge. 2 References IEEE Transactions on Systems, Man, and Cybertinetics, SMC- 3(6):610-621. 2 See_Also pgm, pnmcut 2 Author Copyright (C) 1991 by Texas Agricultural Experiment Station, employer for hire of James Darrell McCauley. 1 rawtopgm rawtopgm - convert raw grayscale bytes into a portable gray- map 2 Synopsis rawtopgm [-headerskip N] [-rowskip N] [-tb|-topbottom] [width height] [imagedata] 2 Description Reads raw grayscale bytes as input. Produces a portable graymap as output. The input file is just grayscale bytes. If you don't specify the width and height on the command line, the program will check the size of the image and try to make a quadratic image of it. It is an error to supply a non quadratic image without specifying width and height. The maxval is assumed to be 255. 2 Options -headerskip If the file has a header, you can use this flag to skip over it. -rowskip If there is padding at the ends of the rows, you can skip it with this flag. Note that rowskip can be a real number. 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. -tb -topbottom Flips the image upside down. The first pixel in a pgm file is in the lower left corner of the image. For conversion from images with the first pixel in the upper left corner (e.g. the Molecular Dynamics and Leica confocal formats) this flips the image right. This is equivalent to rawtopgm [file] | pnmflip -tb . 2 Bugs If you don't specify the image width and height, the program will try to read the entire image to a memory buffer. If you get a message that states that you are out of memory, try to specify the width and height on the command line. Also, the -tb option consumes much memory. 2 See_Also pgm, rawtoppm, pnmflip 2 Authors Copyright (C) 1989 by Jef Poskanzer. Modified June 1993 by Oliver Trepte, oliver@fysik4.kth.se 1 pnmarith pnmarith - perform arithmetic on two portable anymaps 2 Synopsis pnmarith -add|-subtract|-multiply| pnmfile1 pnmfile2 2 Description Reads two portable anymaps as input. Performs the specified arithmetic operation, and produces a portable anymap as out- put. The two input anymaps must be the same width and height. The arithmetic is performed between corresponding pixels in the two anymaps, as if maxval was 1.0, black was 0.0, and a linear scale in between. Results that fall outside of [0..1) are truncated. The operator -difference calculates the absolute value of pnmarith -subtract pnmfile1 pnmfile2, i.e. no truncation is done. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pbmmask, pnmpaste, pnminvert, pnm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. Lightly modified by Marcel Wijkstra 1 pnmcat pnmcat - concatenate portable anymaps 2 Synopsis pnmcat [-white|-black] -leftright|-lr [-jtop|-jbottom] pnmfile pnmfile ... pnmcat [-white|-black] -topbottom|-tb [-jleft|-jright] pnmfile pnmfile ... 2 Description Reads portable anymaps as input. Concatenates them either left to right or top to bottom, and produces a portable anymap as output. 2 Options If the anymaps are not all the same height (left-right) or width (top-bottom), the smaller ones have to be justified with the largest. By default, they get centered, but you can specify one side or the other with one of the -j* flags. So, -topbottom -jleft would stack the anymaps on top of each other, flush with the left edge. The -white and -black flags specify what color to use to fill in the extra space when doing this justification. If neither is specified, the program makes a guess. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmcomp pnmcomp - composite two portable anymap files together 2 Synopsis pnmcomp [-invert] [-xoffN] [-yoffN] [-alphapgmfile] overlay [pnm-input] [pnm-output] 2 Description Reads in a portable any map image and put a overlay upon it, with optional alpha mask. The -alpha pgmfile allows you to also add an alpha mask file to the compositing process, the range of max and min can be swapped by using the -invert option. The -xoff and -yoff arguments can be negative, allowing you to shift the overlay off the top corner of the screen. 2 See_Also pnm 2 Author Copyright (C) 1992 by David Koblas (koblas@mips.com). 1 pnmconvol pnmconvol - general MxN convolution on a portable anymap 2 Synopsis pnmconvol convolutionfile [pnmfile] 2 Description Reads two portable anymaps as input. Convolves the second using the first, and writes a portable anymap as output. Convolution means replacing each pixel with a weighted aver- age of the nearby pixels. The weights and the area to aver- age are determined by the convolution matrix. The unsigned numbers in the convolution file are offset by -maxval/2 to make signed numbers, and then normalized, so the actual values in the convolution file are only relative. Here is a sample convolution file; it does a simple average of the nine immediate neighbors, resulting in a smoothed image: P2 3 3 18 10 10 10 10 10 10 10 10 10 To see how this works, do the above-mentioned offset: 10 - 18/2 gives 1. The possible range of values is from 0 to 18, and after the offset that's -9 to 9. The normalization step makes the range -1 to 1, and the values get scaled correspondingly so they become 1/9 - exactly what you want. The equivalent matrix for 5x5 smoothing would have maxval 50 and be filled with 26. The convolution file will usually be a graymap, so that the same convolution gets applied to each color component. How- ever, if you want to use a pixmap and do a different convo- lution to different colors, you can certainly do that. 2 See_Also pnmsmooth, pnm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmcrop pnmcrop - crop a portable anymap 2 Synopsis pnmcrop [-white|-black] [pnmfile] 2 Description Reads a portable anymap as input. Removes edges that are the background color, and produces a portable anymap as out- put. 2 Options By default, it makes a guess as to what the background color is. You can override the default with the -white and -black flags. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmcut, pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmcut pnmcut - cut a rectangle out of a portable anymap 2 Synopsis pnmcut x y width height [pnmfile] 2 Description Reads a portable anymap as input. Extracts the specified rectangle, and produces a portable anymap as output. The x and y can be negative, in which case they are interpreted relative to the right and bottom of the anymap, respec- tively. 2 See_Also pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmdepth pnmdepth - change the maxval in a portable anymap 2 Synopsis pnmdepth newmaxval [pnmfile] 2 Description Reads a portable anymap as input. Scales all the pixel values, and writes out the image with the new maxval. Scal- ing the colors down to a smaller maxval will result in some loss of information. Be careful of off-by-one errors when choosing the new max- val. For instance, if you want the color values to be five bits wide, use a maxval of 31, not 32. 2 See_Also pnm, ppmquant, ppmdither 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmenlarge pnmenlarge - read a portable anymap and enlarge it N times 2 Synopsis pnmenlarge N [pnmfile] 2 Description Reads a portable anymap as input. Replicates its pixels N times, and produces a portable anymap as output. pnmenlarge can only enlarge by integer factors. The slower but more general pnmscale can enlarge or reduce by arbitrary factors, and pbmreduce can reduce by integer factors, but only for bitmaps. If you enlarge by a factor of 3 or more, you should probably add a pnmsmooth step; otherwise, you can see the original pixels in the resulting image. 2 See_Also pbmreduce, pnmscale, pnmsmooth, pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmfile pnmfile - describe a portable anymap 2 Synopsis pnmfile [pnmfile] ... 2 Description Reads one or more portable anymaps as input. Writes out short descriptions of the image type, size, etc. This is mostly for use in shell scripts, so the format is not par- ticularly pretty. 2 See_Also pnm, file 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pnmflip pnmflip - perform one or more flip operations on a portable anymap 2 Synopsis pnmflip [-leftright|-lr] [-topbottom|-tb] [-transpose|-xy] [-rotate90|-r90|-ccw ] [-rotate270|-r270|-cw ] [- rotate180|-r180] [pnmfile] 2 Description Reads a portable anymap as input. Performs one or more flip operations, in the order specified, and writes out a port- able anymap. 2 Options The flip operations available are: left for right (- leftright or -lr); top for bottom (-topbottom or -tb); and transposition (-transpose or -xy). In addition, some canned concatenations are available: -rotate90 or -ccw is equivalent to -transpose -topbottom; -rotate270 or -cw is equivalent to -transpose -leftright; and -rotate180 is equivalent to -leftright -topbottom. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmrotate, pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnminvert pnminvert - invert a portable anymap 2 Synopsis pnminvert [pnmfile] 2 Description Reads a portable anymap as input. Inverts it black for white and produces a portable anymap as output. 2 See_Also pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmnoraw pnmnoraw - force a portable anymap into plain format 2 Synopsis pnmnoraw [pnmfile] 2 Description Reads a portable anymap as input. Writes it out in plain (non-raw) format. This is fairly useless if you haven't defined the PBMPLUSAWBITS compile-time option. 2 See_Also pnm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pnmpad pnmpad - add borders to portable anymap 2 Synopsis pnmpad [-white|-black] [-l#] [-r#] [-t#] [-b#] [pnmfile] 2 Description Reads a portable anymap as input. Outputs a portable anymap with extra borders of the sizes specified. The colour of the borders can be set to black or white (default black). 2 See_Also pbmmake, pnmpaste, pbm 2 Author Copyright (C) 1990 by Angus Duggan Copyright (C) 1989 by Jef Poskanzer. 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 docu- mentation. This software is provided "as is" without express or implied warranty. 1 pnmpaste pnmpaste - paste a rectangle into a portable anymap 2 Synopsis pnmpaste [-replace|-or|-and |-xor] frompnmfile x y [intopnmfile] 2 Description Reads two portable anymaps as input. Inserts the first anymap into the second at the specified location, and pro- duces a portable anymap the same size as the second as out- put. If the second anymap is not specified, it is read from stdin. The x and y can be negative, in which case they are interpreted relative to the right and bottom of the anymap, respectively. This tool is most useful in combination with pnmcut. 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. Another useful companion tool is pbmmask. The optional flag specifies the operation to use when doing the paste. The default is -replace. The other, logical operations are only allowed if both input images are bit- maps. These operations act as if white is TRUE and black is FALSE. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmcut, pnminvert, pnmarith, pnm, pbmmask 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmscale pnmscale - scale a portable anymap 2 Synopsis pnmscale s [pnmfile] pnmscale -xsize|-width|-ysize| -height s [pnmfile] pnmscale -xscale|-yscale s [pnmfile] pnmscale -xscale|-xsize|-width s -yscale|-ysize|-height s [pnmfile] pnmscale -xysize x y [pnmfile] 2 Description Reads a portable anymap as input. Scales it by the speci- fied factor or factors and produces a portable anymap as output. If the input file is in color, the output will be too, otherwise it will be grayscale. You can both enlarge (scale factor > 1) and reduce (scale factor < 1). You can specify one dimension as a pixel size, and the other dimension will be scaled correspondingly. You can specify one dimension as a scale, and the other dimension will not be scaled. You can specify different sizes or scales for each axis. Or, you can use the special -xysize flag, which fits the image into the specified size without changing the aspect ratio. All flags can be abbreviated to their shortest unique pre- fix. If you enlarge by a factor of 3 or more, you should probably add a pnmsmooth step; otherwise, you can see the original pixels in the resulting image. 2 See_Also pbmreduce, pnmenlarge, pnmsmooth, pnm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmtile pnmtile - replicate a portable anymap into a specified size 2 Synopsis pnmtile width height [pnmfile] 2 Description Reads a portable anymap as input. Replicates it until it is the specified size, and produces a portable anymap as out- put. 2 See_Also pnm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pnmtoddif pnmtoddif - Convert a portable anymap to DDIF format 2 Synopis pnmtoddif pnmtoddif [-resolution x y] [pnmfile [ddiffile]] 2 Description pnmtoddif takes a portable anymap from standard input and converts it into a DDIF image file on standard output or the specified DDIF file. pbm format (bitmap) data is written as 1 bit DDIF, pgm for- mat data (greyscale) as 8 bit greyscale DDIF, and ppm format data is written as 8,8,8 bit color DDIF. All DDIF image files are written as uncompressed. The data plane organiza- tion is interleaved by pixel. 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. PBMPLUS images do not carry this informa- tion, hence it has to be externally supplied. The default of 78 dpi has the beneficial property of not causing a resize on most Digital Equipment Corporation color monitors. 2 Options resolution The horizontal and vertical resolution of the output image in dots per inch. Defaults to 78 dpi. pnmfile The filename for the image file in pnm for- mat. If this argument is omitted, input is read from stdin. ddiffile The filename for the image file to be created in DDIF format. If this argument is omitted, the ddiffile is written to standard output. It can only specified if a pnmfile is also specified. 2 Author Burkhard Neidecker-Lutz Digital Equipment Corporation, CEC Karlsruhe neideck@nestvx.enet.dec.com 1 pnmtops pnmtops - convert portable anymap to PostScript 2 Synopsis pnmtops [-scale s] [-turn|-noturn] [-rle|-runlength] [-dpi n] [-width n] [-height n] [pnmfile] 2 Description Reads a portable anymap as input. Produces Encapsulated PostScript as output. If the input file is in color (PPM), a color PostScript file gets written. Some PostScript interpreters can't handle color PostScript. If you have one of these you will need to run your image through ppmtopgm first. Note that there is no pstopnm tool - this transformation is one-way, because a pstopnm tool would be a full-fledged PostScript interpreter, which is beyond the scope of this package. However, see the psidtopgm tool, which can read grayscale non-runlength PostScript image data. Also, if you're willing to install the fairly large GhostScript pack- age, it comes with a pstoppm script. 2 Options The -scale flag controls the scale of the result. The default scale is 1, which on a 300 dpi printer such as the Apple LaserWriter makes the output look about the same size as the input would if it was displayed on a typical 72 dpi screen. To get one PNM pixel per 300 dpi printer pixel, use "-scale 0.25". The -turn and -noturn flags control whether the image gets turned 90 degrees. Normally, if an image is wider than it is tall, it gets turned automatically to better fit the page. If the -turn flag is specified, it will be turned no matter what its shape; and if the -noturn flag is specified, it will not be turned no matter what its shape. The -rle or -runlength flag specifies run-length compres- sion. This may save time if the host-to-printer link is slow; but normally the printer's processing time dominates, so -rle makes things slower. The -dpi flag lets you specify the dots per inch 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. The -width and -height flags let you specify the size of the page. The default is 8.5 inches by 11 inches. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnm, psidtopgm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmtorast pnmtorast - convert a portable pixmap into a Sun rasterfile 2 Synopsis pnmtorast [-standard|-rle] [pnmfile] 2 Description Reads a portable pixmap as input. Produces a Sun rasterfile as output. Color values in Sun rasterfiles are eight bits wide, so pnmtorast will automatically scale colors to have a maxval of 255. An extra pnmdepth step is not necessary. 2 Options The -standard flag forces the result to be in RT_STANDARD form; the -rle flag, RT_BYTE_ENCODED, which is smaller but, well, less standard. The default is -rle. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also rasttopnm, pnm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmtoxwd pnmtoxwd - convert a portable anymap into an X11 window dump 2 Synopsis pnmtoxwd [-pseudodepth n] [-directcolor] [pnmfile] 2 Description Reads a portable anymap as input. Produces an X11 window dump as output. This window dump can be displayed using the xwud tool. 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. The -directcolor flag can be used to force a DirectColor dump. And the -pseudodepth flag can be used to change the depth of PseudoColor dumps from the default of 8 bits / 256 colors. 2 See_Also xwdtopnm, pnm, xwud 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 rasttopnm rasttopnm - convert a Sun rasterfile into a portable anymap 2 Synopsis rasttopnm [rastfile] 2 Description Reads a Sun rasterfile as input. Produces a portable anymap as output. The type of the output file depends on the input file - if it's black & white, a pbm file is written, else if it's grayscale a pgm file, else a ppm file. The program tells you which type it is writing. 2 See_Also pnmtorast, pnm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 xwdtopnm xwdtopnm - convert a X11 or X10 window dump file into a portable anymap 2 Synopsis xwdtopnm [xwdfile] 2 Description Reads a X11 or X10 window dump file as input. Produces a portable anymap as output. The type of the output file depends on the input file - if it's black & white, a pbm file is written, else if it's grayscale a pgm file, else a ppm file. The program tells you which type it is writing. Using this program, you can convert anything on an X workstation's screen into an anymap. Just display whatever you're interested in, do an xwd, run it through xwdtopnm, and then use pnmcut to select the part you want. 2 Bugs I haven't tested this tool with very many configurations, so there are probably bugs. Please let me know if you find any. 2 See_Also pnmtoxwd, pnm, xwd 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 zeisstopnm zeisstopnm - convert a Zeiss confocal file into a portable anymap 2 Synopsis zeisstopnm [-pgm | -ppm] [zeissfile] 2 Description Reads a Zeiss confocal file as input. Produces a portable anymap as output. The type of the output file depends on the input file - if it's grayscale a pgm file, else a ppm file will be produced. The program tells you which type it is writing. 2 Options -pgm Force the output to be a pgm file. -ppm Force the output to be a ppm file. 2 See_Also pnm 2 Author Copyright (C) 1993 by Oliver Trepte 1 pnmgamma pnmgamma - perform gamma correction on a portable anymap 2 Synopsis pnmgamma value [pnmfile] pnmgamma redvalue greenvalue bluevalue [pnmfile] 2 Description Reads a portable anymap as input. Performs gamma correc- tion, and produces a portable anymap as output. The arguments specify what gamma value(s) to use. A value of 1.0 leaves the image alone, less than one darkens it, and greater than one lightens it. 2 See_Also pnm 2 Author Copyright (C) 1991 by Bill Davidson and Jef Poskanzer. 1 pnmhistmap pnmhistmap - draw a histogram for a PGM or PPM file 2 Synopsis pnmhistmap [-black] [-white] [-max N] [-verbose] [pnmfile] 2 Description Reads a portable anymap as input, although bitmap (PBM) input produces an error message and no image. Produces an image showing a histogram of the color (or gray) values in the input. A graymap (PGM) input produces a bitmap output. A pixmap (PPM) input produces pixmap output with three over- laid histograms: a red one for the red input, a green one for the green input, and a blue one for the blue input. The output is fixed in size: 256 pixels wide by 200 pixels high. 2 Options -black Ignores the count of black pixels when scaling the his- togram. -white Ignores the count of white pixels when scaling the his- togram. The -black and -white options, which can be used seperately 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. -max N 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. -verbose Report the progress of making the histogram, including the largest-count value used to scale the output. All flags can be abbreviated to their shortest unique pre- fix. 2 Bugs Assumes maxval is always 255. Images with a smaller maxval will only use the lower-value side of the histogram. This can be overcome either by piping the input through "pnmdepth 255" or by cutting and scaling the lower-value side of the histogram. Neither is a particularly elegant solution. Should allow the output size to be specified. 2 See_Also pgmhist(1), ppmhist(1), pgm(5), ppm(5) 2 Author Wilson H. Bent. Jr. (whb@usc.edu). 1 pnmnlfilt pnmnlfilt - non-linear filters: smooth, alpha trim mean, optimal estimation smoothing, edge enhancement. 2 Synopsis pnmnlfilt alpha radius [pnmfile] 2 Description This is something of a swiss army knife filter. It has 3 distinct operating modes. In all of the modes each pixel in the image is examined and processed according to it and its surrounding pixels values. Rather than using the 9 pixels in a 3x3 block, 7 hexagonal area samples are taken, the size of the hexagons being controlled by the radius parameter. A radius value of 0.3333 means that the 7 hexagons exactly fit into the center pixel (ie. there will be no filtering effect). A radius value of 1.0 means that the 7 hexagons exactly fit a 3x3 pixel array. Alpha trimmed mean filter. (0.0 <= alpha 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 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 Optimal estimation smoothing. (1.0 <= alpha This type of filter applies a smoothing filter adaptively over the image. For each pixel the variance of the sur- rounding 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 con- trols the effective radius, but it probably advisable to leave the radius between 0.8 and 1.0 for the variance calcu- lation 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. Edge enhancement. (-0.1 >= alpha >= 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 Combination use. The various modes of pnmnlfilt 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 enhance- ment is the direct opposite of smoothing. 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 pos- sibly 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. 2 References 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. The optimal estimation filter is taken from an article "Con- verting 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. The edge enhancement details are from pgmenhance, 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. 2 See_Also pgmenhance, pnmconvol, pnm 2 Bugs Integers and tables may overflow if PPM_MAXMAXVAL is greater than 255. 2 Author Graeme W. Gill graeme@labtam.oz.au 1 pnmrotate pnmrotate - rotate a portable anymap by some angle 2 Synopsis pnmrotate [-noantialias] angle [pnmfile] 2 Description Reads a portable anymap as input. Rotates it by the speci- fied angle and produces a portable anymap 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), measured counter-clockwise. It can be negative, but it should be between -90 and 90. Also, for rotations greater than 45 degrees you may get better results if you first use pnmflip to do a 90 degree rotation and then pnmro- tate less than 45 degrees back the other direction 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 pix- els. 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 modi- fied. If you need to keep precisely the same set of colors, you can use the -noantialias flag. This does the shearing by moving pixels without changing their values. If you want anti-aliasing and don't care about the precise colors, but still need a limited *number* of colors, you can run the result through ppmquant. All flags can be abbreviated to their shortest unique pre- fix. 2 References "A Fast Algorithm for General Raster Rotation" by Alan Paeth, Graphics Interface '86, pp. 77-81. 2 See_Also pnmshear, pnmflip, pnm, ppmquant 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pnmshear pnmshear - shear a portable anymap by some angle 2 Synopsis pnmshear [-noantialias] angle [pnmfile] 2 Description Reads a portable anymap as input. Shears it by the speci- fied angle and produces a portable anymap 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: +-------+ +-------+ | | |\ \ | OLD | | \ NEW \ | | |an\ \ +-------+ |gle+-------+ If the angle is negative, it shears the other way: +-------+ |-an+-------+ | | |gl/ / | OLD | |e/ NEW / | | |/ / +-------+ +-------+ The angle should not get too close to 90 or -90, or the resulting anymap will be unreasonably wide. The shearing is implemented by looping over the source pix- els 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 -noantialias flag. This does the shearing by moving pixels without changing their values. If you want anti-aliasing and don't care about the precise colors, but still need a limited *number* of colors, you can run the result through ppmquant. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmrotate, pnmflip, pnm, ppmquant 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 tifftopnm tifftopnm - convert a TIFF file into a portable anymap 2 Synopsis tifftopnm [-headerdump] tifffile 2 Description Reads a TIFF file as input. Produces a portable anymap as output. The type of the output file depends on the input file - if it's black & white, a pbm file is written, else if it's grayscale a pgm file, else a ppm file. The program tells you which type it is writing. 2 Options -headerdump Dump TIFF file information to stderr. This information may be useful in debugging TIFF file conversion prob- lems. All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also pnmtotiff, pnm 2 Bugs This program is not self-contained. To use it you must fetch the TIFF Software package listed in the OTHER.SYSTEMS file and configure PBMPLUS to use libtiff. See PBMPLUS's Makefile for details on this configuration. 2 Author Derived by Jef Poskanzer from tif2ras.c, which is Copyright (c) 1990 by Sun Microsystems, Inc. Author: Patrick J. Naughton (naughton@wind.sun.com). 1 pnmtotiff pnmtotiff - convert a a portable anymap into a TIFF file 2 Synopsis pnmtotiff [-none|-packbits| -lzw|-g3|-g4] [-2d] [-fill] [- predictor n] [-msb2lsb|-lsb2msb] [-rowsperstrip n] [pnmfile] 2 Description Reads a portable anymap as input. Produces a TIFF file as output. 2 Options By default, pnmtotiff creates a TIFF file with LZW compres- sion. This is your best bet most of the time. However, some TIFF readers can't deal with it. If you want to try another compression scheme or tweak some of the other even more obscure output options, there are a number of flags to play with. The -none, -packbits, -lzw, -g3, and -g4 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 only be used with bilevel data. The -2d and -fill options are meaningful only with Group 3 compression: -2d requests 2-dimensional encoding, while - fill requests that each encoded scanline be zero-filled to a byte boundry. The -predictor option is only meaningful 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, pnmtotiff creates a TIFF file with msb-to-lsb fill order. The - msb2lsb and -lsb2msb options are used to override the default and set the fill order used in creating the file. The -rowsperstrip option can be used 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. 2 Bugs This program is not self-contained. To use it you must fetch the TIFF Software package listed in the OTHER.SYSTEMS file and configure PBMPLUS to use libtiff. See PBMPLUS's Makefile for details on this configuration. 2 See_Also tifftopnm, pnm 2 Author Derived by Jef Poskanzer from ras2tiff.c, which is Copyright (c) 1990 by Sun Microsystems, Inc. Author: Patrick J. Naughton (naughton@wind.sun.com). 1 libpnm libpnm - functions to support portable anymap programs 2 Synopsis #include cc ... libpnm.a libppm.a libpgm.a libpbm.a 2 Description TYPES AND CONSTANTS typedef ... xel; typedef ... xelval; #define PNM_MAXMAXVAL ... extern xelval pnm_pbmmaxval; Each xel contains three xelvals, each of which should con- tain only the values between 0 and PNM_MAXMAXVAL. pnm_pbmmaxval 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. XEL MANIPULATIONS xelval PNM_GET1( xel x ) This 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 PPM_GETR(), PPM_GETG(), and PPM_GETB(). void PNM_ASSIGN1( xel x, xelval v ) This 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 PPM_ASSIGN(). int PNM_EQUAL( xel x, xel y ) This macro checks two xels for equality. int PNM_FORMAT_TYPE( int format ) For distinguishing different file types. INITIALIZATION void pnm_init( int* argcP, char* argv[] ) All PNM programs must call this routine. MEMORY MANAGEMENT xel** pnm_allocarray( int cols, int rows ) Allocate an array of xels. xel* pnm_allocrow( int cols ) Allocate a row of the given number of xels. void pnm_freearray( xel** xels, int rows ) Free the array allocated with pnmllocarray() containing the given number of rows. void pnm_freerow( xel* xelrow ) Free a row of xels. READING FILES void pnm_readpnminit( FILE* fp, int* colsP, int* rowsP, xelval* maxvalP, int* formatP ) Read the header from a PNM file, filling in the rows, cols, maxval and format variables. void pnm_readpnmrow( FILE* fp, xel* xelrow, int cols, xelval maxval, int format ) Read a row of xels into the xelrow array. Format, cols, and maxval were filled in by pnm_readpnminit(). xel** pnm_readpnm( FILE* fp, int* colsP, int* rowsP, xelval* maxvalP, int* formatP ) Read an entire anymap file into memory, returning the allo- cated array and filling in the rows, cols, maxval, and for- mat variables. This function combines pnm_readpnminit(), pnm_allocarray() and pnm_readpnmrow(). Unlike the equivalent functions in PBM, PGM, and PPM, it returns the format so you can tell what type the file is. WRITING FILES void pnm_writepnminit( FILE* fp, int cols, int rows, xelval maxval, int format, int forceplain ) Write the header for a portable anymap file. Unlike the equivalent functions in PBM, PGM, and PPM, you have to specify the output type. The forceplain flag forces a plain-format file to be written, as opposed to a raw-format one. void pnm_writepnmrow( FILE* fp, xel* xelrow, int cols, xelval maxval, int format, int forceplain ) Write a row from a portable anymap. void pnm_writepnm( FILE* fp, xel** xels, int cols, int rows, xelval maxval, int format, int forceplain ) Write the header and all data for a portable anymap. This function combines pnm_writepnminit() and pnm_writepnmrow(). FORMAT PROMOTION void pnm_promoteformatrow( xel* xelrow, int cols, xelval maxval, int format, xelval newmaxval, int newformat ) Promote a row of xels from one maxval and format to a new set. Used when combining multiple anymaps of different types - just take the max of the maxvals and the max of the formats, and promote them all to that. void pnm_promoteformat( xel** xels, int cols, int rows, xelval maxval, int format, xelval newmaxval, int newformat ) Promote an entire anymap. XEL MANIPULATION xel pnm_whitexel( xelval maxval, int format ) xel pnm_blackxel( xelval maxval, int format ) Return a white or black xel for the given maxval and format. void pnm_invertxel( xel* x, xelval maxval, int format ) Invert an xel. xel pnm_backgroundxelrow( xel* xelrow, int cols, xelval maxval, int format ) Figure out an appropriate background xel based on this row. xel pnm_backgroundxel( xel** xels, int cols, int rows, xelval maxval, int format ) Figure out a background xel based on an entire anymap. This can do a slightly better job than pnm_backgroundxelrow(). 2 See_Also pbm, pgm, ppm 2 Author Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. 1 pnm pnm - portable anymap file format 2 Description The pnm programs operate on portable bitmaps, graymaps, and pixmaps, produced by the pbm, pgm, and ppm segments. There is no file format associated with pnm itself. 2 See_Also anytopnm, rasttopnm, tifftopnm, xwdtopnm, pnmtops, pnmtorast, pnmtotiff, pnmtoxwd, pnmar- ith, pnmcat, pnmconvol, pnmcrop, pnmcut, pnmdepth, pnmenlarge, pnmfile, pnmflip, pnmgamma, pnmindex, pnminvert, pnmmargin, pnmnoraw, pnmpaste, pnmrotate, pnmscale, pnmshear, pnmsmooth, pnmtile, ppm, pgm, pbm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 bmptoppm bmptoppm - convert a BMP file into a portable pixmap 2 Synopsis bmptoppm [bmpfile] 2 Description Reads a Microsoft Windows or OS/2 BMP file as input. Pro- duces a portable pixmap as output. 2 See_Also ppmtobmp, ppm 2 Author Copyright (C) 1992 by David W. Sanderson. 1 gouldtoppm gouldtoppm - convert Gould scanner file into a portable pix- map 2 Synopsis gouldtoppm [gouldfile] 2 Description Reads a file produced by the Gould scanner as input. Pro- duces a portable pixmap as output. 2 See_Also ppm 2 Author Copyright(C) 1990 by Stephen Paul Lesniewski 1 ilbmtoppm ilbmtoppm - convert an ILBM file into a portable pixmap 2 Synopsis ilbmtoppm [-verbose] [ILBMfile] 2 Description Reads an IFF ILBM file as input. Produces a portable pixmap as output. Supported ILBM types are: Normal ILBMs with 1-16 planes. Amiga Extra-Halfbrite (EHB) Amiga Hold-and-modify (HAM) with 3-16 planes. 24 bit. Color map (BMHD + CMAP chunk only, nPlanes = 0). Unofficial direct color. 1-16 planes for each color component. Chunks used: BMHD, CMAP, CAMG (only HAM & EHB flags used), BODY unofficial DCOL chunk to identify direct color ILBM Chunks ignored: GRAB, DEST, SPRT, CRNG, CCRT, CLUT, DPPV, DRNG, EPSF Other chunks (ignored but displayed in verbose mode): NAME, AUTH, (c), ANNO, DPI Unknown chunks are skipped. 2 Options -verbose Give some informaton about the ILBM file. 2 Bugs Probably. 2 References Amiga ROM Kernel Reference Manual - Devices (3rd Ed.) Addison Wesley, ISBN 0-201-56775-X 2 See_Also ppm(5), ppmtoilbm(1) 2 Authors Copyright (C) 1989 by Jef Poskanzer. Modified June 1993 by Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) 1 imgtoppm imgtoppm - convert an Img-whatnot file into a portable pix- map 2 Synopsis imgtoppm [imgfile] 2 Description Reads an Img-whatnot file as input. Produces a portable pixmap as output. The Img-whatnot toolkit is available for FTP on venera.isi.edu, along with numerous images in this format. 2 See_Also ppm 2 Author Based on a simple conversion program posted to comp.graphics by Ed Falk. Copyright (C) 1989 by Jef Poskanzer. 1 mtvtoppm mtvtoppm - convert output from the MTV or PRT ray tracers into a portable pixmap 2 Synopsis mtvtoppm [mtvfile] 2 Description Reads an input file from Mark VanDeWettering's MTV ray tracer. Produces a portable pixmap as output. The PRT raytracer also produces this format. 2 See_Also ppm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 pcxtoppm pcxtoppm - convert a PCX file into a portable pixmap 2 Synopsis pcxtoppm [pcxfile] 2 Description Reads a PCX file as input. Produces a portable pixmap as output. 2 See_Also ppmtopcx, ppm 2 Author Copyright (C) 1990 by Michael Davidson. 1 pgmtoppm pgmtoppm - colorize a portable graymap into a portable pix- map 2 Synopsis pgmtoppm colorspec [pgmfile] pgmtoppm colorspec1-colorspec2 [pgmfile] pgmtoppm -map mapfile [pgmfile] 2 Description Reads a portable graymap as input. Colorizes it by multi- plying the the gray values by specified color or colors, and produces a portable pixmap as output. If only one color is specified, black in the pgm file stays black and white in the pgm file turns into the specified color in the ppm file. If two colors (separated by a dash) are specified, then black gets mapped to the first color and white gets mapped to the second. The color can be specified in five ways: o A name, assuming that a pointer to an X11-style color names file was compiled in. o An X11-style hexadecimal specifier: rgb:r/g/b, where r g and b are each 1- to 4-digit hexadecimal numbers. o An X11-style decimal specifier: rgbi:r/g/b, where r g and b are floating point numbers between 0 and 1. o For backwards compatibility, an old-X11-style hexade- cimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. o For backwards compatibility, a triplet of numbers separated by commas: r,g,b, where r g and b are float- ing point numbers between 0 and 1. (This style was added before MIT came up with the similar rgbi style.) Also, the -map flag lets you specify an entire colormap to be used. The mapfile is just a ppm 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. 2 See_Also rgb3toppm, ppmtopgm, ppmtorgb3, ppm, pgm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 pi1toppm pi1toppm - convert an Atari Degas .pi1 into a portable pix- map 2 Synopsis pi1toppm [pi1file] 2 Description Reads an Atari Degas .pi1 file as input. Produces a port- able pixmap as output. 2 See_Also ppmtopi1, ppm, pi3topbm, pbmtopi3 2 Author Copyright (C) 1991 by Steve Belczyk (seb3@gte.com) and Jef Poskanzer. 1 picttoppm picttoppm - convert a Macintosh PICT file into a portable pixmap 2 Synopsis picttoppm [-verbose] [-fullres] [-noheader] [pictfile] 2 Description Reads a PICT file (version 1 or 2) and outputs a portable pixmap. Useful as the first step in converting a scanned image to something that can be displayed on Unix. 2 Options -fullres 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 out- put. This option forces images to retain their sizes and prevent information loss. -noheader 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. -verbose Turns on verbose mode which prints a a whole bunch of information that only picttoppm hackers really care about. 2 Bugs The PICT file format is a general drawing format. picttoppm only supports a small subset of its operations but is still very useful for files produced by scanning software. In particular, text added to a scanned image will be silently ignored. 2 See_Also Inside Macintosh volume 5, ppmtopict, ppm 2 Author Copyright 1989 George Phillips 1 pjtoppm pjtoppm - convert an HP PaintJet file to a portable pixmap 2 Synopsis pjtoppm [paintjet] 2 Description Reads an HP PaintJet file as input and converts it into a portable pixmap. 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 con- vert most raster image files. REFERENCES HP PaintJet XL Color Graphics Printer User's Guide 2 See_Also ppmtopj 2 Author Copyright (C) 1991 by Christos Zoulas. 1 ppm3d ppm3d - convert two portable pixmap into a red/blue 3d glasses pixmap 2 Synopsis ppm3d leftppmfile rightppmfile [horizontal offset] 2 Description Reads two portable pixmaps as input. Produces a portable pixmap as output, with the images overlapping by horizontal offset pixels in blue/red format. horizontal offset defaults to 30 pixels. Pixmaps MUST be the same size. 2 See_Also ppm(5) 2 Author Copyright (C) 1993 by David K. Drum. 1 ppmbrighten ppmbrighten - change an images Saturation and Value from an HSV map 2 Synopsis ppmbrighten [-n] [-s <+- saturation>] [-v <+- value>] 2 Description Reads a portable pixmap as input. Converts the image from RGB space to HSV space and changes the Value by <+- value> as a percentage. Likewise with the Saturation. Doubling the Value would involve ppmbrighten -v 100 to add 100 percent to the Value. The 'n' option normalizes the Value to exist between 0 and 1 (normalized). 2 See_Also pgmnorm, ppm 2 Notes This program does not change the number of colors. 2 Author Copyright (C) 1990 by Brian Moffet Copyright (C) 1989 by Jef Poskanzer. 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 docu- mentation. This software is provided "as is" without express or implied warranty. 1 ppmchange ppmchange - change all pixels of one color to another in a portable pixmap 2 Synopsis ppmchange colorspec1 colorspec2 [ppmfile] 2 Description Reads a portable pixmap as input. Changes all pixels of colorspec1 to colorspec2, leaving all others unchanged. The color can be specified in five ways: o A name, assuming that a pointer to an X11-style color names file was compiled in. o An X11-style hexadecimal specifier: rgb:r/g/b, where r g and b are each 1- to 4-digit hexadecimal numbers. o An X11-style decimal specifier: rgbi:r/g/b, where r g and b are floating point numbers between 0 and 1. o For backwards compatibility, an old-X11-style hexade- cimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. o For backwards compatibility, a triplet of numbers separated by commas: r,g,b, where r g and b are float- ing point numbers between 0 and 1. (This style was added before MIT came up with the similar rgbi style.) 2 See_Also pgmtoppm(1), ppm(5) 2 Author Wilson H. Bent. Jr. (whb@usc.edu) 1 ppmdim ppmdim - dim a portable pixmap down to total blackness 2 Synopsis ppmdim dimfactor [ppmfile] 2 Description Reads a portable pixmap as input. Diminishes its brightness by the specified dimfactor down to total blackness. The dimfactor may be in the range from 0.0 (total blackness, deep night, nada, null, nothing) to 1.0 (original picture's brightness). As pnmgamma does not do the brightness correction in the way I wanted it, this small program was written. ppmdim is similar to ppmbrighten , but not exactly the same. 2 See_Also ppm(5), ppmflash(1), pnmgamma(1), ppmbrighten(1) 2 Author Copyright (C) 1993 by Frank Neumann 1 ppmdist ppmdist - simplistic grayscale assignment for machine generated, color images 2 Synopsis ppmdist [-intensity|-frequency] [ppmfile] 2 Description Reads a portable pixmap as input, performs a simplistic grayscale assignment intended for use with grayscale or bit- map printers. Often conversion from ppm to pgm will yield an image with contrast too low for good printer output. The program max- imizes contrast between the gray levels output. 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. The mapping from color to stepped grayscale can be performed in order of input pixel intensity, or input pixel frequency (number of repetitions). 2 Options Helpful only for images with a very small number of colors. Perhaps should have been an option to ppmtopgm. 2 See_Also ppmtopgm, ppmhist, ppm 2 Author Copyright (C) 1993 by Dan Stromberg. 1 ppmdither ppmdither - ordered dither for color images 2 Synopsis ppmdither [-dim dimension] [-red shades] [-green shades] [- blue shades] [ppmfile] 2 Description Reads a portable pixmap 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. The maximum number of colors that can be used is 256 and can be computed as the product of the number of red, green and blue shades. 2 Options -dim dimension The size of the dithering matrix. Must be a power of 2. -red shades The number of red shades to be used; minimum of 2. -green shades The number of green shades to be used; minimum of 2. -blue shades The number of blue shades to be used; minimum of 2. 2 See_Also pnmdepth, ppmquant, ppm 2 Author Copyright (C) 1991 by Christos Zoulas. 1 ppmflash ppmflash - brighten a picture up to complete white-out 2 Synopsis ppmflash flashfactor [ppmfile] 2 Description Reads a portable pixmap as input. Increases its brightness by the specified flashfactor up to a total white-out image. The flashfactor may be in the range from 0.0 (original picture's brightness) to 1.0 (full white-out, The Second After). As pnmgamma does not do the brightness correction in the way I wanted it, this small program was written. This program is similar to ppmbrighten, but not exactly the same. 2 See_Also ppm(5), ppmdim(1), pnmgamma(1), ppmbrighten(1) 2 Author Copyright (C) 1993 by Frank Neumann 1 ppmhist ppmhist - print a histogram of a portable pixmap 2 Synopsis ppmhist [ppmfile] 2 Description Reads a portable pixmap as input. Generates a histogram of the colors in the pixmap. 2 See_Also ppm, pgmhist 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 ppmmake ppmmake - create a pixmap of a specified size and color 2 Synopsis ppmmake color width height 2 Description Produces a portable pixmap of the specified color, width, and height. The color can be specified in five ways: o A name, assuming that a pointer to an X11-style color names file was compiled in. o An X11-style hexadecimal specifier: rgb:r/g/b, where r g and b are each 1- to 4-digit hexadecimal numbers. o An X11-style decimal specifier: rgbi:r/g/b, where r g and b are floating point numbers between 0 and 1. o For backwards compatibility, an old-X11-style hexade- cimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. o For backwards compatibility, a triplet of numbers separated by commas: r,g,b, where r g and b are float- ing point numbers between 0 and 1. (This style was added before MIT came up with the similar rgbi style.) 2 See_Also ppm, pbmmake 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 ppmmix ppmmix - blend together two portable pixmaps 2 Synopsis ppmmix fadefactor ppmfile1 ppmfile2 2 Description Reads two portable pixmaps as input. 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 gains a smooth blend between the two images. The two pixmaps must have the same size. 2 See_Also ppm(5) 2 Author Copyright (C) 1993 by Frank Neumann 1 ppmquant ppmquant - quantize the colors in a portable pixmap down to a specified number 2 Synopsis ppmquant [-floyd|-fs] ncolors [ppmfile] ppmquant [-floyd|-fs] -map mapfile [ppmfile] 2 Description Reads a portable pixmap as input. Chooses ncolors colors to best represent the image, maps the existing colors to the new ones, and writes a portable pixmap as output. The quantization method is Heckbert's "median cut". Alternately, you can skip the color-choosing step by speci- fying your own set of colors with the -map flag. The map- file is just a ppm file; it can be any shape, all that matters is the colors in it. For instance, to quantize down to the 8-color IBM TTL color set, you might use: P3 8 1 255 0 0 0 255 0 0 0 255 0 0 0 255 255 255 0 255 0 255 0 255 255 255 255 255 If you want to quantize one pixmap to use the colors in another one, just use the second one as the mapfile. You don't have to reduce it down to only one pixel of each color, just use it as is. The -floyd/-fs flag enables a Floyd-Steinberg error diffu- sion step. Floyd-Steinberg gives vastly better results on images where the 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, so the default is off. All flags can be abbreviated to their shortest unique pre- fix. 2 References "Color Image Quantization for Frame Buffer Display" by Paul Heckbert, SIGGRAPH '82 Proceedings, page 297. 2 See_Also ppmquantall, pnmdepth, ppmdither, ppm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 ppmrelief ppmrelief - run a Laplacian relief filter on a portable pixmap 2 Synopsis ppmrelief [ppmfile] 2 Description Reads a portable pixmap as input. Does a Laplacian relief filter, and writes a portable pixmap as output. The Laplacian relief filter is described in "Beyond Photog- raphy" by Holzmann, equation 3.19. It's a sort of edge- detection. 2 See_Also pgmbentley, pgmoil, ppm 2 Author Copyright (C) 1990 by Wilson Bent (whb@hoh-2.att.com) 1 ppmshift ppmshift - shift lines of a portable pixmap left or right by a random amount 2 Synopsis ppmshift shift [ppmfile] 2 Description Reads a portable pixmap as input. Shifts every row of image data to the left or right by a certain amount. The 'shift' parameter determines by how many pixels a row is to be shifted at most. 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. 2 Example 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: # take the upper half, and leave it like it is pnmcut 0 0 800 300 cs.ppm >upper.ppm # take the lower half, flip it upside down, dim it and distort it a little pnmcut 0 300 800 300 cs.ppm | pnmflip -tb | ppmdim 0.7 | ppmshift 10 >lower.ppm # and concatenate the two pieces pnmcat -tb upper.ppm lower.ppm >newpic.ppm The resulting picture looks like the image being reflected on a water surface with slight ripples. 2 See_Also ppm(5), pnmcut(1), pnmflip(1), ppmdim(1), pnmcat(1) 2 Author Copyright (C) 1993 by Frank Neumann 1 ppmspread ppmspread - displace a portable pixmap's pixels by a random amount 2 Synopsis ppmspread amount [ppmfile] 2 Description Reads a portable pixmap as input. Moves every pixel around a bit relative to its original position. amount determines by how many pixels a pixel is to be moved around at most. Pictures processed with this filter will seem to be somewhat dissolved or unfocussed (although they appear more coarse than images processed by something like pnmconvol ). 2 See_Also ppm(5), pnmconvol(1) 2 Author Copyright (C) 1993 by Frank Neumann 1 ppmtoacad ppmtoacad - convert portable pixmap to AutoCAD database or slide 2 Synopsis ppmtoacad [-dxb] [-poly] [-background colour] [-white] [- aspect ratio] [-8] [ppmfile] 2 Description Reads a portable pixmap as input. Produces an AutoCAD(Reg.) slide file or binary database import (.dxb) file as output. If no ppmfile is specified, input is read from standard input. 2 Options -dxb An AutoCAD binary database import (.dxb) file is writ- ten. This file is read with the DXBIN command and, once loaded, becomes part of the AutoCAD geometrical database and can be viewed and edited 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. -poly If the -dxb option is not specified, the output of ppmtoacad is an AutoCAD slide file. Normally each row of pixels is represented by an AutoCAD line entity. If -poly is selected, the pixels are rendered as filled polygons. If the slide is viewed on a display with higher resolution than the source pixmap, this will cause the pixels to expand instead of appearing as discrete lines against the screen background colour. Regrettably, this representation yields slide files which occupy more disc space and take longer to display. -background colour Most AutoCAD display drivers can be configured to use any available colour as the screen background. Some users perfer a black screen background, others white, while splinter groups advocate burnt ocher, tawny puce, and shocking grey. Discarding pixels whose closest AutoCAD colour representation is equal to the back- ground colour can substantially reduce the size of the AutoCAD database or slide file needed to represent a bitmap. If no -background colour is specified, the screen background colour is assumed to be black. Any AutoCAD colour number may be specified as the screen background; colour numbers are assumed to specify the hues defined in the standard AutoCAD 256 colour palette. -white Since many AutoCAD users choose a white screen back- ground, this option is provided as a short-cut. Speci- fying -white is identical in effect to -background 7. -aspect ratio If the source pixmap had non-square pixels, the ratio of the pixel width to pixel height should be specified as ratio. The resulting slide or .dxb file will be corrected so that pixels on the AutoCAD screen will be square. For example, to correct an image made for a 320x200 VGA/MCGA screen, specify -aspect 0.8333. -8 Restricts the colours in the output file to the 8 RGB shades. All flags can be abbreviated to their shortest unique pre- fix. 2 Bugs AutoCAD has a fixed palette of 256 colours, distributed along the hue, lightness, and saturation axes. Pixmaps which contain many nearly-identical colours, or colours not closely approximated by AutoCAD's palette, may be poorly rendered. ppmtoacad works best if the system displaying its output supports the full 256 colour AutoCAD palette. Monochrome, 8 colour, and 16 colour configurations will produce less than optimal results. When creating a .dxb file or a slide file with the -poly option, ppmtoacad 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 colour but it's no substitute for true raster to vector conversion. In particular, thin diagonal lines are not optimised at all by this process. Output files can be huge. 2 See_Also AutoCAD Reference Manual: Slide File Format and Binary Draw- ing Interchange (DXB) Files, ppm 2 Author John Walker Autodesk SA Avenue des Champs-Montants 14b CH-2074 MARIN Suisse/Schweiz/Svizzera/Svizra/Switzerland Usenet: kelvin@Autodesk.com Fax: 038/33 88 15 Voice: 038/33 76 33 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 restric- tions. This software is provided ``as is'' without express or implied warranty. AutoCAD and Autodesk are registered trademarks of Autodesk, Inc. 1 ppmtobmp ppmtobmp - convert a portable pixmap into a BMP file 2 Synopsis ppmtobmp [-windows] [-os2] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a Microsoft Win- dows or OS/2 BMP file as output. 2 Options -windows Tells the program to produce a Microsoft Windows BMP file. -os2 Tells the program to produce an OS/2 BMP file. (This is the default.) All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also bmptoppm, ppm 2 Author Copyright (C) 1992 by David W. Sanderson. 1 ppmtogif ppmtogif - convert a portable pixmap into a GIF file 2 Synopsis ppmtogif [-interlace] [-sort] [-map mapfile ] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a GIF file as output. 2 Options -interlace Tells the program to produce an interlaced GIF file. -sort Produces a GIF file with a sorted color map. -map mapfile Uses the colors found in the mapfile to create the colormap in the GIF file, instead of the colors from ppmfile. The mapfile can be any ppm file; all that matters is the colors in it. If the colors in ppmfile do not match those in mapfile , they are matched to a "best match". A (much) better result can be obtained by using the following filter in advance: ppmquant -floyd -map mapfile All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also giftopnm, ppmquant, ppm 2 Author Based on GIFENCOD by David Rowley . Lempel-Ziv compression based on "compress". Copyright (C) 1989 by Jef Poskanzer. 1 ppmtoicr ppmtoicr - convert a portable pixmap into NCSA ICR format 2 Synopsis ppmtoicr [-windowname name] [-expand expand] [-display display] [-rle] [ppmfile] 2 Description Reads a portable pixmap file as input. Produces an NCSA Telnet Interactive Color Raster graphic file as output. If ppmfile is not supplied, ppmtoicr will read from standard input. 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. ppmtoicr 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. Note that there is no icrtoppm tool - this transformation is one way. 2 Options -windownamename Output will be displayed in name (Default is to use ppmfile or "untitled" if standard input is read.) -expandexpand Output will be expanded on display by factor expand (For example, a value of 2 will cause four pixels to be displayed for every input pixel.) -displaydisplay Output will be displayed on screen numbered display -rle Use run-length encoded format for display. (This will nearly always result in a quicker display, but may skew the colormap.) 2 Examples To display a ppm file using the protocol: ppmtoicr ppmfile This will create a window named ppmfile on the display with the correct dimensions for ppmfile, create and download a colormap of up to 256 colors, and download the picture into the window. The same effect may be achieved by the following sequence: ppmtoicr ppmfile > filename cat filename 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: giftopnm giffile | ppmtoicr -w giffile -r -e 2 2 Bugs The protocol uses frequent fflush calls to speed up display. If the output is saved to a file for later display via cat, drawing will be much slower. In either case, increasing the Blocksize limit on the display will speed up transmission substantially. 2 See_Also ppm NCSA Telnet for the Macintosh, University of Illinois at Urbana-Champaign (1989) 2 Author Copyright (C) 1990 by Kanthan Pillay (svpillay@Princeton.EDU), Princeton University Computing and Information Technology. 1 ppmtoilbm ppmtoilbm - convert a portable pixmap into an ILBM file 2 Synopsis ppmtoilbm [-maxplanes|-mp N] [-fixplanes|-fp N] [-ham6|- ham8] [-dcbits|-dcplanesrg [-normal|-hamif|-hamforce - dcif|-dcforce|-cmaponly] [-ecs|-aga] [-mapppmfile] [ppmfile] 2 Description Reads a portable pixmap as input. Produces an ILBM file as output. Supported ILBM types are: Normal ILBMs with 1-16 planes. Amiga Hold-and-modify (HAM) with 3-16 planes. 24 bit. Color map (BMHD + CMAP chunk only, nPlanes = 0). Unofficial direct color. 1-16 planes for each color component. Chunks written: BMHD, CMAP, CAMG (only for HAM), BODY (not for colormap files) unofficial DCOL chunk for direct color ILBM 2 Options Options marked with (*) can be prefixed with a "no", e.g. "-nohamif". All options can be abbreviated to their shortest unique prefix. -maxplanes | -mp n (default 5, minimum 1, maximum 16) Maximum planes to write in a normal ILBM. If the pixmap does not fit into 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. -fixplanes | -fp n (min 1, max 16) If a normal ILBM is written, it will have exactly planes. -hambits | -hamplanes n (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. -normal (default) Turns off -hamif/-24if/-dcif, -hamforce/-24force/- dcforce and -cmaponly. -hamif (*) -24if (*) -dcif (*) Write a HAM/24bit/direct color file if the pixmap does not fit into planes. -hamforce (*) -24force (*) -dcforce (*) Write a HAM/24bit/direct color file. -dcbits | -dcplanes r g b (default 5, min 1, max 16). Select number of bits for red, green & blue in a direct color ILBM. -ecs (default) Shortcut for: -hamplanes 6 -maxplanes 5 -aga Shortcut for: -hamplanes 8 -maxplanes 8 -ham6 Shortcut for: -hamplanes 6 -hamforce -ham8 Shortcut for: -hamplanes 8 -hamforce -map ppmfile Write a normal ILBM using the colors in as the colormap. The colormap file also determines the number of planes, a -maxplanes or -fixplanes option is ignored. -cmaponly Write a colormap file: only BMHD and CMAP chunks, no BODY chunk, nPlanes = 0. 2 Bugs Needs a real colormap selection algorithm for HAM pictures, instead of using a grayscale colormap. 2 References Amiga ROM Kernel Reference Manual - Devices (3rd Ed.) Addison Wesley, ISBN 0-201-56775-X 2 See_Also ppm(5), ilbmtoppm(1) 2 Authors Copyright (C) 1989 by Jef Poskanzer. Modified August 1993 by Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) 1 ppmtomitsu ppmtomitsu - convert a portable pixmap to a Mitsubishi S340-10 file 2 Synopsis ppmtomitsu [-sharpness val] [-enlarge val] [-media string] [-copy val] [-dpi300] [-tiny] [ppmfile] 2 Description Reads a portable pixmap 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. 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. -sharpness 1-4 'sharpness' designation. Default is to use the current sharpness. -enlarge 1-3 Enlarge by a factor; Default is 1 (no enlarge) -media A, A4, AS, A4S 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. -copy 1-9 The number of copies to produce. Default is 1. -dpi300 Double the number of allowed pixels for a S3600-30 Printer in S340-10 compatibility mode. (The S3600-30 has 300 dpi). -tiny 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. 2 References Mitsubishi Sublimation Full Color Printer S340-10 Specifications of Parallel Interface LSP-F0232F 2 See_Also ppmquant(1), pnmscale(1), ppm(5) 2 Bugs We didn't find any - yet. (Besides, they're called features anyway :-) If you should find one, my email-adress is below. 2 Author Copyright (C) 1992, 93 by S.Petra Zeidler, MPIfR Bonn, Germany. (spz@specklec.mpifr-bonn.mpg.de) 1 ppmtopcx ppmtopcx - convert a portable pixmap into a PCX file 2 Synopsis ppmtopcx [ppmfile] 2 Description Reads a portable pixmap as input. Produces a PCX file as output. 2 See_Also pcxtoppm, ppm 2 Author Copyright (C) 1990 by Michael Davidson. 1 ppmtopgm ppmtopgm - convert a portable pixmap into a portable graymap 2 Synopsis ppmtopgm [ppmfile] 2 Description Reads a portable pixmap as input. Produces a portable gray- map as output. The quantization formula used is .299 r + .587 g + .114 b. Note that although there is a pgmtoppm program, it is not necessary for simple conversions from pgm to ppm, because any ppm program can read pgm (and pbm ) files automagically. pgmtoppm is for colorizing a pgm file. Also, see ppmtorgb3 for a different way of converting color to gray. 2 QUOTE 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. 2 See_Also pgmtoppm, ppmtorgb3, rgb3toppm, ppm, pgm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 ppmtopi1 ppmtopi1 - convert a portable pixmap into an Atari Degas .pi1 file 2 Synopsis ppmtopi1 [ppmfile] 2 Description Reads a portable pixmap as input. Produces an Atari Degas .pi1 file as output. 2 See_Also pi1toppm, ppm, pbmtopi3, pi3topbm 2 Author Copyright (C) 1991 by Steve Belczyk (seb3@gte.com) and Jef Poskanzer. 1 ppmtopict ppmtopict - convert a portable pixmap into a Macintosh PICT file 2 Synopsis ppmtopict [ppmfile] 2 Description Reads a portable pixmap as input. Produces a Macintosh PICT file as output. The generated file is only the data fork of a picture. You will need a program such as mcvert to generate a Macbinary or a BinHex file that contains the necessary information to identify the file as a PICT file to MacOS. Even though PICT supports 2 and 4 bits per pixel, ppmtopict always generates an 8 bits per pixel file. 2 Bugs The picture size field is only correct if the output is to a file since writing into this field requires seeking back- wards 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. 2 See_Also picttoppm, ppm, mcvert 2 Author Copyright (C) 1990 by Ken Yap . 1 ppmtopj ppmtopj - convert a portable pixmap to an HP PaintJet file 2 Synopsis ppmtopj [-gamma val] [-xpos val] [-ypos val] [-back dark|lite] [-rle] [-center] [-render none|snap|bw|dither|diffuse|monodither|monodiffuse|clusterdither|monoclusterdither] [ppmfile] 2 Description Reads a portable pixmap as input and converts it into a for- mat suitable to be printed by an HP PaintJet printer. 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 get this by send- ing the input file through ppmquant -map with a map file such as: P3 8 1 255 0 0 0 255 0 0 0 255 0 0 0 255 255 255 0 255 0 255 0 255 255 255 255 255 Or else you could use use ppmdither -red 2 -green 2 -blue 2 Options -rle Run length encode the image. (This can result in larger images) -back Enhance the foreground by indicating if the background is light or dark compated to the foreground. -render alg Use an internal rendering algorithm (default dither). -gamma int Gamma correct the image using the integet parameter as a gamma (default 0). -center Center the image to an 8.5 by 11 page -xpos pos Move by pos pixels in the x direction. -ypos pos Move by pos pixels in the y direction. 2 References HP PaintJet XL Color Graphics Printer User's Guide 2 See_Also pnmdepth, ppmquant, ppmdither, ppm 2 Bugs Most of the options have not been tested because of the price of the paper. 2 Author Copyright (C) 1991 by Christos Zoulas. 1 ppmtopuzz ppmtopuzz - convert a portable pixmap into an X11 "puzzle" file 2 Synopsis ppmtopuzz [ppmfile] 2 Description Reads a portable pixmap as input. Produces an X11 "puzzle" file as output. A "puzzle" file is for use with the puzzle program included with the X11 distribution - puzzle's - picture flag lets you specify an image file. 2 See_Also ppm, puzzle 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 ppmtorgb3 ppmtorgb3 - separate a portable pixmap into three portable graymaps 2 Synopsis ppmtorgb3 [ppmfile] 2 Description Reads a portable pixmap as input. Writes three portable graymaps as output, one each for red, green, and blue. The output filenames are constructed by taking the input filename, stripping off any extension, and appending ".red", ".grn", and ".blu". For example, separating lenna.ppm would result in lenna.red, lenna.grn, and lenna.blu. If the input comes from stdin, the names are noname.red, noname.grn, and noname.blu. 2 See_Also rgb3toppm, ppmtopgm, pgmtoppm, ppm, pgm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 ppmtosixel ppmtosixel - convert a portable pixmap into DEC sixel format 2 Synopsis ppmtosixel [-raw] [-margin] [ppmfile] 2 Description Reads a portable pixmap as input. Produces sixel commands (SIX) as output. The output is formatted for color print- ing, e.g. for a DEC LJ250 color inkjet printer. If RGB values from the PPM file do not have maxval=100, the RGB values are rescaled. A printer control header and a color assignment table begin the SIX file. Image data is written in a compressed format by default. A printer con- trol footer ends the image file. 2 Options -raw If specified, each pixel will be explicitly described in the image file. If -raw is not specified, output will default to compressed format in which identical adjacent pixels are replaced by "repeat pixel" com- mands. A raw file is often an order of magnitude larger than a compressed file and prints much slower. -margin If -margin is not specified, the image will be start at the left margin (of the window, paper, or whatever). If -margin is specified, a 1.5 inch left margin will offset the image. 2 Printing Generally, sixel files must reach the printer unfiltered. Use the lpr -x option or cat filename > /dev/tty0?. 2 Bugs Upon rescaling, truncation of the least significant bits of RGB values may result in poor color conversion. If the ori- ginal 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. 2 See_Also ppm 2 Author Copyright (C) 1991 by Rick Vinci. 1 ppmtotga ppmtotga - convert portable pixmap into a TrueVision Targa file 2 Synopsis ppmtotga [-mono|-cmap|-rgb] [-norle] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a TrueVision Targa file as output. 2 Options -mono Forces Targa file to be of type 8 bit monochrome. Input must be a portable bitmap or a portable graymap. -cmap Forces Targa file to be of type 24 bit colormapped. Input must be a portable bitmap, a portable graymap or a portable pixmap containing no more than 256 distinct colors. -rgb Forces Targa file to be of type 24 bit unmapped color. -norle Disables run-length encoding, in case you have a Targa reader which can't read run-length encoded files. All flags can be abbreviated to their shortest unique pre- fix. If no file type is specified the most highly con- stained compatible type is used, where monochrome is more constained than colormapped which is in turn more constained than unmapped. 2 Bugs Does not support all possible Targa file types. Should really be in PNM, not PPM. 2 See_Also tgatoppm, ppm 2 Author Copyright (C) 1989, 1991 by Mark Shand and Jef Poskanzer. 1 ppmtouil ppmtouil - convert a portable pixmap into a Motif UIL icon file 2 Synopsis ppmtouil [-name uilname] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a Motif UIL icon file as output. If the program was compiled with an rgb database specified, and a RGB value from the ppm input matches a RGB value from the database, then the corresponding color name mnemonic is printed in the UIL's colormap. If no rgb database was com- piled in, or if the RGB values don't match, then the color will be printed with the #RGB, #RRGGBB, #RRRGGGBBB, or #RRRRGGGGBBBB hexadecimal format. 2 Options -name 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 -name is not specified and no ppmfile is specified (i.e. piped input), the prefix string will default to the string "noname". All flags can be abbreviated to their shortest unique pre- fix. 2 See_Also ppm 2 Author Converted by Jef Poskanzer from ppmtoxpm.c, which is Copy- right (C) 1990 by Mark W. Snitily 1 ppmtoxpm ppmtoxpm - convert a portable pixmap into an X11 pixmap 2 Synopsis ppmtoxpm [-name xpmname] [ppmfile] 2 Description Reads a portable pixmap as input. Produces X11 pixmap (XPM) as output. If the program was compiled with an rgb database specified, and a RGB value from the ppm input matches a RGB value from the database, then the corresponding color name mnemonic is printed in the XPM's colormap. If no rgb database was com- piled in, or if the RGB values don't match, then the color will be printed with the #RGB, #RRGGBB, #RRRGGGBBB, or #RRRRGGGGBBBB hexadecimal format. 2 Options -name Allows you to specify the prefix string which is printed in the resulting XPM output. If not specified, will default to the filename (without extension) of the ppmfile argument. If -name is not specified and no ppmfile is specified (i.e. piped input), the prefix string will default to the string "noname". All flags can be abbreviated to their shortest unique pre- fix. 2 Example To convert the file "dot" (found in /usr/include/X11/bitmaps), from xbm to xpm one could specify xbmtopbm dot | ppmtoxpm -name dot 2 Bugs An option to match the closest (rather than exact) color name mnemonic from the rgb text would be a desirable enhancement. Truncation of the least significant bits of a RGB value may result in nonexact matches when performing color name mnemonic lookups. 2 See_Also xpmtoppm, ppm 2 Author Copyright (C) 1990 by Mark W. Snitily. 1 ppmtoyuv ppmtoyuv - convert a portable pixmap into an Abekas YUV file 2 Synopsis ppmtoyuv [ppmfile] 2 Description Reads a portable pixmap as input. Produces an Abekas YUV file as output. 2 See_Also yuvtoppm, ppm 2 Author Marc Boucher , based on Example Conver- sion Program, A60/A64 Digital Video Interface Manual, page 69. Copyright (C) 1991 by DHD PostImage Inc. Copyright (C) 1987 by Abekas Video Systems Inc. 1 ppmtoyuvsplit ppmtoyuvsplit - convert a portable pixmap into 3 subsampled raw YUV files 2 Synopsis ppmtoyuvsplit basename [ppmfile] 2 Description Reads a portable pixmap as input. Produces 3 raw files basename.Y, basename.U and basename.V as output. These files are the subsampled raw YUV representation of the input pixmap, as required by the Stanford MPEG codec. The subsam- pling is done by arithmetic mean of 4 pixels colors into one. The YUV values are scaled according to CCIR.601, as assumed by MPEG. 2 See_Also mpeg, ppm 2 Author Copyright (C) 1993 by Andre Beck. (Andreeck@IRS.Inf.TU- Dresden.de) Based on ppmtoyuv.c 1 qrttoppm qrttoppm - convert output from the QRT ray tracer into a portable pixmap 2 Synopsis qrttoppm [qrtfile] 2 Description Reads a QRT file as input. Produces a portable pixmap as output. 2 See_Also ppm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 rawtoppm rawtoppm - convert raw RGB bytes into a portable pixmap 2 Synopsis rawtoppm [-headerskip N] [-rowskip N] [-rgb|-rbg|-grb |- gbr|-brg|-bgr ] [-interpixel|-interrow] width height [image- data] 2 Description Reads raw RGB bytes as input. Produces a portable pixmap 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. The maxval is assumed to be 255. If the resulting image is upside down, run it through pnmflip -tb . 2 Options -headerskip If the file has a header, you can use this flag to skip over it. -rowskip If there is padding at the ends of the rows, you can skip it with this flag. -rgb -rbg -grb -gbr -brg -bgr These flags let you specify alternate color orders. The default is -rgb. -interpixel -interrow These flags let you specify how the colors are inter- leaved. The default is -interpixel, meaning inter- leaved by pixel. A byte of red, a byte of green, and a byte of blue, or whatever color order you specified. -interrow means interleaved by row - a row of red, a row of green, a row of blue, assuming standard rgb color order. An -interplane flag - all the red pix- els, 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 dd), turning each part into a PGM file with rawtopgm, and then combining them with rgb3toppm. 2 See_Also ppm, rawtopgm, rgb3toppm, pnmflip 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 rgb3toppm rgb3toppm - combine three portable graymaps into one port- able pixmap 2 Synopsis rgb3toppm redpgmfile greenpgmfile bluepgmfile 2 Description Reads three portable graymaps as input. Combines them and produces one portable pixmap as output. 2 See_Also ppmtorgb3, pgmtoppm, ppmtopgm, ppm, pgm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 sldtoppm sldtoppm - convert an AutoCAD slide file into a portable pixmap 2 Synopsis sldtoppm [-adjust] [-dir] [-height|-ysize s] [-info] [- lib|-Lib name] [-scale s] [-verbose] [-width|-xsize s] [slidefile] 2 Description Reads an AutoCAD(Reg.) slide file and outputs a portable pixmap. If no slidefile is specified, input is read from standard input. The ppmdraw library is used to convert the vector and polygon information in the slide file to a pix- map; see the file ppmdraw.h for details on this package. 2 Options -adjust If the display on which the slide file was created had non-square pixels, when the slide is processed with sldtoppm and the -adjust option is not present, the following warning will appear: Warning - pixels on source screen were non-square. Specifying -adjust will correct image width to com- pensate. Specifying the -adjust option causes sldtoppm 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 pnmscale after the bitmap had been created. -dir The input is assumed to be an AutoCAD slide library file. A directory listing each slide in the library is printed on standard error. -height size Scales the image in the vector domain so it is size pixels in height. If no -width or -xsize option is specified, the width will be adjusted to preserve the pixel aspect ratio. -info Dump the slide file header on standard error, display- ing the original screen size and aspect ratio among other information. -lib name Extracts the slide with the given name from the slide library given as input. The specified name is con- verted to upper case. -Lib name Extracts the slide with the given name from the slide library given as input. The name is used exactly as specified; it is not converted to upper case. -scale s Scales the image by factor s, which may be any floating point value greater than zero. Scaling is done after aspect ratio adjustment, if any. Since scaling is per- formed in the vector domain, before rasterisation, the results look much better than running the output of sldtoppm through pnmscale. -verbose Dumps the slide file header and lists every vector and polygon in the file on standard error. -width size Scales the image in the vector domain so it is size pixels wide. If no -height or -ysize option is speci- fied, the height will be adjusted to preserve the pixel aspect ratio. -xsize size Scales the image in the vector domain so it is size pixels wide. If no -height or -ysize option is speci- fied, the height will be adjusted to preserve the pixel aspect ratio. -ysize size Scales the image in the vector domain so it is size pixels in height. If no -width or -xsize option is specified, the width will be adjusted to preserve the pixel aspect ratio. All flags can be abbreviated to their shortest unique pre- fix. 2 Bugs Only Level 2 slides are converted. Level 1 format has been obsolete since the advent of AutoCAD Release 9 in 1987, and was not portable across machine architectures. 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 -lib option unless sldtoppm has been built with character set conversion functions appropri- ate to the locale. You can always retrieve slides from libraries regardless of the character set by using the -Lib option and specifying the precise name of library member. Use the -dir option to list the slides in a library if you're unsure of the exact name. 2 See_Also AutoCAD Reference Manual: Slide File Format, pnmscale, ppm 2 Author John Walker Autodesk SA Avenue des Champs-Montants 14b CH-2074 MARIN Suisse/Schweiz/Svizzera/Svizra/Switzerland Usenet: kelvin@Autodesk.com Fax: 038/33 88 15 Voice: 038/33 76 33 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 restric- tions. This software is provided ``as is'' without express or implied warranty. AutoCAD and Autodesk are registered trademarks of Autodesk, Inc. 1 spctoppm spctoppm - convert an Atari compressed Spectrum file into a portable pixmap 2 Synopsis spctoppm [spcfile] 2 Description Reads an Atari compressed Spectrum file as input. Produces a portable pixmap as output. 2 See_Also sputoppm, ppm 2 Author Copyright (C) 1991 by Steve Belczyk (seb3@gte.com) and Jef Poskanzer. 1 sputoppm sputoppm - convert an Atari uncompressed Spectrum file into a portable pixmap 2 Synopsis sputoppm [spufile] 2 Description Reads an Atari uncompressed Spectrum file as input. Pro- duces a portable pixmap as output. 2 See_Also spctoppm, ppm 2 Author Copyright (C) 1991 by Steve Belczyk (seb3@gte.com) and Jef Poskanzer. 1 tgatoppm tgatoppm - convert TrueVision Targa file into a portable pixmap 2 Synopsis tgatoppm [-debug] [tgafile] 2 Description Reads a TrueVision Targa file as input. Produces a portable pixmap as output. 2 Options -debug Causes the header information to be dumped to stderr. All flags can be abbreviated to their shortest unique pre- fix. Should really be in PNM, not PPM. 2 See_Also ppmtotga, ppm 2 Author Partially based on tga2rast, version 1.0, by Ian J. Mac- Phedran. Copyright (C) 1989 by Jef Poskanzer. 1 ximtoppm ximtoppm - convert an Xim file into a portable pixmap 2 Synopsis ximtoppm [ximfile] 2 Description Reads an Xim file as input. Produces a portable pixmap as output. The Xim toolkit is included in the contrib tree of the X.V11R4 release. 2 See_Also ppm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 xpmtoppm xpmtoppm - convert an X11 pixmap into a portable pixmap 2 Synopsis xpmtoppm [xpmfile] 2 Description Reads an X11 pixmap (XPM) as input. Produces a portable pixmap as output. 2 See_Also ppmtoxpm, ppm 2 Author Copyright (C) 1991 by Jef Poskanzer. 1 yuvtoppm yuvtoppm - convert Abekas YUV bytes into a portable pixmap 2 Synopsis yuvtoppm width height [imagedata] 2 Description Reads raw Abekas YUV bytes as input. Produces a portable pixmap 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. The maxval is assumed to be 255. 2 See_Also ppmtoyuv, ppm 2 Author Marc Boucher , based on Example Conver- sion Program, A60/A64 Digital Video Interface Manual, page 69. Copyright (C) 1991 by DHD PostImage Inc. Copyright (C) 1987 by Abekas Video Systems Inc. 1 yuvsplittoppm yuvplittoppm - convert a Y- an U- and a V-file into a port- able pixmap. 2 Synopsis yuvsplittoppm basename width height [-ccir601] 2 Description Reads three files, containing the YUV components, as input. These files are basename .Y, basename.U and basename.V . Produces a portable pixmap on stdout. Since the YUV files are raw files, the dimensions width and height must be specified on the command line. 2 Options -ccir601 Assumes that the YUV triplets are scaled into the smaller range of the CCIR 601 (MPEG) standard. Else, the JFIF (JPEG) standard is assumed. 2 See_Also ppmtoyuvsplit, yuvtoppm, ppm 2 Author Marcel Wijkstra , based on ppmtoyuvsplit. 1 ppmforge ppmforge - fractal forgeries of clouds, planets, and starry skies 2 Synopsis ppmforge [-clouds] [-night] [-dimension dimen] [-hour hour] [-inclination|-tilt angle] [-mesh size] [-power factor] [-glaciers level] [-ice level] [-saturation sat] [-seed seed] [-stars fraction] [-xsize|-width width] [-ysize|-height height] 2 Description ppmforge generates three kinds of ``random fractal for- geries,'' the term coined by Richard F. Voss of the IBM Tho- mas J. Watson Research Center for seemingly realistic pic- tures of natural objects generated by simple algorithms em- bodying randomness and fractal self-similarity. The tech- niques used by ppmforge are essentially those given by Voss[1], particularly the technique of spectral synthesis explained in more detail by Dietmar Saupe[2]. The program generates two varieties of pictures: planets and clouds, which are just different renderings of data generat- ed 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. The generation of planets or clouds begins with the prepara- tion of an array of random data in the frequency domain. The size of this array, the ``mesh size,'' can be set with the -mesh option; the larger the mesh the more realistic the pictures but the calculation time and memory requirement in- creases as the square of the mesh size. The fractal dimen- sion, which you can specify with the -dimension 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. 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 ampli- tudes. 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 -power op- tion. 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). 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: Clouds A colour map is created that ranges from pure blue to white by increasing admixture (desaturation) of blue with white. Numbers less than 0.5 are coloured blue, numbers between 0.5 and 1.0 are coloured with corresponding levels of white, with 1.0 being pure white. Planet 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 coloured 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 ap- proximately 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 modu- lated 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 ap- parent colour of each pixel of the planet is cal- culated 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 pri- mary star is the only source of illumination). Additional random data are used to generate stars around the planet. Night A sequence of pseudorandom numbers is used to gen- erate stars with a user specified density. Cloud pictures always contain 256 or fewer colours and may be displayed on most colour mapped devices without further processing. Planet pictures often contain tens of thousands of colours which must be compressed with ppmquant or ppmdither before encoding in a colour mapped format. If the display resolution is high enough, ppmdither generally pro- duces better looking planets. ppmquant tends to create discrete colour bands, particularly in the oceans, which are unrealistic and distracting. The number of colours in star- ry sky pictures generated with the -night option depends on the value specified for -saturation. Small values limit the colour temperature distribution of the stars and reduce the number of colours in the image. If the -saturation is set to 0, none of the stars will be coloured and the resulting image will never contain more than 256 colours. Night sky pictures with many different star colours often look best when colour compressed by pnmdepth rather than ppmquant or ppmdither. Try newmaxval settings of 63, 31, or 15 with pnmdepth to reduce the number of colours in the picture to 256 or fewer. 2 Options -clouds 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. -dimension dimen Sets the fractal dimension to the specified dimen, which may be any floating point value between 0 and 3. Higher fractal dimensions create more ``chaotic'' images, which require higher resolu- tion 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. -glaciers level The floating point level setting controls the ex- tent to which terrain elevation causes ice to ap- pear at lower latitudes. The default value of 0.75 makes the polar caps extend toward the equa- tor 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. -hour hour When generating a planet, hour is used as the ``hour angle at the central meridian.'' If you specify -hour 12, for example, the planet will be fully illuminated, corresponding to high noon at the longitude at the centre of the screen. You can specify any floating point value between 0 and 24 for hour, 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 -hour option is specified, a random hour angle is chosen, biased so that only 25% of the images generated will be crescents. -ice level Sets the extent of the polar ice caps to the given floating point level. The default level of 0.4 produces ice caps similar to those of the Earth. Smaller values reduce the amount of ice, while larger -ice settings create more prominent ice caps. Sufficiently large values, such as 100 or more, in conjunction with small settings for - glaciers (try 0.1) create ``ice balls'' like Euro- pa. -inclination|-tilt angle The inclination angle of the planet with regard to its primary star is set to angle, which can be any floating point value from -90 to 90. The inclina- tion angle can be thought of as specifying, in de- grees, the ``season'' the planet is presently ex- periencing 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, nega- tive 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. -mesh size A mesh of size by size will be used for the fast Fourier transform (FFT). Note that memory re- quirements and computation speed increase as the square of size; 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 capaci- ty, you may have to reduce the mesh size to avoid running out of RAM. Increasing the mesh size pro- duces better looking pictures; the difference be- comes particularly noticeable when generating high resolution images with relatively high fractal di- mensions (between 2.2 and 3). -night A starry sky is generated. The stars are created by the same algorithm used for the stars that sur- round planet pictures, but the output consists ex- clusively of stars. -power factor Sets the ``power factor'' used to scale elevations synthesised from the FFT to factor, 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 -clouds 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 fac- tors 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. -saturation sat Controls the degree of colour saturation of the stars that surround planet pictures and fill star- ry skies created with the -night option. The de- fault value of 125 creates stars which resemble the sky as seen by the human eye from Earth's sur- face. Stars are dim; only the brightest activate the cones in the human retina, causing colour to be perceived. Higher values of sat 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 colour. Values greater than 250 create ``science fiction'' skies that, while pretty, don't occur in this universe. 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 ppmforge. Dim, low mass stars live much longer than bright massive stars, consequent- ly there are many reddish stars for every blue gi- ant. This relationship is preserved by ppmforge. You can reverse the proportion, simulating the sky as seen in a starburst galaxy, by specifying a negative sat value. -seed num Sets the seed for the random number generator to the integer num. The seed used to create each picture is displayed on standard output (unless suppressed with the -quiet option). Pictures gen- erated with the same seed will be identical. If no -seed 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. -stars fraction Specifies the percentage of pixels, in tenths of a percent, which will appear as stars, either sur- rounding a planet or filling the entire frame if -night is specified. The default fraction is 100. -xsize|-width width Sets the width of the generated image to width 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 ppmforge, then use pnmcut to extract a portion of the shape and size you require. -ysize|-height height Sets the height of the generated image to height pixels. The default height is 256 pixels. If the height specified exceeds the width, the width will be increased to equal the height. All flags can be abbreviated to their shortest unique pre- fix. 2 Bugs 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. You may have to reduce the FFT mesh size on machines with 16 bit integers and segmented pointer architectures. 2 See_Also pnmcut, pnmdepth, ppmdither, ppmquant, ppm [1] Voss, Richard F., ``Random Fractal Forgeries,'' in Earnshaw et. al., Fundamental Algorithms for Computer Graphics, Berlin: Springer-Verlag, 1985. [2] Peitgen, H.-O., and Saupe, D. eds., The Science Of Fractal Images, New York: Springer Verlag, 1988. 2 Author John Walker Autodesk SA Avenue des Champs-Montants 14b CH-2074 MARIN Suisse/Schweiz/Svizzera/Svizra/Switzerland Usenet: kelvin@Autodesk.com Fax: 038/33 88 15 Voice: 038/33 76 33 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 restric- tions. This software is provided ``as is'' without express or implied warranty. PLUGWARE! 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 introduc- tion by James Gleick and detailed explanations by Rudy Ruck- er of the mathematics and algorithms used by each program. 1 ppmpat ppmpat - make a pretty pixmap 2 Synopsis ppmpat -gingham2|-g2|-gingham3| -g3|-madras|-tartan| - poles|-squig|-camo| -anticamo width height 2 Description Produces a portable pixmap of the specified width and height, with a pattern in it. 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 rou- tines. Still, some of the patterns can be rather pretty. If you have a color workstation, something like ppmpat -squig 300 300 | ppmquant 128 should generate a nice back- ground. 2 Options The different flags specify various different pattern types: -gingham2 A gingham check pattern. Can be tiled. -gingham3 A slightly more complicated gingham. Can be tiled. -madras A madras plaid. Can be tiled. -tartan A tartan plaid. Can be tiled. -poles Color gradients centered on randomly-placed poles. May need to be run through ppmquant. -squig Squiggley tubular pattern. Can be tiled. May need to be run through ppmquant. -camo Camouflage pattern. May need to be run through ppmquant. -anticamo Anti-camouflage pattern - like -camo, but ultra-bright colors. May need to be run through ppmquant. All flags can be abbreviated to their shortest unique pre- fix. 2 References Some of the patterns are from "Designer's Guide to Color 3" by Jeanne Allen. 2 See_Also pnmtile, ppmquant, ppm 2 Author Copyright (C) 1989 by Jef Poskanzer. 1 ppmqvga ppmqvga - 8 plane quantization 2 Synopsis ppmqvga [ options ] [ input file ] 2 Description ppmqvga quantizes PPM files to 8 planes, with optional Floyd-Steinberg dithering. Input is a PPM file from the file named, or standard input of no file is provided. 2 Options -d dither. Apply Floyd-Steinberg dithering to the data -q quiet. Produces no progress reporting, and no terminal output unless and error occurs. -v verbose. Produces additional output describing the number of colors found, and some information on the resulting map- ping. May be repeated to generate loads of internal table output, but generally only useful once. 2 Examples ppmqvga -d mymage.ppm | ppmtogif >mymage.gif tgatoppm zombie.tga | ppmqvga | ppmtotif > zombie.tif 2 See_Also ppmquant 2 Diagnostics Error messages if problems, various levels of optional pro- gress reporting. 2 Limitations none known. 2 Author Original by Lyle Rains (lrains@netcom.com) as ppmq256 and ppmq256fs combined, documented, and enhanced by Bill David- sen (davidsen@crd.ge.com) Copyright 1991,1992 by Bill Davidsen, all rights reserved. The program and documentation may be freely distributed by anyone in source or binary format. Please clearly note any changes. 1 ppmtomap ppmtomap - extract all colors from a portable pixmap 2 Synopsis ppmtomap [-sort] [-square] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a portable pix- map as output, representing a color map of the input file. All N different colors found are put in an Nx1 portable pix- map. This color map file can be used as a mapfile for ppmquant or ppmtogif. 2 Options -sort Produces a portable pixmap with the colors in some sorted order. -square Produces a (more or less) square output file, instead of putting all colors on the top row. All flags can be abbreviated to their shortest unique pre- fix. 2 WARNING If you want to use the output file as a mapfile for ppmto- gif, you first have to do a ppmquant 256, since ppmtomap is not limited to 256 colors (but to 65536). 2 See_Also ppmtogif, ppmquant, ppm 2 Author Marcel Wijkstra (wijkstra@fwi.uva.nl). Copyright (C) 1989 by Jef Poskanzer. 1 ppmtopjxl ppmtopjxl - convert a portable pixmap into an HP PaintJet XL PCL file 2 Synopsis ppmtopjxl [-nopack] [-gamma ] [-presentation] [-dark] [-diffuse] [-cluster] [-dither] [-xshift ] [-yshift ] [-xshift ] [-yshift ] [-xsize|-width|-xscale ] [-ysize|-height|-yscale ] [ppmfile] 2 Description Reads a portable pixmap as input. Produces a PCL file suit- able for printing on an HP PaintJet XL printer as output. The generated file is not suitable for printing on a normal PrintJet printer. The -nopack 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). The -gamma option sets the gamma correction for the image. The useful range for the PaintJet XL is approximately 0.6 to 1.5. The rendering algorithm used for images can be altered with the -dither, -cluster, and -diffuse options. These options select ordered dithering, clustered ordered dithering, or error diffusion respectively. The -dark option can be used to enhance images with a dark background when they are reduced in size. The -presentation option turns on presen- tation mode, in which two passes are made over the paper to increase ink density. This should be used only for images where quality is critical. The image can be resized by setting the -xsize and -ysize options. The parameter to either of these options is inter- preted as the number of dots to set the width or height to, but an optional dimension of `pt' (points), `dp' (deci- points), `in' (inches), or `cm' (centimetres) may be appended. If only one dimension is specified, the other will be scaled appropriately. The options -width and -height are synonyms of -xsize and -ysize. The -xscale and -yscale options can alternatively be used to scale the image by a simple factor. The image can be shifted on the page by using the -xshift and -yshift options. These move the image the specified dimensions right and down. 2 See_Also ppm 2 Author Angus Duggan 1 libppm libppm - functions to support portable pixmap programs 2 Synopsis #include cc ... libppm.a libpgm.a libpbm.a 2 Description TYPES AND CONSTANTS typedef ... pixel; typedef ... pixval; #define PPM_MAXMAXVAL ... extern pixval ppm_pbmmaxval; Each pixel contains three pixvals, each of which should con- tain only the values between 0 and PPM_MAXMAXVAL. ppm_pbmmaxval 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. #define PPM_FORMAT ... #define RPPM_FORMAT ... #define PPM_TYPE PPM_FORMAT int PPM_FORMAT_TYPE( int format ) For distinguishing different file formats and types. pixval PPM_GETR( pixel p ) pixval PPM_GETG( pixel p ) pixval PPM_GETB( pixel p ) These three macros retrieve the red, green or blue value from the given pixel. void PPM_ASSIGN( pixel p, pixval red, pixval grn, pixval blu ) This macro assigns the given red, green and blue values to the pixel. int PPM_EQUAL( pixel p, pixel q ) This macro checks two pixels for equality. void PPM_DEPTH( pixel newp, pixel p, pixval oldmaxval, pixval newmaxval ) This macro scales the colors of pixel p according the old and new maximum values and assigns the new values to newp. It is intended to make writing ppmtowhatever easier. float PPM_LUMIN( pixel p ) This macro determines the luminance of the pixel p. MEMORY MANAGEMENT pixel** ppm_allocarray( int cols, int rows ) Allocate an array of pixels. pixel* ppm_allocrow( int cols ) Allocate a row of the given number of pixels. void ppm_freearray( pixel** pixels, int rows ) Free the array allocated with ppm_allocarray() containing the given number of rows. void pbm_freerow( pixel* pixelrow ) Free a row of pixels. READING PBM FILES void ppm_readppminit( FILE* fp, int* colsP, int* rowsP, pixval* maxvalP, int* formatP ) Read the header from a PPM file, filling in the rows, cols, maxval and format variables. void ppm_readppmrow( FILE* fp, pixel* pixelrow, int cols, pixval maxval, int format ) Read a row of pixels into the pixelrow array. Format, cols, and maxval were filled in by ppm_readppminit(). pixel** ppm_readppm( FILE* fp, int* colsP, int* rowsP, pixval* maxvalP ) Read an entire pixmap file into memory, returning the allo- cated array and filling in the rows, cols and maxval vari- ables. This function combines ppm_readppminit(), ppm_allocarray() and ppm_readppmrow(). WRITING FILES void ppm_writeppminit( FILE* fp, int cols, int rows, pixval maxval, int forceplain ) Write the header for a portable pixmap file. The forceplain flag forces a plain-format file to be written, as opposed to a raw-format one. void ppm_writeppmrow( FILE* fp, pixel* pixelrow, int cols, pixval maxval, int forceplain ) Write a row from a portable pixmap. void ppm_writeppm( FILE* fp, pixel** pixels, int cols, int rows, pixval maxval, int forceplain ) Write the header and all data for a portable pixmap. This function combines ppm_writeppminit() and ppm_writeppmrow(). COLOR NAMES pixel ppm_parsecolor( char* colorname, pixval maxval ) Parses an ASCII color name into a pixel. The color can be specified in three ways. One, as a name, assuming that a pointer to an X11-style color names file was compiled in. Two, as an X11-style hexadecimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. Three, as a triplet of decimal floating point numbers separated by commas: r.r,g.g,b.b. char* ppm_colorname( pixel* colorP, pixval maxval, int hexok ) Returns a pointer to a string describing the given color. If the X11 color names file is available and the color appears in it, that name is returned. Otherwise, if the hexok flag is true then a hexadecimal colorspec is returned; if hexok is false and the X11 color names file is available, then the closest matching color is returned; otherwise, it's an error. 2 See_Also pbm, pgm 2 Author Copyright (C) 1989, 1991 by Tony Hansen and Jef Poskanzer. 1 ppm ppm - portable pixmap file format 2 Description The portable pixmap format is a lowest common denominator color image file format. The definition is as follows: - A "magic number" for identifying the file type. A ppm file's magic number is the two characters "P3". - Whitespace (blanks, TABs, CRs, LFs). - A width, formatted as ASCII characters in decimal. - Whitespace. - A height, again in ASCII decimal. - Whitespace. - The maximum color-component value, again in ASCII decimal. - Whitespace. - Width * height pixels, each three ASCII decimal values between 0 and the specified maximum value, starting at the top-left corner of the pixmap, proceeding in normal English reading order. The three values for each pixel represent red, green, and blue, respectively; a value of 0 means that color is off, and the maximum value means that color is maxxed out. - Characters from a "#" to the next end-of-line are ignored (comments). - No line should be longer than 70 characters. Here is an example of a small pixmap in this format: 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 Programs that read this format should be as lenient as pos- sible, accepting anything that looks remotely like a pixmap. There is also a variant on the format, available by setting the RAWBITS option at compile time. This variant is different in the following ways: - The "magic number" is "P6" instead of "P3". - The pixel values are stored as plain bytes, instead of ASCII decimal. - Whitespace is not allowed in the pixels area, and only a single character of whitespace (typically a newline) is allowed after the maxval. - The files are smaller and many times faster to read and write. Note that this raw format can only be used for maxvals less than or equal to 255. If you use the ppm library and try to write a file with a larger maxval, it will automatically fall back on the slower but more general plain format. 2 See_Also giftopnm, gouldtoppm, ilbmtoppm, imgtoppm, mtvtoppm, pcxtoppm, pgmtoppm, pi1toppm, picttoppm, pjtoppm, qrttoppm, rawtoppm, rgb3toppm, sldtoppm, spctoppm, sputoppm, tgatoppm, ximtoppm, xpmtoppm, yuvtoppm, ppmtoacad, ppmtogif, ppmtoicr, ppmtoilbm, ppmtopcx, ppmtopgm, ppmtopi1, ppmtopict, ppmtopj, ppmtopuzz, ppmtorgb3, ppmtosixel, ppmtotga, ppmtouil, ppmtoxpm, ppmtoyuv, ppmdither, ppmforge, ppmhist, ppmmake, ppmpat, ppmquant, ppmquantall, ppmrelief, pnm, pgm, pbm 2 Author Copyright (C) 1989, 1991 by Jef Poskanzer. 1 pgmkernel pgmkernel - generate a convolution kernel 2 Synopis pgmkernel [-weight w] width [height] 2 Description Generates a portable graymap array of size width x height (or width x width if height is not specified) to be used as a convolution file by pnmconvol. The data in the convolution array K are computed according to the formula: K(i,j) = 1 / ( 1 + w * sqrt((i-width/2)\^{}2 + (j-height/2)\^{}2)) where w is a coefficient specified via the -weight flag, and width and height are the X and Y filter sizes. The output PGM file is always written out in ASCII format. 2 Options The optional -weight flag should be a real number greater than -1. The default value is 6.0. 2 Bugs The computation time is proportional to width * height. This increases rapidly with the increase of the kernel size. A better approach could be using a FFT in these cases. 2 See_Also pnmconvol(1), pnmsmooth(1) 2 Author Alberto Accomazzi (alberto@cfa.harvard.edu). 1 fitstopnm fitstopnm - convert a FITS file into a portable anymap 2 Synopis fitstopnm [-image N] [-noraw] [-scanmax] [-printmax] [-min f] [-max f] [FITSfile] 2 Description Reads a FITS file as input. Produces a portable pixmap if the FITS file consists of 3 image planes (NAXIS = 3 and NAXIS3 = 3), a portable graymap if the FITS file consists of 2 image planes (NAXIS = 2), or whenever the -image flag is specified. The results may need to be flipped top for bottom; if so, just pipe the output through pnmflip -tb. 2 Options The -image 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. Flags -min and -max can be used 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. Flag -scanmax can be used to force the program to scan the data even when DATAMIN and DATAMAX are found in the header. If -printmax is specified, the program will just print the min and max values and quit. Flag -noraw can be used to force the program to produce an ASCII portable anymap. The program will tell what kind of anymap is writing. All flags can be abbreviated to their shortest unique prefix. 2 References FITS stands for Flexible Image Transport System. A full description can be found in Astronomy & Astrophysics Supplement Series 44 (1981), page 363. 2 See_Also pnmtofits(1), pgm(5), pnmflip(1) 2 Author Copyright (C) 1989 by Jef Poskanzer, with modifications by Daniel Briggs (dbriggs@nrao.edu) and Alberto Accomazzi (alberto@cfa.harvard.edu). 1 pnmalias pnmalias - antialias a portable anyumap. 2 Synopis pnmalias [-bgcolor color] [-fgcolor color] [-bonly] [-fonly] [-balias] [-falias] [-weight w] [pnmfile] 2 Description Reads a portable anymap as input, and applies anti-aliasing to background and foreground pixels. If the input file is a portable bitmap, the output anti-aliased image is promoted to a graymap, and a message is printed informing the user of the change in format. 2 Options -bgcolor colorb, -fgcolor colorf set the background color to colorb, and the foreground to color to colorf. Pixels with these values will be anti-aliased. by default, the background color is taken to be black, and foreground color is assumed to be white. The colors can be specified in five ways: o A name, assuming that a pointer to an X11-style color names file was compiled in. o An X11-style hexadecimal specifier: rgb:r/g/b, where r g and b are each 1- to 4-digit hexadecimal numbers. o An X11-style decimal specifier: rgbi:r/g/b, where r g and b are floating point numbers between 0 and 1. o For backwards compatibility, an old-X11-style hexadecimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. o For backwards compatibility, a triplet of numbers separated by commas: r,g,b, where r g and b are floating point numbers between 0 and 1. (This style was added before MIT came up with the similar rgbi style.) Note that even when dealing with graymaps, background and foreground colors need to be specified in the fashion described above. In this case, background and foreground pixel values are taken to be the value of the red component for the given color. -bonly, -fonly Apply anti-aliasing only to background (-bonly), or foreground (-fonly) pixels. -balias, -falias Apply anti-aliasing to all pixels surrounding background (-balias), or foreground (-falias) pixels. By default, anti-aliasing takes place only among neighboring background and foreground pixels. -weight w Use w as the central weight for the aliasing filter. W must be a real number in the range 0 < w < 1. The lower the value of w is, the "blurrier" the output image is. The default is w = 1/3. 2 See_Also pbmtext(1), pnmsmooth(1), pnm(5) 2 Author Copyright (C) 1992 by Alberto Accomazzi, Smithsonian Astrophysical Observatory. 1 pnmtofits pnmtofits - convert a portable anymap into FITS format 2 Synopis pnmtofits [-max f] [-min f] [pnmfile] 2 Description Reads a portable anymap as input. 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 portable bitmap or a portable graymap, the output file consists of a single plane image (NAXIS = 2). If instead the input file is a portable pixmap, the output file will consist of a three-plane image (NAXIS = 3, NAXIS3 = 3). A full description of the FITS format can be found in Astronomy & Astrophysics Supplement Series 44 (1981), page 363. 2 Options Flags -min and -max can be used to set DATAMAX, DATAMIN, BSCALE and BZERO in the FITS header, but do not cause the data to be rescaled. 2 See_Also fitstopnm(1), pgm(5) 2 Author Copyright (C) 1989 by Wilson H. Bent (whb@hoh-2.att.com), with modifications by Alberto Accomazzi (alberto@cfa.harvard.edu). 1 ppmchange ppmchange - change all pixels of one color to another in a portable pixmap 2 Synopis ppmchange oldcolor newcolor [...] [ppmfile] 2 Description Reads a portable pixmap as input. Changes all pixels of oldcolor to newcolor, leaving all others unchanged. Up to 256 colors may be replaced by specifying couples of colors on the command line. The colors can be specified in five ways: o A name, assuming that a pointer to an X11-style color names file was compiled in. o An X11-style hexadecimal specifier: rgb:r/g/b, where r g and b are each 1- to 4-digit hexadecimal numbers. o An X11-style decimal specifier: rgbi:r/g/b, where r g and b are floating point numbers between 0 and 1. o For backwards compatibility, an old-X11-style hexadecimal number: #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb. o For backwards compatibility, a triplet of numbers separated by commas: r,g,b, where r g and b are floating point numbers between 0 and 1. (This style was added before MIT came up with the similar rgbi style.) 2 See_Also pgmtoppm(1), ppm(5) 2 Author Wilson H. Bent. Jr. (whb@usc.edu) with modifications by Alberto Accomazzi (alberto@cfa.harvard.edu) 1 xvminitoppm xvminitoppm - convert a XV "thumbnail" picture to PPM 2 Synopis xvminitoppm [xvminipic] 2 Description Reads a XV "thumbnail" picture (a miniature picture generated by the "VisualSchnauzer" browser) as input. Produces a portable pixmap as output. 2 See_Also ppm(5), xv(1) 2 Author Copyright (C) 1993 by Ingo Wilken