Ontwerp van het BigTIFF bestandsformaat
Index
Wat is BigTIFF?
De voorgestelde BigTIFF structuren
Diverse bijkomende details
BigTIFF voorbeelden
Wat is BigTIFF?
Het TIFF bestandsformaat gebruikt 32bit offsets, en is dus beperkt in grootte tot 4 gigabytes. Dat volstond, vele jaren lang. Maar vandaag is er behoefte aan een goed multifunctioneel open beeld bestandsformaat dat heel grote afbeeldingen aankan, of heel grote collecties van afbeeldingen, en de grens van 4 gigabytes wordt daardoor heel reëel.
Men wil nu een nieuwe variant van TIFF ontwerpen, BigTIFF genaamd. De bedoeling is dat BigTIFF heel sterk op TIFF blijft lijken, behalve natuurlijk dat het 64bit offsets gebruikt. De voordelen van de grote gelijkenis met TIFF zijn enorm. Bestaande TIFF libraries kunnen bijvoorbeeld heel makkelijk uitgebreid worden om ook deze nieuwe variant te ondersteunen. De behoefte aan nieuwe documentatie is minimaal. Alle erg gewaardeerde eigenschappen van dit bestandsformaat, dat al vele jaren in gebruik is en uitgebreid is geweest, worden behouden. Alle bekende tags worden hergebruikt, alle ondersteunde bitdiepten en datatypes blijven geldig. Het willekeurige aantal 'extra kanalen', tiling en striping, de bonte verzameling compressiemethoden, de regels omtrent private tags,... Al deze zaken maakten TIFF zo enorm bruikbaar in pre-press systemen, voor het opslaan van wetenschappelijke gegevens, en een brede waaier van andere toepassingen, en al deze zaken blijven intact. Alleen de offset bitdiepte verandert, waardoor BigTIFF bestanden probleemloos de grens van 4 gigabyte kunnen doorbreken.
Deze pagina heeft tot doel een overzicht van het BigTIFF formaat aan te bieden, en vooral ook de verschillen met klassieke TIFF aan te duiden. Het merendeel van deze pagina is gebaseerd op de informele beschrijving van de hoogste niveau TIFF structuren, onderdeel van de TIFF bestandsformaat FAQ. Als u niet vertrouwd bent met die TIFF structuren, raden we u aan om dat onderdeel van de FAQ eerst door te nemen.
Een andere bron van informatie omtrent het BigTIFF bestandsformaat is de BigTIFF design pagina op de LibTiff site. Die pagina is het HTML equivalent van de voormalige Wiki formaat ontwerp pagina. De Wiki was de pagina met autoriteit, en de werkplaats. Deze pagina biedt een veel informeler overzicht, en ambieert geen autoriteit. Tenslotte is er ook het LibTiff Mailing List Archief, waar het formaat ontstond uit talrijke, ellenlange discussies. In het volgende overzicht van de BigTIFF structuren verwijst een link getiteld 'discussie' naar een welbepaalde thread in dat archief. Deze discussie is heel waarschijnlijk het finale startschot geweest.
BigTIFF is vooralsnog geen officiële standaard. Er hebben echter veel mensen meegewerkt aan het BigTIFF ontwerp, waaronder enkele mensen van Adobe, en er zijn sindsdien geen wijzigingen nodig gebleken. Er zijn ten minste twee onafhankelijke implementaties (onze eigen AWare Systems AsTiff, en LibTiff vanaf versie 4.0). Bovendien is het BigTIFF ontwerp en erg kleine en intuïtieve uitbreiding van klassieke TIFF. Het lijkt erg onwaarschijnlijk dat een standaardiseringsorganisatie of Adobe in dit stadium een eigen ontwerp dat verschilt van de bestaande BigTIFF naar voor zou schuiven. We menen bijgevolg dat we toepassing en implementatie van BigTIFF kunnen aanraden.
De voorgestelde BigTIFF structuren
Dit is de klassieke TIFF file header...
Offset | Datatype | Waarde |
---|---|---|
0 | Word | Byte order specificatie |
2 | Word | Versienummer (altijd 42) |
4 | Unsigned Long | Offset van eerste IFD |
En dit is de nieuwe BigTIFF file header...
Offset | Datatype | Waarde |
---|---|---|
0 | Word | Byte order specificatie |
2 | Word | Versienummer (altijd 43) |
4 | Word |
Aantal bytes in een offset Altijd 8 in BigTIFF, dit is bedoeld om makkelijk offsets van 16 bytes te kunnen ondersteunen, ooit. Als hier een andere waarde staat, dient een lezer gewoon op te geven. |
6 | Word | Altijd 0 Als hier een andere waarde staat, dient een lezer gewoon op te geven. |
8 | Unsigned 8Byte | Offset van eerste IFD |
Het laatste element, in beide varianten, wijst naar de eerste IFD (Image File Directory). Deze IFD kan zich om het even waar in het bestand bevinden. Elke 'pagina', elk beeld in een multi-page TIFF bestand, klassieke TIFF of BigTIFF wordt beschreven door één enkele IFD. Het volgende detailleert de klassieke bouw van zo'n IFD...
Offset | Datatype | Waarde |
---|---|---|
0 | Word | Aantal tags in de IFD |
2+x*12 | Tag structuur | Tag data |
2+(aantal tags in IFD)*12 | Unsigned Long | Offset naar volgende IFD, als er een volgende IFD is 0 in het andere geval |
En zo ziet de IFD er uit in het nieuwe BigTIFF bestandsformaat...
Offset | Datatype | Waarde |
---|---|---|
0 | Unsigned 8Byte | Aantal tags in de IFD |
8+x*20 | Tag structuur | Tag data |
8+(aantal tags in IFD)*20 | Unsigned 8Byte | Offset naar volgende IFD, als er een volgende IFD is 0 in het andere geval |
De tags moeten gerangschikt zijn volgens tag code, van klein naar groot, zowel in de klassieke TIFF als in BigTIFF. Elke tag is exact 12 bytes lang in klassieke TIFF, en ziet er als volgt uit....
Offset | Datatype | Waarde |
---|---|---|
0 | Word | Tag code |
2 | Word | Datatype van tag data |
4 | Unsigned Long | Aantal waarden |
8 | x * Tag data datatype of Unsigned Long offset | Tag data of offset van tag data |
Dezelfde tag structuur, in BigTIFF, is 20 bytes lang, en ziet er zo uit...
Offset | Datatype | Waarde |
---|---|---|
0 | Word | Tag code |
2 | Word | Datatype van tag data |
4 | Unsigned 8Byte Discussie van dit element z'n datatype is nu afgerond. | Aantal waarden |
12 | x * Tag data datatype of Unsigned 8Byte offset | Tag data of offset van tag data |
Dezelfde regel voor het 'inlinen' van de tag data is van toepassing in klassieke TIFF en BigTIFF, alleen de drempelwaarde verschilt. In klassieke TIFF wordt de tag data in de tag structuur, in de IFD, geschreven als die data niet groter is dan 4 bytes. Indien ze wel groter is, wordt ze elders geschreven, en wordt er enkel naar verwezen in de IFD. In BigTIFF wordt de tag data in de tag structuur, in de IFD, geschreven als die data niet groter is dan 8 bytes.
Diverse bijkomende details
De bestandsextenties die zijn voorgesteld zijn, onder andere, 'tif', 'tf8' en 'btf' (zie ook discussie in de LibTiff mailing list).
Drie nieuwe datatypes worden toegevoegd aan de bestaande datatypes van klassieke TIFF:
TIFF_LONG8 = 16, zijnde unsigned 8byte integer
TIFF_SLONG8 = 17, zijnde signed 8byte integer
TIFF_IFD8 = 18, zijnde een nieuwe unsigned 8byte IFD offset.
De StripOffsets, StripByteCounts, TileOffsets, en TileByteCounts tags mogen van het datatype TIFF_LONG8 zijn in BigTIFF. Ouwe datatypes TIFF_LONG, en TIFF_SHORT, voor zover toegelaten in de TIFF 6.0 specificatie, zijn nog steeds mogelijk in BigTIFF.
Net zo mogen tags die naar andere IFDs verwijzen, zoals bijvoorbeeld de SubIFDs tag, nu van het datatype TIFF_IFD8 zijn in BigTIFF. Ook hier geld dat de ouwe datatypes TIFF_IFD, en de weinig aanbevelenswaardige TIFF_LONG, ook nog steeds toegelaten zijn.
BigTIFF voorbeelden
We hebben een reeks BigTIFF voorbeelden samengesteld. Vanzelfsprekend hebben we vooralsnog weinig of geen gelegenheid gehad om deze met andere software te testen. We zijn zo nauwkeurig mogelijk geweest, en hebben alles grondig nagekeken, maar we kunnen geen garanties bieden...
BigTIFFSamples.zip bevat een reeks van 8 verschillende BigTIFF bestanden. Het BigTIFFSample.html bestand in deze zip beschrijft hun karakteristieken in detail. |