PicScrub logoPicScrub
Kembali ke daftar format

Format TIFF

Tagged Image File Format

Struktur header

TIFF adalah kakek moyangnya metadata gambar. Saat kamu melihat data EXIF di sebuah JPEG, itu sebenarnya struktur TIFF yang tertanam di dalam filenya. Memahami TIFF berarti memahami cara kerja hampir semua metadata gambar.

Formatnya dibuka dengan header 8 byte yang memberi tahu dua hal penting: urutan bytenya (Intel atau Motorola) dan di mana IFD pertamanya berada. Setelah itu, kerjanya tinggal mengikuti pointer.

Struktur file TIFF

Header
IFD0
Strip Data
EXIF IFD
GPS IFD
Header
8 byte
Urutan byte + angka ajaib + offset IFD
IFD0
200 byte
Direktori gambar utama
Strip Data
Panjang bervariasi
Data piksel gambarnya
EXIF IFD
500 byte
Subdirektori EXIF
GPS IFD
100 byte
Subdirektori GPS

Header TIFF

Urutan byte (II = little-endian)
Angka ajaib (42)
Offset IFD pertama
OffsetHexASCII
0000
49492A0008000000
II*.....

Urutan byte

49 49 (II)

Intel:little-endian (byte paling tidak signifikan lebih dulu)

4D 4D (MM)

Motorola:big-endian (byte paling signifikan lebih dulu)

Struktur IFD

IFD singkatan dari Image File Directory, tapi bayangkan saja dia sebagai daftar isi. Isinya daftar tag yang datar, masing-masing menunjuk ke sepotong data. Bagian cerdiknya, IFD bisa menunjuk ke IFD lain, sehingga terbentuk struktur pohon.

Susunan IFD

2 byteJumlah entri (banyaknya tag)
12 × N byteEntri tag (masing-masing 12 byte)
4 byteOffset IFD berikutnya (0 kalau tidak ada)

Struktur satu entri tag (12 byte)

ID tagTipeJumlahNilai/offset
2 byte2 byte4 byte4 byte

Kalau datanya muat dalam 4 byte, nilainya disimpan langsung di kolom nilai. Kalau tidak, kolom itu berisi offset menuju datanya.

Tipe tag

TIFF punya sistem tipe yang ketat. Tiap tag tidak hanya menyebut apa isinya, tapi juga bagaimana bytenya harus dibaca. Karena itu kamu perlu paham sistem tipenya supaya bisa membaca TIFF dengan benar.

IDNamaUkuranKeterangan
1BYTE1Bilangan bulat 8 bit tanpa tanda
2ASCII1String berakhiran null (8 bit)
3SHORT2Bilangan bulat 16 bit tanpa tanda
4LONG4Bilangan bulat 32 bit tanpa tanda
5RATIONAL8Dua LONG: pembilang/penyebut
6SBYTE1Bilangan bulat 8 bit bertanda
7UNDEFINED1Byte mentah (data biner)
8SSHORT2Bilangan bulat 16 bit bertanda
9SLONG4Bilangan bulat 32 bit bertanda
10SRATIONAL8Dua SLONG: pembilang/penyebut bertanda
11FLOAT4Float 32 bit IEEE
12DOUBLE8Double 64 bit IEEE
13IFD4Pointer ke IFD bersarang

Aturan penyimpanan nilai

Kalau ukuran × jumlah ≤ 4 byte, nilainya disimpan langsung di kolom nilai yang 4 byte itu. Kalau tidak, kolom tersebut berisi offset yang menunjuk ke tempat datanya disimpan di dalam file.

Menghitung offset IFD

Bagian tersulit saat membaca TIFF adalah mengikuti rantai offsetnya. Semuanya relatif terhadap awal file, dan kamu bakal melompat ke sana-sini cukup sering. Beginilah hitungannya:

// Letak IFD0
IFD0_offset = bytes[4:8] // Dari header TIFF
// Letak IFD berikutnya (misalnya IFD1 untuk thumbnail)
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
// Letak SubIFD (EXIF, GPS)
subIFD_offset = tag_value // Dari tag pointer (0x8769, 0x8825)

Tag yang penting

Tag data gambar (dipertahankan)

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

Tag metadata (dihapus)

0x010F:Make (merek kamera)
0x0110:Model (model kamera)
0x0132:DateTime
0x013B:Artist
0x8298:Copyright
0x9003:DateTimeOriginal

Tag pointer (sub-IFD)

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

SubIFD

IFD utama (IFD0) sering memuat "tag pointer" yang merujuk ke subdirektori. Begitulah caranya EXIF, GPS, dan metadata lainnya dikelompokkan secara logis sambil menjaga IFD utamanya tetap rapi.

SubIFD EXIF

Berisi metadata khas kamera: eksposur, bukaan, ISO, panjang fokus, lampu kilat, white balance, dan lainnya.

SubIFD GPS

Berisi data geolokasi: garis lintang, garis bujur, ketinggian, cap waktu, jumlah satelit, kecepatan, dan arah. Masalah privasi yang besar.

Maker Note

Data kamera milik pabrikan. Formatnya beda-beda tiap merek. Bisa memuat nomor seri, versi firmware, dan pengaturan kustom.

Bagaimana PicScrub memproses TIFF

1

Membaca header

Menentukan urutan byte (II/MM) dan mencari IFD pertama

2

Menyusun daftar tag aman

Mengenali tag mana yang memang dibutuhkan untuk menampilkan gambar

3

Menyaring entri IFD

Membuang tag metadata dan menolkan pointer SubIFD-nya

4

Menulis ulang file

Menyusun ulang TIFF dengan IFD yang bersih dan data gambar yang disalin apa adanya

Perhitungan ulang offset

File TIFF sangat bergantung pada offset. Begitu metadatanya dihapus, PicScrub harus menghitung ulang semua offsetnya supaya filenya tetap utuh.