The only offering in our roundup that is available for Linux, the GNU Image
Manipulation Program, is also unique in that it may be obtained for free, with
complete source code, if desired. Originally written for Unix and the X Window
System, the GIMP (or Gimp) is also being ported to OS/2 and 32-bit Windows.
I tested version 1.0.2, the latest nondevelopment release as of this
writing, under Linux 2.0. PNG support is handled via a plug-in with
its own release schedule, though. A considerably improved version
(1.1.7) was released in late February 1999, after my tests; I'll note
its changes as we go.
Like Photoshop, the GIMP uses a modal approach to the basic image
types, requiring an explicit conversion between RGB, grayscale, and
indexed-color images. Both alpha channels and gamma correction are
supported, albeit at a relatively basic level; I'll discuss the
details shortly. Currently, the standard GIMP release does not support
sample depths greater than 8 bits, but a separate development fork
known as GIMP16 (or informally as ``Hollywood'') has extended the
GIMP's core to operate on deep pixels and is expected to merge with
the main development fork in the 2.0 time frame. There was no support
for text annotations in the stock 1.0.2 release, but version 1.1.7 of
the PNG plug-in appears to have added support for user-specified
Title, Author, Description, Copyright, Creation Time, Disclaimer,
Warning, Source, and Comment keywords; the Software keyword is added
automatically. The newer plug-in release also supports timestamps via
PNG's tIME chunk (described in Chapter 11, "PNG Options and Extensions").
The GIMP employs Photoshop's layer-based editing model and in general will
be familiar to anyone comfortable with Photoshop. The user interface does
differ in one significant respect, however: instead of a large parent window
with a main menu bar and various child windows inside, the GIMP uses separate,
standalone windows for everything, and the functions corresponding to
Photoshop's main menu are instead accessible via the righthand mouse button.
At its most minimal, the GIMP consists only of the small tool-palette window,
which contains a truncated File menu from which one can create a new image
or open an existing file.
Conveniently enough, that leads us directly into our portrait example:
Choose File → Open and select an appropriate
Click the right mouse button over the image and select Layers → Add
Alpha Channel, after which the titlebar will indicate (RGB-alpha)
instead of just (RGB).
Click on the Lasso tool (upper right corner of the tool palette).
Hold the right mouse button and choose Dialogs → Tool Options....
Click on the Feather checkbox and set the Feather Radius slider
to some value, perhaps 25.
Draw a loop around the face of the subject.
Invert the lasso selection: hold the right button and choose Select → Invert.
Erase everything outside the loop: hold the right button and choose Edit →
Aside from the use of the right mouse button instead of a menu bar, the
procedure is almost identical to that in each of the other applications
I've investigated. Note that the GIMP's feathering extends to both
sides of the lassoed path, much as ImageReady's does. Unlike ImageReady,
however (but similar to Fireworks), GIMP's ``radius'' appears to indicate
the total width of the alpha band, not just half of it. The Lasso options
box, the tool palette, and the main image window are shown overlapped in
Figure 4-9. (Ordinarily, the first two float elsewhere on the desktop.)
To save the image as a 32-bit RGBA PNG, bring up the Save as dialog:
Hold the right mouse button and choose File → Save as.
Pick an appropriate directory and filename for the image, and either choose
PNG explicitly from the drop-down file type list or do so implicitly
by typing the .png filename extension.
Click the OK button, which brings up the PNG Options dialog box.
Set the Compression level slider to an appropriate value and
optionally check the Interlace checkbox.
Click the OK button.
Figure 4-9: The GIMP's Lasso options window, tool palette, and
main image window.
(Click on image for full-scale version.)
The compression-level slider actually allows noninteger values, but it
appears to truncate the fractional part. Thus, for maximum compression,
the slider must be set at 9.0 exactly. For typical usage, 6.0 is fine,
and for quick saves with decent compression, use 3.0.
Conversion of an RGB image (with or without an alpha channel) to
grayscale or to indexed-color is accomplished via the right mouse
button's Image submenu, either the Grayscale or Indexed items. Going from
32-bit RGBA to 16-bit gray+alpha is quite fast, and the GIMP saves the
result properly as a gray+alpha PNG file. Similarly, converting plain
RGB or grayscale to indexed-color mode works well and saves correctly.
But conversion of RGBA or gray+alpha to Indexed is problematic with
the stock 1.0.2 PNG plug-in. GIMP's internal palette model appears to
be GIF-like in that there's no evidence that it supports partial
transparency in indexed images; the main image display switches to a
hard-edged mask with only fully transparent and fully opaque regions
visible. More serious is the fact that even this much transparency
results in a truncated file, a core dump (though not a termination of
the other GIMP windows), and a pop-up error box indicating that the
save failed. Perusal of the older PNG plug-in's source code strongly
suggests that transparency support for indexed images was never
implemented. Fortunately, Yamahata Kenichiro addressed this in
version 1.1.7 of the plug-in, but I did not have a chance to
investigate how it works.
Aside from that and a lack of support for text comments, the only
other PNG-related problem seems to be in the gamma chunk. Version
1.0.2 of the GIMP has no support for monitor settings or calibration,
and in the absence of those, it should assume a PC-like (or sRGB)
environment on PCs and most workstations. That is, the gamma value it
writes to file should be the inverse of 2.2. But the stock PNG
plug-in actually writes 1.0, a value that causes images to appear
extremely washed out when viewed with a gamma-aware application
(unless the originating machine was a NeXT workstation). Fortunately,
the developers addressed this problem within 24 hours of its having
been reported, and version 1.1.7 of the PNG plug-in includes the fix
(as will the next full release of the GIMP, presumably). Images saved
under older versions can be corrected in a batch operation with a tool
such as pngcrush. The following example performs a batch correction and puts
all of the
fixed images into a subdirectory called fixed/:
pngcrush -d fixed -replace_gamma 0.454545 foo.png foo2.png ...
The GIMP's compression of PNG files is excellent, with the program choosing
the proper filtering strategies for both palette-based and continuous-tone
images. pngcrush, covered in Chapter 5, "Applications: Image Converters", was unable to eke out any
improvement in file size beyond that due to eliminating the overhead of
multiple image-data chunks, which amounts to a mere 12 bytes per 8,204-byte
chunk, or less than 0.15% of the overall file size.
The main GIMP home page is at http://www.gimp.org/, with
extensions available from the plug-in registry,
http://registry.gimp.org/ (including the PNG plug-in at
GIMP16 project has a separate home page at