archiv.galad.com

   

Texte


Ein Gif sagt mehr als 256 Farben

2003-10-26
Eine Randnotiz zum Internet Explorer Crash

Entgegen der weit verbreiteten Ansicht, dass ein Gif maximal 256 Farben enthalten kann, ist es sehr wohl möglich, mehr Farben unterzubringen. Dazu sind keine Tricksereien nötig, die Fähigkeit ist bereits im Gif-Format verankert.

Ein Gif stellt einen Datenstrom dar, der zunächst ein logisches Bild, den "Logical Screen" definiert. Dieser hat eine bestimmte Breite und Höhe und legt den Umfang des Bildes fest. Das eigentliche Bild wird aus viereckigen Subbildern in "Graphic Blocks" definiert, die relativ im logischen Bild positioniert werden. Von diesen Subbildern können im Gif-Datenstrom beliebig viele enthalten sein. Über einen Erweiterungsheader, die "Graphic Control Extension", kann festgelegt werden, wie und wie lange das Subbild angezeigt wird, und ob es dort stehen bleibt oder wieder entfernt wird, bevor das nächste an die Reihe kommt. Über diese Funktionalität werden animierte Gifs realisiert.

Weniger bekannt scheint zu sein, dass jedem Subbild eine eigene lokale Farbtabelle, die "Local Color Table", mit bis zu 256 RGB-Einträgen mitgegeben werden kann.


The GIF format utilizes color tables to render raster-based graphics. A color
table can have one of two different scopes: global or local. A Global Color
Table is used by all those graphics in the Data Stream which do not have a
Local Color Table associated with them. The scope of the Global Color Table is
the entire Data Stream. A Local Color Table is always associated with the
graphic that immediately follows it; the scope of a Local Color Table is
limited to that single graphic. A Local Color Table supersedes a Global Color
Table, that is, if a Data Stream contains a Global Color Table, and an image
has a Local Color Table associated with it, the decoder must save the Global
Color Table, use the Local Color Table to render the image, and then restore
the Global Color Table. Both types of color tables are optional, making it
possible for a Data Stream to contain numerous graphics without a color table
at all. [...]


Durch geschickte Aufteilung des Bildes in Subbilder, die jeweils 256 eigene Farben enthalten, können also "True-Color"-Gifs erzeugt werden. Diese Aufteilung kann in Form von Rechtecken geschehen, die ein Puzzle ergeben. Da sich die Subbilder aber auch überlagern können und jedem Subbild eine eigene transparente Farbe mitgegeben werden kann, kann die Aufteilung auch in Bildebenen erfolgen. Ein Mix aus sich überlagernden Rechtecken ist ebenfalls möglich. In jedem Fall dürfte die Suche nach der optimalen Aufteilung mit dem Ziel der geringsten Dateigröße einem Rucksackproblem entsprechen, da die Aufteilung unmittelbar die Komprimierbarkeit beeinflusst.

Es bliebe auszutesten, inwieweit Browser, Bildbetrachter und Anwendungen mit diesen Bildern umgehen können. Immerhin ist die Behandlung der lokalen Farbtabellen eindeutig in der Gif-Formatdefinition beschrieben. Weiterhin bliebe die Frage, ob die Vorteile durch die vermehrte Farbzahl und die resultierenden Dateigrößen in einem gesunden Verhältnis zueinander stehen - und vor allem, ob überhaupt irgendwelche Vorteile vorhanden sind, die nicht bereits ausreichend durch echte verlustlose RGB-Formate wie Tif abgedeckt werden.

Speziell bei Webseiten dürften sich hier aber einige Möglichkeiten eröffnen. Falls dieser Artikel nicht bereits offene Türen einrennt; eine oberflächliche Suchmaschinen-Recherche hat allerdings nichts ergeben. Zudem sind uns noch keine Tools bekannt, die solche Gifs erzeugen können.


<GIF Data Stream> ::=     Header <Logical Screen> <Data>* Trailer

<Logical Screen> ::=      Logical Screen Descriptor [Global Color Table]

<Data> ::=                <Graphic Block>  |
                          <Special-Purpose Block>

<Graphic Block> ::=       [Graphic Control Extension] <Graphic-Rendering Block>

<Graphic-Rendering Block> ::=  <Table-Based Image>  |
                               Plain Text Extension

<Table-Based Image> ::=   Image Descriptor [Local Color Table] Image Data

<Special-Purpose Block> ::=    Application Extension  |
                               Comment Extension


<http://www.w3.org/Graphics/GIF/spec-gif89a.txt>

TopOfDoc