PBMImageFilter
Version 1.0
By Daryll Strauss

This application is a filter service built upon the Portable BitMap toolkit by Jeff Poskanzer. Basically is uses the PBM+ tools to convert a large number of image formats into PBM formats and then uses pnmtotiff to convert the PBM format into a TIFF. The NXImage class will automatically invoke these filters to convert files and this gives you the ability to transparently open a large number of image files.

The PBMImageFilter determines the format of image file by the extension on the file name. The supported formats are:

    Sun icon file                                		.icon
    X10 and X11 bitmap file                      	.xbm
    MacPaint                                     		.macp
    CMU window manager format			.cmuwm
    MGR format                                   		.mgr
    Group 3 FAX                                  		.g3
    GEM .img format                              		.gem
    Bennet Yee's "face" format                   	.ybm
    Atari Degas .pi3 format                      	.pi3
    Andrew Toolkit raster object                 	.atk
    Xerox doodle brushes                        	.brush
    Usenix FaceSaver(tm) file                    	.fs
    FITS                                         			.fits
    Lisp Machine bit-array-file                  	.lispm
    HIPS                                        			.hips
    GIF                                    				.gif      
    IFF ILBM                                     		.iff
    PICT                                         			.pict
    Atari Degas .pi1 format                      	.pi1
    XPM (X Window System ASCII pixmaps)	.xpm
    PC Paintbrush .pcx format                    	.pcx
    TrueVision Targa file                        		.tga
    HP PaintJet format                           		.pj
    Abekas YUV format                            	.yuv
    MTV/PRT ray-tracer output                   	.mtv
    QRT ray-tracer output                       		.qrt
    Img-whatnot file                            		.img
    Xim file                                    			.xim
    Atari uncompressed Spectrum                 	.spct
    Atari compressed Spectrum                   	.sput
    AutoCAD slide format                         	.sld
    Sun raster file                              		.rast
    X10/X11 window dump file			.xwd
    Portable Bitmap Files					.pbm
    Portable Greymap Files				.pgm
    Portable Pixmap Files				.ppm
    JPEG File Interchange Format			.jpg

The PBM package has many other conversion utilities. If you want to convert from TIFF into a different format you can run tifftopnm and then one of the converters into the format you want. 

Quick Installation:

Install the package pbmtools.pkg into /usr/local/bin. Install the package PBMImageFilter into /LocalLibrary/Services. Type make_services at a shell. At this point the program should run. Try to use Preview to open an image file that is in a format listed above.

Configuration:

There is a configuration file that PBMImageFilter uses. It is called config and is stored in the directory with the Filter. The first line of the file is used to set the general configuration information. First it has the number of image types the config file contains, then it has the directory containing the PBM tools, finally it has the name of the TIFF converter. Each of these is separated by whitespace. The following lines of the file list the extension for a particular type of image and the name of the converter for that type of image. The application starts by knowing about 37 different image types, where the PBM tools live in /usr/local/bin, and uses pnmtotiff as the converter to get to tiff format. There is one "hack" to be aware of. My filter expects to be two stages, one to get into PBM format and one to convert PBM format to TIFF. If you start with a PBM format you don't need the first stage. So, I just use the application "cat" as the first stage. Since cat isn't in the PBM bin directory it is hard coded to mean /bin/cat. This shouldn't cause any harm, but don't try to make a PBM converter that's called 'cat'.

The Filter will look for the PBM tool called pnmtotiff in the workspaces path first, then the default directory that you specified. The individual user may add a dwrite 
	PBMImageFilter PathToPBM <path> 
to override this search path. Once it finds this program it assumes that all PBM converters are located in this directory.

Building and Installing:

The Makefile understands two targets all and install. Make all will build the PBMImageFilter and Make install will install it in ~/Library/Services.  If you would like to install the service more globally, the change the line:
	DSTDIR = $(HOME)/Library/Services/PBMImageFilter.service
to
	DSTDIR = /NextLibrary/Services/PBMImageFilter.service
and the filters will be available to anyone on the machine.

Adding PBM Tools:

Adding tools is very easy. 

	1) Place an application in your PBM directory that converts the new image type into one of the PBM types.
	2) Add one to the integer at the top of the config file.
	3) Add your image extension and converter to the end of the config file.
	4) Add a line to the services file that says:
		Send Type: NXFilenamePboardType:<your extension>
	Notice that you can not have more than 16 Send Types in a single service entry.
	You will need to create a new service entry (to add more)
	5) If PBMImageFilter is already running you will need to kill it.
	
Distribution:

There are three distributions to this package. 

1) PBMImageFilter.binaries.tar.Z. This includes one installer package to install the PBMImageFilter and one to install the PBM binaries. This is about 4 megs.

2) PBMImageFilter.sources.tar.Z. This includes just the source to the PBMImageFilter and not the PBM package.  This is about 22k.

3) PBM.sources.tar.Z. This includes the sources to the PBM package. This is about 4 megs.

Usage and Licensing:

    Source code I have wrriten is
    	Copyright  (C) 1993 by Daryll Strauss
    other software, such as the PBM package is copyright by its author, but has
    licensing similar to the following which is used in my source code.
	
    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.

Donations/TradeWare?

    If you think this program is useful and you or your company has a piece of shareware or comercial software available, I'd appreciate it if you'd send me a copy. You are welcome to use this software as licensed above regaurdless of whether or not you donate any software.
	
Contacting Me?

If you have any questions or comments about this software, I'll do my best to answer them. Send me mail at  daryll@harlot.rb.ca.us.