"I swear by my life and my love of it that I will never live for the sake of another man, nor ask another man to live for mine" John Galt in "Atlas Shrugged", by Ayn Rand AUTHOR The author is cristy@mystic.es.dupont.com. This software is NOT shareware. However, I am interested in who might be using it. Please consider sending me a picture postcard of the area where you live. Send postcards to John Cristy P.O. Box 40 Landenberg, PA 19350 USA I'm also interested in receiving coins from around the world for my collection. Or visit my mom's craft page at http://www.sympatico.org/bunny/. AVAILABILITY ImageMagick is available as ftp://ftp.wizards.dupont.com/pub/ImageMagick/ImageMagick-4.0.6.tar.gz ImageMagick client executables are available for some platforms. See ftp://ftp.wizards.dupont.com/pub/ImageMagick/binaries ftp://ftp.wizards.dupont.com/pub/ImageMagick/mac ftp://ftp.wizards.dupont.com/pub/ImageMagick/nt ftp://ftp.wizards.dupont.com/pub/ImageMagick/vms ftp://ftp.wizards.dupont.com/pub/ImageMagick/linux I want ImageMagick to be of high quality, so if you encounter a problem I will investigate. However, be sure you are using the most recent version from ftp://ftp.wizards.dupont.com/pub/ImageMagick before submitting any bug reports or suggestions. WWW The official ImageMagick WWW page is http://www.wizards.dupont.com/cristy/ImageMagick.html Another useful ImageMagick WWW page is http://www.vrl.com/Imaging/ To use display as your external image viewer, edit the global mail-cap file or your personal mail-cap file .mailrc (located at your home directory) and put this entry: image/*; display %s MAILING LIST There is a mailing list for discussions and bug reports about ImageMagick. To subscribe send the message subscribe magick to majordomo@wizards.dupont.com. You will receive a welcome message which tells you how to post messages to the list, magick@wizards.dupont.com. MEMORY REQUIREMENTS You should allocate sufficient swap space on your system before running ImageMagick; otherwise, you may experience random server or application crashes. Anything less than 80 megabytes of swap space is likely to cause random crashes. On many systems, you will find that 80 megabytes is insufficient and you will have to allocate more swap space. You should also have at least 32 megabytes of real memory although 64 megabytes or more is recommended. UNIX COMPILATION Type: gunzip ImageMagick-4.0.6.tar.gz tar xvf ImageMagick-4.0.6.tar cd ImageMagick If you do not have gunzip(1), it is available as prep.ai.mit.edu:pub/gnu/gzip-1.2.4.shar. You might want to check the values of certain program definitions before compiling. Change the definitions of ApplicationDefaults, BrowseCommand, EditorCommand, PostscriptColorDevice, PrintCommand, RGBColorDatabase, and TemporaryDirectory in magick/magick.h to suit your local requirements. There are currently two mechanisms available to create makefiles to build ImageMagick: 1) GNU configure; 2: X11 imake. Each is described in the following paragraphs. * * * GNU configure: This option is easiest to use and is recommended when ImageMagick is to be installed outside of the X11 distribution or working imake configuration files are not available. Use of 'configure' enables automated configuration, building, and installation of PerlMagick. If you are willing to accept configure's default options, type: ./configure and watch the configure script output to verify that it finds everything that you think it should. If it does not, then adjust your environment so that it does. If you are not happy with configure's choice of compiler, compilation flags, or libraries, you can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure The configure variables you should be aware of are: CC Name of C compiler (e.g. 'cc -Xa') to use CFLAGS Compiler flags (e.g. '-g -O2') to compile with CPPFLAGS Include paths (-I/somedir) to look for header files LDFLAGS Library paths (-L/somedir) to look for libraries LIBS Extra libraries (-lsomelib) required to link Any variable (e.g. CPPFLAGS or LDFLAGS) which requires a directory path must specify an absolute path rather than a relative path. By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. Configure can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. The configure script provides a number of ImageMagick specific options. When disabling an option --disable-something is equivalent to specifying --enable-something=no and --without-something is equivalent to --with-something=no. The configure options are as follows (execute 'configure --help' to see all options). --enable-shared build shared libraries (default is no) --enable-static build static libraries (default is yes) --enable-lzw enable LZW support (default is no) --enable-16bit-pixel enable 16 bit pixels (default is no) --enable-socks enable use of SOCKS 5 library and 'rftp' --with-perl enable build/install of PerlMagick (default is no) --with-dps enable Display Postscript (default is yes) --with-fpx enable FlashPIX (default is yes) --with-hdf enable HDF (default is yes) --with-jbig enable JBIG (default is yes) --with-jpeg enable JPEG (default is yes) --with-mpeg enable MPEG (default is yes) --with-png enable PNG (default is yes) --with-tiff enable TIFF (default is yes) --with-ttf enable TrueType (default is yes) --with-x use the X Window System ImageMagick options represent either features to be enabled or packages to be included in the build. When a feature is enabled (via --enable-something), it enables code already present in ImageMagick. When a package is enabled (via --with-something), the configure script will search for it, and if is is properly installed and ready to use (headers and built libraries are found by compiler) it will be included in the build. The configure script is delivered with all features disabled and all packages enabled (except for PERL). In general, the only reason to disable a package is if a package exists but it is unsuitable for the build (perhaps an old version or not compiled with the right compilation flags). Several configure options require special note: o --disable-shared: the shared libraries is not built. Shared libraries are valuable because they are *shared* across more than one invocation of an ImageMagick or PerlMagick client. In addition, the clients take much less disk space and shared libraries are required to use PerlMagick. ImageMagick built with plug-ins (see MAGICK PLUG-INS below) can pose additional challenges. You can build all the plug-ins statically and link them into the ImageMagick shared library (i.e. libMagick.so) or alternatively you can build the plug-ins as shared libraries (some systems already have plug-ins installed as shared libraries). Shared libraries compilation flags differ from vendor to vendor (gcc's is -fPIC). However, you must compile all shared library source with the same flag (for gcc use -FPIC rather than -fpic). o --disable-static: static archive libraries (with extension .a) are not built. If you are building shared libraries, there is little value to building static libraries. Reasons to build static libraries include: 1) they can be easier to debug; 2) the clients do not have external dependencies (i.e. libMagick.so); 3) you are unable to build shared libraries. o --with-perl: conveniently compile and install PerlMagick in one step. Without this option you first install ImageMagick, change to the PerlMagick subdirectory, build, and finally install PerlMagick. Note, PerlMagick is configured even if --with-perl is not supplied. If --enable-shared is not specified then a new PERL interpreter (PerlMagick) is built which is statically linked against the PerlMagick extension. This new interpreter is installed alongside your existing PERL interpreter. If --enable-shared is specified, then the PerlMagick extension is built as a dynamically loadable object which is loaded into your current PERL interpreter at run-time. Use of dynamically-loaded extensions is preferable over statically linked extensions so --enable-shared should be specified if possible. If the argument --with-perl=/path/to/perl is supplied, then /path/to/perl will be taken as the PERL interpreter to use. o --with-x=no: build and use the X11 stubs library (ImageMagick/xlib) instead of the core X11 libraries. This may be necessary on systems where X11 is not installed (e.g. a web server). Display, animate, and import will not work with this library. The remaining programs have reduced functionality. * * * X11 Imake: Use this option if working imake configuration files are available, the package is to be installed where ever imake installs things (usually the X11 distribution directory), and you don't mind editing a configuration file. Use of this scheme requires a seperate step to install PerlMagick (see the README file in the PerlMagick subdirectory). Edit Magick.tmpl and set the variables to suit your local environment. Now type: xmkmf make Makefiles or just xmkmf -a if you are using X11R6 imake. * * * To confirm your build of the ImageMagick distribution was successful, type: display If the program faults ensure that you have not inadvertingly linked to an older version of the libMagick library. To ensure this is not the case type cd ImageMagick/magick make install cd .. make If the image colors are not correct use this command: display -visual default Be sure to read the manual pages for the display(1), animate(1), montage(1), import(1), mogrify(1), identify(1), combine(1), and convert(1) utilities. Also read the ImageMagick frequently asked questions in the file www/Magick.html. This is required reading. Most of the questions I get via electronic mail are answered in this document. Place display(1) X application defaults in /usr/lib/X11/app-defaults/Display. Use the appropriate name for other clients (e.g. Animate, Montage, etc). To execute display(1) from as a menu item of any window manager (olwm, mwm, twm, etc), use logo:Untitled MAGICK PLUGS-INS To further enhance the capabilities of ImageMagick, you may want to get these programs or libraries: o ImageMagick requires ralcgm from http://www.agocg.ac.uk/Graphics/CGM/ralcgm.html to read the Computer Graphics Metafile image format (may not compile under linux). o ImageMagick requires fig2dev from ftp://ftp.x.org/contrib/applications/drawing_tools/transfig to read the TransFig image format. o ImageMagick requires the FreeType software available as http://www.physiol.med.tu-muenchen.de/~robert/freetype.html to annotate with TrueType fonts. o ImageMagick requires Ghostscript software available from http://www.cs.wisc.edu/~ghost/ to read the Postscript or the Portable Document format. It is used to annotate an image when an X server is not available. See the FreeType library above for another means to annotate an image. Note, Ghostscript must support the ppmraw device (type gs -h to verify). If Ghostscript is unavailable, the Display Postscript extension is used to rasterize a Postscript document (assuming you define HasDPS). The DPS extension is less robust than Ghostscript in that it will only rasterize one page of a multi-page document. o ImageMagick requires the FlashPix SDK available from http://www.kodak.com/US/en/drg/productsTechnologies/ prodTechFlashPix.shtml to read and write the FPX image format. o ImageMagick requires the NCSA HDF library available via anonymous FTP as ftp://ftp.ncsa.uiuc.edu/HDF/HDF4.1r1/tar/HDF4.1r1.tar.gz to read and write the HDF image format. o ImageMagick requires the JBIG-Kit software available via anonymous FTP as ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/JBIG/ jbigkit-1.0.tar.gz to read the JBIG image format. o ImageMagick requires the Independent JPEG Group's software available via anonymous FTP as ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz to read the JPEG image format. ImageMagick creates progressive JPEG images by default. Concerning iterative JPEG compression: see Kinoshita and Yamamuro, Journal of Imaging Science and Technology, "Image Quality with Reiterative JPEG Compression", Volume 39, Number 4, July 1995, 306-312 who claim that (1) the iterative factor of the repetitive JPEG operation had no influence on image quality, and (2) the first compression determined base image quality. o ImageMagick requires the MPEG library available via anonymous FTP as ftp://ftp.mni.mcgill.ca/pub/mpeg/mpeg_lib-1.2.1.tar.gz to read the MPEG image format. Use ftp://ftp.arc.umn.edu/pub/GVL/mpeg_encode1.2.2.tar.gz to write the MPEG image format. o ImageMagick requires the PNG library from http://www.cdrom.com/pub/png/pngcode.html to read the PNG image format. o ImageMagick requires ra_ppm from Greg Ward's Radiance software available via anonymous FTP as ftp://hobbes.lbl.gov/rad/Radiance3R07.tar.Z to read the Radiance image format (may not compile under linux). o ImageMagick requires rawtorle from the Utah Raster Toolkit available via anonymous FTP as ftp://ftp.cs.utah.edu/pub/urt-3.1b.tar.Z to write the RLE image format (may not compile under linux). o ImageMagick requires scanimage from http://www.mostang.com/sane/ to import image from a scanner device. o ImageMagick requires Sam Leffler's TIFF software available via anonymous FTP as ftp://ftp.sgi.com/graphics/tiff/tiff-v3.4beta037-tar.gz to read the TIFF image format. It in turn optionally requires the JPEG and ZLIB libraries. o ImageMagick requires the ZLIB library from http://www.cdrom.com/pub/infozip/zlib/ to read the PNG image format or read and write Zip compressed MIFF images. o ImageMagick requires GET(1) available via the Web as http://www.linpro.no/lwp/ to read images specified with a World Wide Web (WWW) uniform resource locator (URL). GET(1) must be in /usr/local/bin. See WWWcommand in magick/magick.h to change its location. If you do not have a HTTP server, you can use xtp(1), available in the ImageMagick distribution, for URL's whose protocol is FTP. o ImageMagick requires SOCKS version 5 available via the Web at http://www.socks.nec.com/ in order for 'xtp' to work across a SOCKS5-based firewall. In particular, 'xtp' makes use of SOCKS5 'rftp' as an external program and supports use of the SOCKS5 library to perform DNS lookups via the firewall rather than the internal DNS server. o ImageMagick requires a background texture for the TILE format and for the -texture option of montage(1). You can use your own or get samples from http://the-tech.mit.edu/KPT/ NOTE: The following procedure describes how to build ImageMagick extension libraries in subdirectories of the ImageMagick directory. An alternative to these procedures is to install one or more of these under your system's regular include/lib directory (e.g. the directory specified by --prefix to configure or /usr/local). This allows the libraries to be shared by other packages. When using the configure script, the two schemes may be mixed. Also, please note that when the configure option --enable-shared is not disabled, these procedures must be supplemented with whatever compilation flags are required on your system to generate PIC code. In the case of gcc, this usually means that -fPIC must be added to the compiler options (i.e. CFLAGS) when building each plug-in library. To display images in the HDF, JBIG, JPEG, MPEG, PNG, TIFF, or TTF format, get the respective archives and build ImageMagick as follows: HDF: cd ImageMagick gunzip -c HDF4.1r1.tar.gz | tar xvf - mv HDF4.1r1 hdf cd hdf configure make -k hdf-libnofortran cd .. JBIG: cd ImageMagick gunzip -c jbigkit-1.0.tar.gz | tar xvof - mv jbigkit jbig cd jbig make cd .. JPEG: cd ImageMagick gunzip -c jpegsrc.v6b.tar.gz | tar xvof - mv jpeg-6b jpeg cd jpeg configure CC=cc -with-maxmem=7 make cd .. MPEG: cd ImageMagick gunzip -c mpeg_lib-1.2.1.tar.gz | tar xvof - mv mpeg_lib mpeg cd mpeg ./configure make cd .. PNG: cd ImageMagick gunzip -c libpng-1.0.1.tgz | tar xvf - mv libpng-1.0.1 png cd png make cd .. TIFF: cd ImageMagick gunzip -c tiff-v3.4beta037.tar.Z | tar xvof - mv tiff-v3.4beta037 tiff cd tiff ./configure make cd .. TTF: cd ImageMagick gunzip -c freetype-1.0.tar.gz | tar xvof - mv freetype-1.0.tar.gz ttf cd ttf ./configure make cd .. ZLIB: cd ImageMagick gunzip -c zlib-1.1.2.tar.gz | tar xvf - mv zlib-1.1.2 zlib cd zlib make cd .. If your computer system supports shared libraries you must type make install Finally, perform the following if you are using Imake: cd ImageMagick < edit Magick.tmpl and define Has???? as instructed > xmkmf make Makefiles make clean make If prefer to use 'configure' rather than Imake: configure make clean make -k You can now convert or display images in the JPEG, TIFF, PNG, etc. image formats. VMS COMPILATION You might want to check the values of certain program definitions before compiling. Change the definitions of ApplicationDefaults, DocumentationBrowser, EditorCommand, PostscriptColorDevice, PrintCommand, and RGBColorDatabase in magick/magick.h to suit your local requirements. Next, type. Type @make set display/create/node=node_name:: where node_name is the DECNET X server to contact. Finally type: display Alternatively, get a zipped distribution (with JPEG, MPEG, TIFF, and XPM) from ftp://ftp.wizards.dupont.com/pub/ImageMagick/vms/ImageMagick-4.0.6.zip The VMS JPEG, TIFF, and XPM source libraries are available on axp.psl.ku.dk in [anonymous.decwindows.lib]. Thanks to pmoreau@cenaath.cena.dgac.fr for supplying invaluable help as well as the VMS versions of the JPEG, MPEG, PNG, TIFF, and XPM libraries. NT COMPILATION The NT distribution contains MetroWerks Codewarrior Professional projects and a Visual C++ workspace (thanks to BillR@corbis.com) for compilation. For those who do not have access to CodeWarrior or Visual C++, the binaries for the command line utilities are enclosed. If you have an NT X server like Exceed (from Hummingbird) you will also need to include SET DISPLAY=:0.0 in the System Control panel (NT) or Autoexec.bat (Win95). Autoexec.bat requires that you restart your computer. See http://www.rahul.net/kenton/xsites.html for a list of commercial and free X server software. Without an X server you can still display or animate to, or import from, a remote X server. Convert, mogrify, montage, combine, and identify will work with or without an X server directly from the command prompt. Import(1) works if you have at least one X window open. Alternatively, type convert x:root image.gif Make sure gswin32 (Ghostscript) is in your execution path (see Autoexec.bat), otherwise, you will be unable to convert or view Postscript document. Make sure iexplore (Internet Explorer) is in your execution path (see Autoexec.bat), otherwise, you will be unable to browse the ImageMagick documentation. To compile the source with Codewarrior, start with Magick/Magick.mcp and then animate.mcp, convert.mcp, etc.. The Visual C++ workspace is ImageMagick.dsw. And yes, the NT executables will work under Windows 95. MACINTOSH COMPILATION The Macintosh distribution contains MetroWerks Codewarrior Professional projects for compilation. For those who do not have access to CodeWarrior, the binaries for the command line utilities are enclosed. I had to comment the inline intrinsic functions in math.h in order to compile. If you have a better solution, let me know. Display(1), animate(1), and import(1) currently do not work on the Macintosh. I am looking for a volunteer to get display(1) and animate(1) to work on the Macintosh. I also need a volunteer is needed to write a simple Mac program to call the libMagick routines and display an image in a window. ANIMATION To prevent color flashing on visuals that have colormaps, animate(1) creates a single colormap from the image sequence. This can be rather time consuming. You can speed this operation up by reducing the colors in the image before you `animate' them. Use mogrify(1) to color reduce the images: mogrify +map -colors 256 scenes/dna.[0-9]* Alternatively, you can use a Standard Colormap; or a static, direct, or true color visual. You can define a Standard Colormap with xstdcmap(1). For example, to use the "best" Standard Colormap, type: xstdcmap -best animate -map best scenes/dna.[0-9]* or to use a true color visual: animate -visual truecolor scenes/dna.[0-9]* Image filenames can appear in any order on the command line if the scene keyword is specified in the MIFF image. Otherwise the images display in the order they appear on the command line. A scene is specified when converting from another image format to MIFF by using the "scene" option with any filter. Be sure to choose a scene number other than zero. For example, to convert a TIFF image to a MIFF image as scene #2, type: convert -scene 2 image.tiff image.miff 16-BIT IMAGING By default, ImageMagick uses a color depth of 8 bits (e.g. [0..255] for each of red, green, blue, and transparency components). Any 16-bit image is scaled to 8-bits before any image viewing or processing occurs. If you want to work directly with 16-bit images (e.g. [0..65535]), edit Magick.tmpl and define QuantumLeap or use -enable-16bit with configure. Next, type: make clean make In 16-bit mode expect to use about 33% more memory on the average. Also expect some processing to be slower than in 8-bit mode (e.g. Oil Painting, Segment, etc). In general, 16-bit mode is only useful if you have 16-bit images that you want to manipulate and save the transformed image back to a 16-bit image format (e.g. PNG, VIFF). 64-BIT MACHINES Each pixel, within ImageMagick, is represented by the RunlengthPacket structure found in magick/image.h. Only 8 bits are required for each color component and 16 bits for the colormap index for a total of 6 bytes. If QuantumLeap is defined (see 16-BIT IMAGING above), the color component size increases to 16 bits for a total of 10 bytes. Some 64-bit machines pad the structure which can cause a significant waste of memory. For the cray, change the RunlengthPacket structure to this typedef struct _RunlengthPacket { unsigned char red : QuantumDepth, green : QuantumDepth, blue : QuantumDepth, length : QuantumDepth; unsigned short index : 16; } RunlengthPacket; before compiling. I'm not sure if this will work on other 64-bit machines that pad. If you know a better solution, please send me E-mail. Note, that the Dec Alpha apparently does not pad the structure so ImageMagick should be fine on this particular 64-bit machine. COPYRIGHT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files ("ImageMagick"), to deal in ImageMagick without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of ImageMagick, and to permit persons to whom the ImageMagick is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of ImageMagick. The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall E. I. du Pont de Nemours and Company be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with ImageMagick or the use or other dealings in ImageMagick. Except as contained in this notice, the name of the E. I. du Pont de Nemours and Company shall not be used in advertising or otherwise to promote the sale, use or other dealings in ImageMagick without prior written authorization from the E. I. du Pont de Nemours and Company.