I recently took a deep dive into the GIF format. In the process I learnt a few things by reading the specification.
A GIF is made up of multiple images
I thought the GIF format would just contain a set of pixels. In fact, a GIF is made up of multiple images. So a simple example like:
Could actually be made up of multiple images like this:
GIF has transparency, but that doesn't mean you have transparent GIFs
In the above example the sun and house images have the background in them. If the background was very detailed then this would be inefficient. So instead you can set a transparent colour index for each image. Pixels with this index don't replace the background pixels when the images are composited together.
That's the only transparency in the specification. The background colour is actually encoded in the file so technically a GIF picture has all pixels set to a colour. However at some point renderers decided they wanted transparency and ignored the background colour and set it to transparent instead. It's not in the spec, but it's what everyone does. This is the reason that GIF transparency looks bad - there's no alpha channel, just a hack abusing another feature.
You can have more than 256 colours
GIFs are well known for having a palette of only up to 256 colours. However, you can have a different palette for each image in the GIF. That means in the above example you could use a palette with lots of greens and blues for the background, lots of reds for the house and lots of yellows for the sun. The combined image could have up to 768 colours! With some clever encoding you can have a GIF file that uses up to 24 million colours.
Animation is just delaying the rendering
Why we can't have nice things
Sadly however someone decided that all images inside a GIF file should be treated as animation frames. And they should have a minimum delay time (including zero delays being rounded up to 20ms or so). So if you want you GIF to look as you intended you're stuck with one image per frame and only 256 colours per frame unless the common decoders are fixed. It seems the main reason they continue to be like this is there are badly encoded GIF files online and they don't want them to stop working.
GIF, you are a surprisingly beautiful format and it's a shame we don't see your full potential!
No comments:
Post a Comment