This isn't "Node what you know". If I noded everything I know, I'd never be finished! =) This is, as usual, always a work in progress, and feel free to /msg me suggestions too!
The GIMP - GNU Image Manipulation Program - is one of the finest pieces of free software ever written.
The project's home page is at http://www.gimp.org/
Originally written by Spencer Kimball and Peter Mattis at XCF (Experimental Computing Facility) in University of California at Berkeley as a senior project.
The first public release of the program was 0.54. It was significantly different from current version, of course: The UI was entirely written with Motif, and images were just images - there was no layering capability, instead, the plugins allowed to do all sorts of image merging operation (called channel ops).
Kimball and Mattis stopped developing it quickly, and the community, led by some very talented guys like Manish "yosh" Singh (still the current project leader), picked up where they left. All in all, the GIMP community is a very nice place and the developers are very nice people. Most of the time. =)
As the GIMP rolled towards the 1.0 release, there were major architectural changes. First of all the toolkit change: GIMP folks developed the GIMP ToolKit (GTK) that later really split to a project of their own, now called GTK+. GTK+ is very well made and is one of the best GUI toolkits available for X11 right now, and it's very nice compared to Motif, both from aesthetical and programming points of view. Also, the GIMP got a file format of its own (.xcf, named after the facility it was developed in first), to accommodate better picture structures: First of all, the images supported layers, secondly, the files also support other sorts of GIMP-only information. Plug-ins were completely incompatible with previous version. Also introduced was the Script-FU module. GIMP 1.0 was released 1998-06-06.
GIMP 1.2 (2000-12-25) was less dramatic but still significantly different thing - Apart of a few UI changes and completely new tools, most of the changes happened under the hood. The usage was mostly the same (with some changes), the user interface was stabilizing a great deal. The greatest new addition, in my opinion, was the all-new support for XInput extensions, which meant the pressure support for graphics tablets (I had got my Wacom Ultrapad A5 during 1.0 era, and had been quite happy with the 1.1 tablet support). Under-the-hood-wise, personally, I can only remember that Script-FU changed a lot, and scripts had to be edited a bit - same probably goes to plugins. However, this was not a dramatic change, and many of the changes made things just more logical. After a few moments of confusion, I was able to make a 1.0 Script-FU script to work in 1.1/1.2 in a matter of minutes... 1.2 also introduced Perl-FU thingy for those who think SIOD sucks (which it does).
GIMP 2.0 (2004-03-23) Wasn't that huge leap in functionality on surface, but nevertheless contains a great deal of improvements. The first thing to note is the move from GTK+ 1.x to 2.x - a move which was most welcome because a large number of other apps had already been ported a long time ago, so getting "the definitive GTK+ application" to the same level was nice. The user interface has many improvements: Now, there are no longer individual dialogs, but rather there are "docks" where the dialog tabs can be arranged in any way the user pleases. The image windows have got menu strips. The text tool is the most obvious changed thing - basically, now every text you add appears as a layer, and you can edit text and its properties later on easily (basically, this is GIMP 1.2's GDynText with far better integration to the GIMP UI). (Oh, and due to Pango support, entering international text in GIMP is easy!) Paths can be imported and exported in SVG. EXIF data is preserved. There are a zillion of little features that make life a whole lot easier.
And the future? Well, GEGL will hopefully one day break the barriers of the holy trinity of RGB/Gray/Indexed...
So what does it do?
(Note: The following text still pretty much describes the capabilities of GIMP 1.2 series. I'm working on updating this to 2.0 as soon as possible. It isn't that different, really...)
The GIMP's user interface is definitely one of the most professional and well-done UIs I have ever had the priviledge to use. And as a hacker, I was surprised to realize that I haven't ever had to hand-edit a configuration file! =) The program was, clearly, made by the people who do image manipulation for the people who do image manipulation.
GIMP's native file format is the .xcf format. It stores all image information. However, .xcf is uncompressed format; this is not an issue because GIMP supports on-the-fly, barely unnoticeable and transparent gzip or bzip2 compression. Thus, you're very likely to see ".xcf.gz" files. (This convention seems pretty troublesome in Windows, though...)
In addition to this, GIMP supports many different formats: The common formats (JPEG, PNG, GIF, TIFF, BMP, PCX, etc...) are supported, as are many X11 formats (ImageMagick MIFF, xwd, xpm, xbm, pnm, etc...) GIMP also supports reading Photoshop files to some extent.
Even some eccentric formats like output to text (via AAlib) is supported.
GIMP supports RGB, grayscale and indexed color models. This covers most of the work files most people will ever come across, but admittedly not all (*sigh*). Just leave the color separation to other programs if that's what you need...
Personally, I keep several dialogs open while I work in GIMP. The most important ones are the Palette, Brush, Layers/Channels/Paths, and Tool Options. This way I have access to most of the things I ever need to do.
The tool box has all reasonably different tools behind different buttons, which is a good thing.
- Drawing tools: Pencil, Brush, Eraser, Ink (XInput-sensitive parametric brush), Airbrush (Also XInput-sensitive), Text.
- Fill tools: flood fill, directed gradient fill
- Fine manipulation tools: "rubber stamp" clone tool, Blur/sharpen tool, Smudge tool, Burn/Dodge tool
- Drastic manipulation tools: flip tool, cropping tool, transformation tool (for rotating/scaling/shearing/warping the selection), layer/selection move tool
- Selection tools: square, elliptic, lasso, magic wand, Bezier, and automatic "smart" selection
- Examination tools: magnifying glass, color picker, measurement tool
The difference between Pencil and Brush is that pencil draws "hard", bilevel things, while Brush uses also soft edges of the brushes.
There's no "generic shape drawing tools". You can, however, draw some things with the basic tools and the Stroke command. To draw a line, first draw the starting point with Pencil or Brush, and then shift-click the end point. To draw complicated shapes, use selection tool (for example the Bezier select) and choose Edit→Stroke to draw the shape along selection edges. Or, you can use gfig plugin for vector art.
Text tool also supports the use of GDynText - which means, in layman terms, that the text layer can have editable content!
Working with images and layers
GIMP supports layers with independent layer combination modes, and layer masks, much like Photoshop. The usage is generally very straightforward. You can draw on images, you can apply filters or corrections to whole layer or selection, you can move bits and pieces around, and generally have jolly good time. It's an acquired taste.
Correction things and Plugins
GIMP supports various image correction things: Basic correction tools like Color balance, Invert, Posterize, hue/saturation/brightness/contrast correction, Levels and Curves are there, as is Desaturation (grayscalification) and Threshold (line-art-ification). One interesting thing that I found early was the Auto menu; AutoStretch Contrast is not always as good as if you spend a quarter hour with Levels, but it's good anyway in most cases.
There are zillions of little plugins to do all sorts of cool and generally overused effects. There are some that my pinheaded mind likes ext-reemely, such as Bump Map and IWarp.
Scripting and custom plugins
Ah, the scripting! GIMP has its own scripting thing. Internally, GIMP has Extensions and Plugins. Plugins, generally written in C and compiled as separate programs, provide additional functionality for GIMP. All of these things - the plugins, extensions, and internally implemented tools - get registered to the Procedural Database (PDB), an API of sorts which is exposed to the scripting engines, implemented through the extensions.
The plugins were there already in earliest versions of GIMP, but they really took off with the sane plugin API of GIMP 1.0.
The first scripting engine was Script-Fu, a Scheme-based thing. The only complaint I had about it was that the SIOD engine makes things a bit too hard to debug.
Nowadays, there's other scipting engines, such as Perl-Fu - it allows to make Perl scripts to generate images, but it also allows to script pretty much everything else. Practically, it's possible to make new plugins in Perl. I spent one night making a Koala Painter file loader...
What makes GIMP interesting is that GIMP can also be ran without a graphical UI just to run these scripts; the -b and -i command-line switches help a great deal. It's possible, thus, to run GIMP from CGI scripts and like. I think that it was, at some point, possible to turn GIMP into an image processing server of some kind that'd listen for commands from the network ("Net-Fu"), but I don't remember enough details.
However, for most conventional command-line use, ImageMagick is sufficient and much easier to invoke =)
Some people have criticized GIMP's GUI. Some arguments have been made:
- "It Isn't Photoshop, even when it tried to be." Many people who have started with Adobe Photoshop think it's clumsy. I find this argument very weak because, as a Poor Student, I started with GIMP and found Photoshop woefully clumsy! Let's just call this a "matter of tastes", shall we?
- The lack of MDI. Photoshop in Windows throws everything in one window, while GIMP relies on multiple, independently movable windows. This is admittedly a problem in Windows version of GIMP, but this is more of Windows' fault - the clumsy window management there favors single windows. In X11, this isn't a problem... nor in Windows with LiteStep or something like that.
- "Slow"? Yeah, 1.0 and 1.1 was damn slow at times, especially when I worked at the Very Edge of Everything (1600x1600 RGB images with 6 layers!) with a measly P166, but 1.2 has got a lot faster (can't be just the effect of the Moore Upgrade, as it happened before I got a new machine). Besides, RAM is cheap these days, and all self-respecting image manipulators have lots of it, no matter what they run! =)
There are a few technical, real weaknesses. One of the biggest is the lack of support for any color models aside of 8-bit RGB, grayscale and indexed. There is stable support for 16-bit RGB and other funky models available in Cinepaint (a code fork of GIMP, formerly called "Hollywood" fork of code and FilmGIMP). The support in mainstream version will come in distant (and not-so-distant) future after 2.0.
The biggest lacking, and most wanted, color model is the CMYK - One reason for this is that CMYK is pretty tricky beast to deal with, with many complicated and, most of all, heavily patented methods related to it - converting RGB to CMYK and back is not as easy as it sounds. Lack of expertise, Lack of documentation, and a vast, wide open patent minefield ahead.
If only we had CIE L*a*b...
Strengths (aside of the obvious)
The GIMP is generally considered to be very good for web graphics work; Good understanding of paletted images, the image size optimization options (great preview of JPEG save!), and plugins like Image Map for clickable image maps and Guillotine and Perl-O-Tine for slicing images are absolutely great for web stuff.
The scripting is definitely a great thing, and I'd even say this is one of the nicest image generation systems I've ever seen.
And, of course, it's free and it's damn powerful compared to the price. Clearly blows PSP right out of the water.
Something in closing
GIMP is my all-time favorite 2D graphics program (with ImageMagick coming nicely to the second place). It is just... a nice program.