PicScrub logoPicScrub
Formatlara dön

TIFF formatı

Tagged Image File Format

Başlık yapısı

TIFF, görsel meta verisinin dedesi sayılır. Bir JPEG dosyasının içinde EXIF verisi gördüğünde aslında dosyaya gömülmüş bir TIFF yapısına bakıyorsun. TIFF'i anlamak, görsel meta verilerinin büyük kısmının nasıl çalıştığını anlamak demek.

Format, sana iki kritik bilgiyi veren 8 baytlık bir başlıkla başlar: bayt sırası (Intel mi, Motorola mı) ve ilk IFD'nin nerede olduğu. Sonrası tamamen işaretçi takibinden ibaret.

TIFF dosya yapısı

Header
IFD0
Strip Data
EXIF IFD
GPS IFD
Header
8 bayt
Bayt sırası + sihirli sayı + IFD offset'i
IFD0
200 bayt
Ana görsel dizini
Strip Data
Değişken uzunluk
Görselin piksel verisi
EXIF IFD
500 bayt
EXIF alt dizini
GPS IFD
100 bayt
GPS alt dizini

TIFF başlığı

Bayt sırası (II = little-endian)
Sihirli sayı (42)
İlk IFD offset'i
OffsetHexASCII
0000
49492A0008000000
II*.....

Bayt sırası

49 49 (II)

Intel:Little-endian (en düşük değerlikli bayt önce)

4D 4D (MM)

Motorola:Big-endian (en yüksek değerlikli bayt önce)

IFD yapısı

IFD, Image File Directory'nin kısaltması ama sen onu bir içindekiler tablosu gibi düşün. Her biri bir veri parçasına işaret eden düz bir etiket listesi. İşin akıllıca tarafı, IFD'lerin başka IFD'lere işaret ederek ağaç benzeri bir yapı kurabilmesi.

IFD düzeni

2 baytGirdi sayısı (etiket adedi)
12 × N baytEtiket girdileri (her biri 12 bayt)
4 baytSonraki IFD offset'i (yoksa 0)

Etiket girdisinin yapısı (12 bayt)

Etiket IDTürAdetDeğer/offset
2 bayt2 bayt4 bayt4 bayt

Veri 4 bayta sığıyorsa doğrudan değer alanında saklanır. Sığmıyorsa değer alanı, verinin bulunduğu yere işaret eden bir offset taşır.

Etiket türleri

TIFF sıkı tiplidir. Her etiket sadece neyi içerdiğini değil, baytların nasıl yorumlanacağını da belirtir. TIFF'i doğru çözümlemek için tür sistemini anlaman gerekmesinin sebebi de bu.

IDAdBoyutAçıklama
1BYTE1İşaretsiz 8 bit tamsayı
2ASCII1Null ile biten dizge (8 bit)
3SHORT2İşaretsiz 16 bit tamsayı
4LONG4İşaretsiz 32 bit tamsayı
5RATIONAL8İki LONG: pay/payda
6SBYTE1İşaretli 8 bit tamsayı
7UNDEFINED1Ham baytlar (ikili veri)
8SSHORT2İşaretli 16 bit tamsayı
9SLONG4İşaretli 32 bit tamsayı
10SRATIONAL8İki SLONG: işaretli pay/payda
11FLOAT4IEEE 32 bit kayan noktalı sayı
12DOUBLE8IEEE 64 bit çift duyarlıklı sayı
13IFD4İç içe IFD'ye işaretçi

Değer saklama kuralı

boyut × adet ≤ 4 baytsa değer doğrudan 4 baytlık değer alanında saklanır. Değilse bu alan, verinin dosyanın neresinde durduğunu gösteren bir offset taşır.

IFD offset hesapları

TIFF çözümlemenin en zor kısmı offset zincirini takip etmek. Her şey dosyanın başlangıcına göre hesaplanır ve dosyanın içinde bir sürü kez ileri geri zıplarsın. Matematiği şöyle işliyor:

// IFD0 konumu
IFD0_offset = bytes[4:8] // TIFF başlığından
// Sonraki IFD konumu (örneğin küçük resim için IFD1)
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
// Alt IFD konumu (EXIF, GPS)
subIFD_offset = tag_value // İşaretçi etiketinden (0x8769, 0x8825)

Önemli etiketler

Görsel verisi etiketleri (korunur)

0x0100:ImageWidth
0x0101:ImageLength
0x0102:BitsPerSample
0x0103:Compression
0x0111:StripOffsets
0x0117:StripByteCounts

Meta veri etiketleri (silinir)

0x010F:Make (kameranın markası)
0x0110:Model (kameranın modeli)
0x0132:DateTime
0x013B:Artist
0x8298:Copyright
0x9003:DateTimeOriginal

İşaretçi etiketleri (alt IFD'ler)

0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0xA005:InteroperabilityIFDPointer

Alt IFD'ler

Ana IFD (IFD0) çoğu zaman alt dizinlere referans veren "işaretçi etiketleri" içerir. EXIF, GPS ve diğer meta veriler böylece mantıklı gruplara ayrılır, ana IFD de derli toplu kalır.

EXIF alt IFD'si

Kameraya özel meta verileri içerir: pozlama, diyafram, ISO, odak uzaklığı, flaş, beyaz dengesi ve daha fazlası.

GPS alt IFD'si

Konum verilerini içerir: enlem, boylam, rakım, zaman damgası, uydular, hız, yön. Ciddi bir gizlilik sorunu.

Üretici notları

Kameraya özel tescilli veriler. Biçimi üreticiden üreticiye değişir. Seri numaraları, ürün yazılımı sürümü ve özel ayarlar barındırabilir.

PicScrub TIFF dosyalarını nasıl işliyor

1

Başlığı çözümle

Bayt sırasını (II/MM) belirle ve ilk IFD'yi bul

2

Etiket beyaz listesini oluştur

Görselin görüntülenmesi için gerekli etiketleri belirle

3

IFD girdilerini ayıkla

Meta veri etiketlerini sil, alt IFD işaretçilerini sıfırla

4

Dosyayı yeniden yaz

TIFF dosyasını temiz IFD'ler ve kopyalanan görsel verisiyle yeniden kur

Offset'lerin yeniden hesaplanması

TIFF dosyaları offset'leri bolca kullanır. Meta veriler silindiğinde PicScrub, dosyanın bütünlüğü korunsun diye bütün offset'leri yeniden hesaplamak zorundadır.