Use these to jump around or read it all…
[Raster Image Formats] [Pixels and the Web]
[Meta/Vector Image Formats] [What’s A Bitmap?]
[Compression] [The GIF Image Formats]
[JPEG Image Formats] [Reader’s Image Questions]
On the Net, luckily, we really only have to deal with three main types of images: CompuServe GIF, JPEG, and Bitmaps. At the moment, those are the only three that are roundly supported by the major browsers. But what’s the difference between them? What does it mean if a GIF is interlaced or non-interlaced? Is a JPEG progressive because it enjoys art deco? Does a Bitmap actually offer directions somewhere? And the most often asked question:
I’ve been meaning to write this tutorial for a while. I offer it as a catch-all answer to the many questions I get about images and their use. Image. We’ll use “image”. That seems to cover a wide enough topic range. I went to my reference books and there I found that “graphic” is more of an adjective, as in “graphic format.” You see, we denote images on the Internet by their graphic format. GIF is not the name of the image. GIF is the compression factors used to create the raster format set up by CompuServe. (More on that in a moment). So, they’re all images unless you’re talking about something specific. Before getting into where we get all 44, and there are more than that even, let me back-peddle for a moment. There actually are only two basic methods for a computer to render, or store and display, an image. When you save an image in a specific format you are creating either a raster or meta/vector graphic format. Here’s the lowdown:Image or Graphic?
Technically, neither. If you really want to be strict, computer pictures are files, the same way WORD documents or solitaire games are files. They’re all a bunch of ones and zeros all in a row. But we do have to communicate with one another so let’s decide.44 Different Graphic Formats?
It does seem like a big number, doesn’t it? In reality, there are not 44 different graphic format names. Many of the 44 are different versions under the same compression umbrella, interlaced and non-interlaced GIF, for example.
CLP | Windows Clipart |
DCX | ZOFT Paintbrush |
DIB | OS/2 Warp format |
FPX | Kodak’s FlashPic |
IMG | GEM Paint format |
JIF | JPEG Related Image format |
MAC | MacPaint |
MSP | MacPaint New Version |
PCT | Macintosh PICT format |
PCX | ZSoft Paintbrush |
PPM | Portable Pixel Map (UNIX) |
PSP | Paint Shop Pro format |
RAW | Unencoded image format |
RLE | Run-Length Encoding (Used to lower image bit rates) |
TIFF | Aldus Corporation format |
WPG | WordPerfect image format |
There is a delicate balance between the crispness of a picture and the number of pixels needed to display it. Let’s say you have two images, each is 5 inches across and 3 inches down. One uses 300 pixels to span that five inches, the other uses 1500. Obviously, the one with 1500 uses smaller pixels. It is also the one that offers a more crisp, detailed look. The more pixels, the more detailed the image will be. Of course, the more pixels the more bytes the image will take up. So, how much is enough? That depends on whom you are speaking to, and right now you’re speaking to me. I always go with 100 pixels per inch. That creates a ten thousand pixel square inch. I’ve found that allows for a pretty crisp image without going overboard on the bytes. It also allows some leeway to increase or decrease the size of the image and not mess it up too much. The lowest I’d go is 72 pixels per inch, the agreed upon low end of the image scale. In terms of pixels per square inch, it’s a whale of a drop to 5184. Try that. See if you like it, but I think you’ll find that lower definition monitors really play havoc with the image. Where the Meta/Vector formats have it over Raster is that they are more than a simple grid of colored dots. They’re actual vectors of data stored in mathematical formats rather than bits of colored dots. This allows for a strange shaping of colors and images that can be perfectly cropped on an arc. A squared-off map of dots cannot produce that arc as well. In addition, since the information is encoded in vectors, Meta/Vector image formats can be blown up or down (a property known as “scalability”) without looking jagged or crowded (a property known as “pixelating”). So that I do not receive e-mail from those in the computer image know, there is a difference in Meta and Vector formats. Vector formats can contain only vector data whereas Meta files, as is implied by the name, can contain multiple formats. This means there can be a lovely Bitmap plopped right in the middle of your Windows Meta file. You’ll never know or see the difference but, there it is. I’m just trying to keep everybody happy. Pixels and the Web
Since I brought up pixels, I thought now might be a pretty good time to talk about pixels and the Web. How much is too much? How many is too few?Meta/Vector Image Formats
You may not have heard of this type of image formatting, not that you had heard of Raster, either. This formatting falls into a lot of proprietary formats, formats made for specific programs. CorelDraw (CDR), Hewlett-Packard Graphics Language (HGL), and Windows Metafiles (EMF) are a few examples.
The following sections offer examples of the image formats discussed here. The images are all from my wife’s and my trip to Turkey in the summer of 1998. It was a wonderful time in a wonderful country. The images are large on purpose to show the effects of the format. |
|
Against what I said above, Bitmaps will display on all browsers, just not in the familiar <IMG SRC=”/ew_img/common/content/article/19980924/hg_imageformats/–“> format we’re all used to. I see Bitmaps used mostly as return images from PERL Common Gateway Interfaces (CGIs). A counter is a perfect example. Page counters that have that “odometer” effect () are Bitmap images created by the server, rather than as an in-line image. Bitmaps are perfect for this process because they’re a simple series of colored dots. There’s nothing fancy to building them.
It’s actually a fairly simple process. In the script that runs the counter, you “build” each number for the counter to display. Note the counter is black and white. That’s only a one bit-per-pixel level image. To create the number zero in the counter above, you would build a grid 7 pixels wide by 10 pixels high. The pixels you want to remain black, you would denote as zero. Those you wanted white, you’d denote as one. Here’s what it looks like:
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 1 | 1 | 0 |
0 | 0 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
See the number zero in the graph above? I made it red so it would stand out a bit more. You create one of those patterns for the numbers 0 through 9. The PERL script then returns the Bitmap image representing the numbers and you get that neat little odometer effect. That’s the concept of a Bitmap. A grid of colored points. The more bits per pixel, the more fancy the Bitmap can be.
Bitmaps are good images, but they’re not great. If you’ve played with Bitmaps versus any other image formats, you might have noticed that the Bitmap format creates images that are a little heavy on the bytes. The reason is that the Bitmap format is not very efficient at storing data. What you see is pretty much what you get, one series of bits stacked on top of another.
|
If case you’re wondering, the image was saved in Windows version run-length encoding (there’s also a CompuServe version) at 256 colors. It produced quite a drop in bytes, don’t you think? And to be honest — I really don’t see a whole lot of difference.
So, why not create a single pixel when all of the colors are close? You could even lower the number of colors available so that you would have a better chance of the pixels being close in color. Good idea. The people at CompuServe felt the same way. GIF, which stands for “Graphic Interchange Format,” was first standardized in 1987 by CompuServe, although the patent for the algorithm (mathematical formula) used to create GIF compression actually belongs to Unisys. The first format of GIF used on the Web was called GIF87a, representing its year and version. It saved images at 8 pits-per-pixel, capping the color level at 256. That 8-bit level allowed the image to work across multiple server styles, including CompuServe, TCP/IP, and AOL. It was a graphic for all seasons, so to speak. CompuServe updated the GIF format in 1989 to include animation, transparency, and interlacing. They called the new format, you guessed it: GIF89a. There’s no discernable difference between a basic (known as non-interlaced) GIF in 87 and 89 formats. See for yourself. The image is of me and another gentleman playing a Turkish Sitar. The GIF Image Formats
So, why wasn’t the Bitmap chosen as the King of all Internet Images? Because Bill Gates hadn’t yet gotten into the fold when the earliest browsers started running in-line images. I don’t mean to be flippant either, I truly believe that.
|
Even the bytes are the same. It’s the transparency, animation, and non-interlacing additions to GIF89a that really set it apart. Let’s look at each one.
Animation
I remember when animation really came into the mainstream of Web page development. I was deluged with e-mail asking how to do it. There’s been a tutorial up for a while now inSo, You Want An Animated gif, Huh?
. Stop by and see it for instruction on how to create the animations yourself. Here, we’re going to quickly discuss the concepts of how it all works.
|
What you are seeing in that example are 12 different images, each set one “hour” farther ahead than the one before it. Animate them all in a row and you get that stopwatch effect.
The concept of GIF89a animation is much the same as a picture book with small animation cells in each corner. Flip the pages and the images appear to move. Here, you have the ability to set the cell’s (technically called an “animation frame”) movement speed in 1/100ths of a second. An internal clock embedded right into the GIF keeps count and flips the image when the time comes.
The animation process has been bettered along the way by companies who have found their own method of compressing the GIFs further. As you watch an animation you might notice that very little changes from frame to frame. So, why put up a whole new GIF image if only a small section of the frame needs to be changed? That’s the key to some of the newer compression factors in GIF animation. Less changing means fewer bytes.
Transparency
Again, if you’d like a how-to, I have one you for you inSo You Want A Transparent Image, Huh?
. A transparent GIF is fun but limited in that only one color of the 256-shade palette can be made transparent. Here’s an example:
|
As you can see, the bytes came out the same after the image was put through the transparency filter. The process is best described as similar to the weather forecaster on your local news. Each night they stand in front of a big green (sometimes blue) screen and deliver the weather while that blue or green behind them is “keyed” out and replaced by another source. In the case of the weather forecaster, it’s usually a large map with lots of Ls and Hs.
The process in television is called a “chroma key.” A computer is told to hone in on a specific color, let’s say it’s green. Chroma key screens are usually green because it’s the color least likely to be found in human skin tones. You don’t want to use a blue screen and then chroma out someone’s pretty blue eyes. That chroma (color) is then “erased” and replaced by another image.
Think of that in terms of a transparent GIF. There are only 256 colors available in the GIF. The computer is told to hone in on one of them. It’s done by choosing a particular red/green/blue shade already found in the image and blanking it out. The color is basically dropped from the palette that makes up the image. Thus whatever is behind it shows through.
The shape is still there though. Try this: Get an image with a transparent background and alter its height and width in your HTML code. You’ll see what should be the transparent color seeping through.
Any color that’s found in the GIF can be made transparent, not just the color in the background. If the background of the image is speckled then the transparency is going to be speckled. If you cut out the color blue in the background, and that color also appears in the middle of the image, it too will be made transparent.
When I put together a transparent image, I make the image first, then copy and paste it onto a slightly larger square. That square is the most hideous green I can mix up. I’m sure it doesn’t appear in the image. That way only the background around the image will become clear.
Interlaced vs. Non-Interlaced GIF
The GIF images of me playing the Turkish Sitar were non-interlaced format images. This is what is meant when someone refers to a “normal” GIF or just “GIF”.When you do NOT interlace an image, you fill it in from the top to the bottom, one line after another. The following image is of two men coming onto a boat we used to cross from the European to the Asian side of Turkey. The flowers they are carrying were sold in the manner of roses we might buy our wife here in the U.S. I bought one. (What a guy.)
|
Hopefully, you’re on a slower connection computer so you got the full effect of waiting for the image to come in. It can be torture sometimes. That’s where the brilliant Interlaced GIF89a idea came from.
Interlacing is the concept of filling in every other line of data, then going back to the top and doing it all again, filling in the lines you skipped. Your television works that way. The effect on a computer monitor is that the graphic appears blurry at first and then sharpens up as the other lines fill in. That allows your viewer to at least get an idea of what’s coming up rather than waiting for the entire image, line by line. The example image below is of a spice shop in the Grand Covered Bazaar, Istanbul.
|
|
The difference between the 1% and 50% compression is not too bad, but the drop in bytes is impressive. The numbers I am showing are storage numbers, the amount of hard drive space the image takes up.
You’ve probably already surmised that 50% compression means that 50% of the image is included in the algorithm. If you don’t put a 50% compressed image next to an exact duplicate image at 1% compression, it looks pretty good. But what about that 99% compression image? It looks horrible, but it’s great for teaching. Look at it again. See how it appears to be made of blocks? That’s what’s meant by lossy. Bytes are lost at the expense of detail. You can see where the compression algorithm found groups of pixels that all appeared to be close in color and just grouped them all together as one. You might be hard pressed to figure out what the image was actually showing if I didn’t tell you.
Progressive JPEGs
You can almost guess what this is all about. A progressive JPEG works a lot like the interlaced GIF89a by filling in every other line, then returning to the top of the image to fill in the remainder. The example is again presented three times at 1%, 50%, and 99% compression. The image is of the port at Istanbul from our hotel rooftop.
|
Obviously, here’s where bumping up the compression does not pay off. Rule of thumb: If you’re going to use progressive JPEG, keep the compression up high, 75% or better. That said, I also follow the thinking, “Do people really need to see this image?” Can I get away with text rather than an image link? Can I make links to images allowing the viewer to choose whether to look or not? The fewer images I have on a page, the faster it comes in. I also attempt to have the same images across multiple pages, if possible. That way the viewer only has to wait once. After that, the images are in the cache and they pop right up. To get these formats, you need to make a point of saving in these formats. When your image editor is open and you have an image you wish to save, always choose SAVE AS from the FILE menu. You’ll get a dialogue box that asks where you’d like to save the image. Better yet, somewhere on that dialogue box is the opportunity for you to choose a different image format. Let’s say you choose GIF. Keep looking. Somewhere on the same dialogue box will be an OPTIONS button (or something close). That’s where you’ll choose 87a or 89a, interlaced or non-interlaced, formats. If you choose JPEG, you’ll get the option of choosing the compression rate. You may not get to play with the sliding scale I get. You may only get a series of compression choices, high, medium, low, etc. Go high. Just remember, there are no right or wrong answers when creating images. Pretty much anything goes. Enjoy! Reader’s Image Questions
Which image do I use where?
There’s just not a good answer to this question. No matter what I say, someone else can give you just as compelling a reason why you should do the opposite. I’ll tell you the rules I follow:
How do I save in these formats?
You have to have an image editor. I own three. Most of my graphic work for the Web is done in PaintShop Pro. I do that because PaintShop Pro is shareware and you can get your hands on the same copy I have. That way I know if I can do it, you can do it.Do you edit and create images in GIF or JPEG?
Neither. I always edit in the PaintShop Pro or Bitmap format. Others have told me that image creation and editing should only be done in a Vector format. Either way, make a point of editing with large images. The larger the image, the better chance you have of making that perfect crop. Edit at the highest color level the image program will allow. You can always resize and save to a low-byte format after you’ve finished creating the file. That’s That…
Now you’ve got the lowdown on the images that work over the World Wide Web. If you haven’t already, try your hand at creating your own graphics. I enjoy it. It’s the adult version of finger painting.
[Raster Image Formats] [Pixels and the Web]
[Meta/Vector Image Formats] [What’s A Bitmap?]
[Compression] [The GIF Image Formats]
[JPEG Image Formats] [Reader’s Image Questions]