TIFF-Dateien (Karl-Heinz Passler, HRZ) TIFF-Dateien dienen der Speicherung und dem Austausch graphischer Informationen. Viele Geraete, beispielsweise Scanner und Still- Video-Kameras mit entsprechender Hard- und Software koennen direkt TIFF-Dateien erzeugen. Anwendungsprogramme wie PageMaker und Word 5.0 koennen TIFF-Dateien verwenden. Der Vorteil des TIFF-Formats besteht in der Moeglichkeit, in einer vereinheitlichten und trotzdem flexiblen Art und Weise Pixel-Daten abzuspeichern. Dieser Artikel gibt einen Ueberblick ueber den Aufbau und Inhalt von TIFF-Dateien. Der Leser soll nach der Lektuere dieses Beitrags erkennen koennen, welche Auswirkungen bestimmte Optionen haben, wenn er Software benutzt, die TIFF-Dateien erstellt. Das weiter unten beschriebene Programm SHOWTIF zeigt die Eigenschaften von TIFF-Dateien an und gibt dadurch Hinweise auf die Ursachen, wenn ein Programm eine TIFF-Datei nicht verarbeiten kann. 1 Der Aufbau einer TIFF-Datei Eine TIFF-Datei besteht aus drei Teilen: þ Der Kopf (engl. header) enthaelt grundlegende Informationen, um die uebrigen Teile der TIFF-Datei lesen zu koennen. þ In einem oder mehreren Inhaltsverzeichnissen (engl. directory) werden die Art der Speicherung des Bildes (oder der Bilder) sowie deren Eigenschaften beschrieben. þ Die eigentlichen Bildinformationen stehen in einem eigenen Bereich (engl. bit-map image data) der Datei. +------+ | KOPF | +------+ | | +-----------+ +-------|Verzeichn.1|-----+ +-----------+ | +--------+ | +-----------+ | | +----|Verzeichn.2|-+ | | +-----------+ | | | | +---------+ | | |BILDDATEN|-----+ | | | | | | | | | +----| | | | | | | | +---------+ Im folgenden werden diese drei Teile beschrieben: 1.1 Kopf der TIFF-Datei þ Enthalten die ersten beiden Bytes die ASCII-Zeichenkette 'II', so sind die Daten im INTEL-Format gespeichert. Das bedeutet, dass in einem Wort oder Langwort die Bytes in der Reihenfolge vom niedrigstwertigen Byte zum hoechstwertigen Byte gespeichert sind. þ Enthalten die ersten beiden Bytes die ASCII-Zeichenkette 'MM', so sind die Daten im MOTOROLA-Format gespeichert. Das bedeutet, dass in einem Wort oder Langwort die Bytes in der Reihenfolge vom hoechstwertigen Byte zum niedrigstwertigen Byte gespeichert sind. Die beiden naechsten Bytes enthalten die TIFF-Versionsnummer. Diese hat zur Zeit den Dezimalwert 42. Zukuenftige Erweiterungen des TIFF-Dateiformats werden so implementiert, dass auch "alte" TIFF-Dateien weiter verarbeitet werden koennen. Die Versionsnummer 42 bleibt solange erhalten, wie diese Strategie weiter verfolgt wird. Wird eine Datei gelesen, die an der entsprechenden Stelle nicht den Dezimalwert 42 enthaelt, handelt es sich nicht um eine TIFF-Datei, wie sie in diesem Artikel beschrieben wird. Die naechsten vier Bytes stellen einen Zeiger (pointer) auf das erste Inhaltsverzeichnis dar. In TIFF-Dateien sind Zeiger immer als 4-Byte-Integer gespeichert und immer relativ zum Dateianfang (Byte 0) angegeben. 1.2 Aufbau eines Inhaltsverzeichnisses Ein Inhaltsverzeichnis besteht logisch aus drei Teilen: +-------------------+ |Anzahl der Eintraege| +-------------------+ +------------+ |Die Eintraege| | | | | +------------+ +--------------------+ |Zeiger auf naechstes | | Verzeichnis | +--------------------+ In den beiden ersten Bytes ist die Anzahl der Eintraege gespeichert. Die einzelnen Eintraege (engl. tags) umfassen jeweils genau zwoelf Bytes an grundlegenden Daten. Alle Eintraege stehen unmittelbar hintereinander. Werden zur Speicherung der Informationen eines Eintrags mehr als zwoelf Bytes benoetigt, so enthalten die zwoelf Bytes einen Zeiger auf die Stelle, an der die uebrigen Daten gespeichert sind. Unmittelbar hinter dem letzten aus zwoelf Bytes bestehenden Eintrag steht ein Zeiger, der auf den Beginn des naechsten Inhaltsverzeichnisses zeigt. Handelt es sich dabei um das letzte Verzeichnis, muss dieser Zeiger den Wert 0 haben. In den meisten TIFF-Dateien ist nur ein Inhaltsverzeichnis enthalten. Ein Eintrag hat den folgenden Aufbau: +-----------------+ 2 Bytes |Typ des Eintrags | |-----------------| 2 Bytes | Typ der Daten | |-----------------| 4 Bytes | Laenge | | | |-----------------| 4 Bytes | Daten oder | | Zeiger | +-----------------+ Die beiden ersten Bytes stehen fuer den Typ des Eintrags. Der Typ kennzeichnet, welche Daten festgelegt werden und wird durch eine Nummer repraesentiert. Die beiden folgenden Bytes bestimmen den Datentyp. Es sind fuenf Datentypen vorgesehen, die wie folgt zu interpretieren sind: 1 ein Byte: ein Byte mit 8 Bits 2 ein Byte: ASCII-Zeichen mit 8 Bits (Text) 3 zwei Bytes: Integer ohne Vorzeichen mit 16 Bits 4 vier Bytes: Integer ohne Vorzeichen mit 32 Bits 5 acht Bytes: ein Bruch aus zwei 32-Bit-Integern; der erste Wert ist der Zaehler, der zweite der Nenner. In den naechsten vier Bytes ist die Anzahl der vorhandenen Daten gespeichert. Aus historischen Gruenden wird dieses Datenfeld in der Literatur Laenge (engl. length) genannt. Als Einheit der Laenge wird der zuvor beschriebene Datentyp verwendet: Wird beispielsweise ein Integer-Wert aus zwei Bytes gespeichert, so hat die Laenge den Wert 1. Bei einem Bruch aus zwei 32-Bit- Integern hat die Laenge auch den Wert 1. Werden fuenf Integer- Werte gespeichert, hat die Laenge den Wert 5 und wird ein ASCII- Text gespeichert, so gibt die Anzahl der Zeichen (einschliesslich des letzten Zeichens, das den ASCII-Wert 0 haben muss) die Laenge an. Diese Laenge und der Datentyp legen fest, wie die naechsten vier Bytes zu interpretieren sind: Ist die Gesamtlaenge der Daten ó vier Bytes, so werden die Daten selbst abgespeichert. Andernfalls stellen diese vier Bytes einen Zeiger dar, der auf die Stelle, an der die eigentlichen Daten stehen, zeigt. 1.3 Beschreibung der einzelnen Eintraege In diesem Abschnitt sollen die wichtigsten Eintraege beschrieben werden. Die in einer Datei vorhandenen Eintraege und ihre Werte zeigt das Programm SHOWTIF (siehe unten) an. Treten hier nicht beschriebene Daten auf, so ist ihre Bedeutung oft durch ihren Namen ersichtlich, beispielsweise DocumentName. Im Zweifelsfall ist die unten erwaehnte Dokumentation zu konsultieren. 1.3.1 Organisation der Bilddaten Die folgenden Eintraege beschreiben die Groesse des Bildes, seine Aufloesung und aehnliche Daten. Tag 255 (SubfileType) Datentyp: 3 Datenbereich: 1 .. 3 Dieser Eintrag sollte nicht mehr benutzt werden. An seiner Stelle ist Tag 254 zu verwenden. Aeltere TIFF-Dateien koennen jedoch diesen Eintrag enthalten. Eine TIFF-Datei kann mehrere Bilder enthalten. Dieser Eintrag oder auch ein Eintrag mit der Nummer 254 kennzeichnen in einem solchen Fall das betreffende Bild genauer. Der Wert 1 bedeutet, dass es sich um ein Bild mit voller Aufloesung handelt. Ist kein Eintrag mit der Nummer 255 oder 254 vorhanden, so ist das die Voreinstellung. Der Wert 2 gibt an, dass es sich um ein Bild mit verringerter Aufloesung handelt; dann ist wahrscheinlich auch das Bild mit voller Aufloesung in der Datei gespeichert. Je nach gewuenschter Ausgabequalitaet kann dann das entsprechende Bild gewaehlt werden. Ist der Wert 3, so handelt es sich um eine Seite eines Bildes, das insgesamt aus mehreren Seiten besteht. Tag 254 (SubfileType) Datentyp: 4 Dieser Eintrag ist in neueren TIFF-Dateien an Stelle des Eintrags 255 enthalten. Die Daten sind hier bitweise zu interpretieren: Bit Bedeutung 0 Bild verringerter Aufloesung 1 eine Seite eines mehrseitigen Bildes 2 Transparenzmaske 3 Separation Layer Tag 256 (ImageWidth) Datentyp: 3 Datenbereich: 0 .. 65535 Groesse des Bildes in horizontaler Richtung (in Pixel) Tag 257 (ImageLength) Datentyp: 3 Datenbereich: 0 .. 65535 Groesse des Bildes in vertikaler Richtung (in Pixel) Tag 282 (XResolution) Datentyp: 5 Dies ist die Zahl der Pixel pro Aufloesungseinheit (siehe Tag 296) in horizontaler Richtung. Dieser Eintrag wird benoetigt, wenn die Originalgroesse des Bildes reproduzierbar sein soll. Tag 283 (YResolution) Datentyp: 5 Dies ist die Zahl der Pixel pro Aufloesungseinheit (siehe Tag 296) in vertikaler Richtung. Dieser Eintrag wird benoetigt, wenn die Originalgroesse des Bildes reproduzierbar sein soll. Tag 296 (ResolutionUnit) Datentyp: 3 Datenbereich: 1, 2, 3 Einheit der Aufloesung; folgende Werte sind vorgesehen: 1 keine Angabe 2 Inch 3 Cm 1.3.2 Die Beschreibung der Zeiger auf die Bilddaten Auf die eigentlichen Bilddaten (die Werte der Pixel) kann durch einen einzigen oder mehrere Zeiger verwiesen werden. Bei den meisten unkomprimierten Bildern wird nur ein Zeiger verwendet, der auf den Anfang der Pixel-Daten zeigt. Sollen mehrere Zeiger verwendet werden, so werden Gruppen aufeinanderfolgender Zeilen in Streifen (engl. strip) zusammengefasst. Jeder Streifen (ausser dem letzten) muss die gleiche Anzahl von Bildzeilen enthalten. Dann verweisen die Zeiger jeweils auf die Stellen, an denen die Speicherung der Streifen beginnt. Diese Moeglichkeit wird vor allem bei komprimierten Bildern verwendet: Um die Daten einer Zeile zu entkomprimieren, muessen alle vorherigen Zeilen (beginnend beim Start der Kompression) auch entkomprimiert werden. Wenn nur ein Teil des Bildes auszugeben ist, ist es von Vorteil, wenn das ganze Bild in Streifen aufgeteilt ist. Dann muss mit der Entkomprimierung nicht beim Start der Daten begonnen werden, sondern nur beim ersten Streifen, der den zu zeigenden Teil enthaelt. Tag 273 (StripOffset) Datentyp: 3 oder 4 Hier wird nur ein Wert angegeben, wenn das Bild nicht in Streifen eingeteilt ist und es sich nicht um ein Farbbild handelt. In den anderen Faellen sind entsprechend viele Werte zu spezifizieren. Ist das Bild nicht in Bereiche aufgeteilt, so gibt der Wert die Position an, an der die Pixel-Daten beginnen. Ist das Bild in Bereiche eingeteilt, so ist der Wert ein Zeiger auf die Stelle der Datei, an der die Daten gespeichert sind, die die Anfaenge der Pixel-Daten der Streifen angeben. Tag 278 (RowsPerStrip) Datentyp: 3 oder 4 Hier ist die Anzahl der Bildzeilen pro Streifen gespeichert. 1.3.3 Beschreibung der Pixel Diese Eintraege werden zur Unterscheidung von Schwarzweiss-, Graustufen- und Farbbildern sowie zur richtigen Interpretation der Pixel-Daten verwendet. Tag 277 (SamplesPerPixel) Datentyp: 3 Hier ist gespeichert, wieviele Speichereinheiten (siehe BitsPerSample) ein Pixel benoetigt. Bei Schwarzweiss- und Graustufenbildern wird ueblicherweise der Wert 1 verwendet, waehrend bei Farbbildern (mit Informationen ueber Rot-, Gruen- und Blauanteile beispielsweise) der Wert 3 verwendet wird. Tag 258 (BitsPerSample) Datentyp: 3 Hier ist gespeichert, wieviele Bits eine Speichereinheit belegt. Handelt es sich um ein Schwarzweissbild, so reicht ein Bit aus. Bei einem Graustufenbild mit 16 Stufen reichen vier Bits aus, waehrend bei einem Graustufenbild mit 256 Stufen acht Bits benoetigt werden. Es ist natuerlich moeglich, mehr Bits als noetig zu verwenden. Aus Gruenden der Datenmengenreduktion sollte das jedoch nur dann getan werden, wenn das wirklich sinnvoll ist. Liegt beispielsweise ein Bild mit 128 Graustufen vor, reichen sieben Bits aus. Um die Arbeitsgeschwindigkeit zu erhoehen, ist es jedoch in diesem Fall oft sinnvoll, mit acht Bits arbeiten. Tag 262 (PhotometricInterpretation) Datentyp: 3 Datenbereich: 0, 1, 2 Dieser Eintrag gibt an, wie die Pixel-Daten zu interpretieren sind. Es gibt die folgenden Moeglichkeiten: 0 kleinster Wert entspricht weiss 1 kleinster Wert entspricht schwarz 2 kleinster Wert entspricht kleinster Intensitaet bei RGB- Interpretation 1.3.4 Beschreibung der Komprimierung Tag 259 (Compression) Datentyp: 3 Der Wert 1 bedeutet, dass die Daten nicht komprimiert sind. Zur Kompression stehen eine Reihe von Verfahren zur Verfuegung, die hier aber nicht erlaeutert werden. Eine Kompression reduziert vor allem bei Schwarzweissbildern die Datenmenge. Bei Graustufen- und Farbbildern wird jedoch im allgemeinen keine wesentliche Verkleinerung der Dateien erreicht. 2 TIFF-Klassen Neben den hier beschriebenen Eintraegen existieren zur Zeit noch etwa 30 weitere. Um die Verwendung der Eintraege zu vereinheitlichen, wurden fuer verschiedene Anwendungen Klassen definiert. In ihnen ist festgelegt, welche Eintraege zu verwenden sind. Es gibt folgende Klassen: Klasse B fuer Schwarzweissbilder Klasse G fuer Graustufenbilder Klasse P fuer Palettenfarbbilder Klasse R fuer RGB-Farbbilder 3 Ein Programm zur Ausgabe von TIFF-Dateien Das Programm SHOWTIF dient zum Anzeigen des Inhalts von TIFF- Dateien am Bildschirm. Zur Zeit unterstuetzt SHOWTIF die folgenden Merkmale einer TIFF-Datei: þ Die Daten koennen im INTEL- oder MOTOROLA-Format gespeichert sein. þ Tag 255 (OldSubfileType): Es wird nur der Wert 1 (volle Aufloesung) unterstuetzt. þ Tag 262 (PhotometricInterpretation): Es werden nur die Werte 0 (Minimum= weiss) und 1 (Minimum= schwarz) unterstuetzt. þ Tag 259 (Compression): Es wird nur der Wert 1 (keine Kompression) interpretiert. þ Tag 258 (BitsPerSample): Es werden nur die Werte 1 (Schwarz- Weiss-Bild), 4 (Graustufenbild mit maximal 16 Graustufen) und 8 (Graustufenbild mit maximal 256 Graustufen) unterstuetzt. Es koennen jedoch hoechstens 16 Graustufen gezeigt werden. Ist der Tag 258 in der Datei nicht enthalten, so wird der Wert 1 verwendet. þ Tag 256 (ImageWidth) und Tag 257 (ImageLength) werden zur Darstellung am Bildschirm benutzt. þ Tag 273 (StripOffset) wird als Start-Byte der Daten interpretiert. Alle anderen Eintraege werden ignoriert, aber ihre Werte werden protokolliert. Auf der Hardware-Seite werden eine VGA-Karte und ein entsprechender Bildschirm benoetigt. Das Programm kann auf drei Arten aufgerufen werden: þ Aufruf mit dem Namen einer TIFF-Datei als Parameter þ Aufruf mit einem Dateinamenmuster als Parameter, um eine Gruppe von TIFF-Dateien anzuzeigen þ Aufruf mit dem Namen einer Steuerdatei, die die Namen der anzuzeigenden TIFF-Dateien enthaelt Das Programm SHOWTIF steht im HRZ allen Benutzern kostenlos zur Verfuegung und kann von dem anonymen FTP-Server des HRZs (Siehe dazu entsprechenden beitrag in dieser LOGIN-Ausgabe) kopiert werden. Die Datei TIFF.DOC enthaelt eine ausfuehrliche Beschreibung des TIFF-Formats.