pngs are very nice to use, but the differences between compressors is extreme as nem pointed out.
Gifs are dead small because they use this thing called 'run length encoding' which i won't bother explaining it in much detail cos it'll go too off topic (..phew..wipes forehead!) maybe someone with a bit more knowledge in this area could explain it whilst i dig out my lecture notes. ;D
this is trowas 'proper speak' bitmap and gif breakdown.
basically bitmaps define every pixel in an image, so a single pixel has a set of data comprised of that pixels colour and sometimes other stuff. A gif, will pretty much do the same thing, except that when there is a row of the same colour pixels, it will say "okay now there is 20 pixels of red". Now in a bitmap if there are 20 pixels in a row all the same colour, the bitmap will define all of the values for these pixels individually, which will amount to considerably more data than that of the gif. Which is why gifs are great for compression on images with large flat areas of colour.
;D I always wondered how it worked, but I figured something along those lines as well, since if you have a giant gif of one color, it takes up very little space; but if you have a small gif with lots of image dither (worst case scenario... ) it takes up quite a bit.
Thanks for the info, now I have some backing to my thoughts... ;D