Format GIF
Graphics Interchange Format
Struktur berbasis blok
GIF termasuk format yang umurnya jauh melewati perkiraan siapa pun. Dibuat CompuServe pada 1987, sampai sekarang dia masih ada di mana-mana, terutama karena dukungan animasinya.
Formatnya memakai struktur berbasis blok yang terasa menyegarkan karena sangat lugas dibanding format modern. Sebuah header, beberapa deskriptor, tabel warna, data gambarnya, lalu satu byte penutup yang bilang "sudah, selesai."
Struktur file GIF
Header GIF
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Beda antar versi
Spesifikasi awal. Belum ada blok ekstensi.
Menambahkan ekstensi, animasi, dan transparansi.
Blok ekstensi
GIF89a (revisi tahun 1989) menambahkan blok ekstensi, dan dari situlah GIF mendapat dukungan animasi. Semua blok ekstensi diawali 0x21 lalu satu byte tipe, jadi gampang dikenali saat kamu menyusuri isi file. Sebagian mau kami pertahankan (pengaturan waktu animasi), sebagian lagi mau kami buang (komentar).
Graphic Control Extension (0xF9)
Mengatur waktu animasi, transparansi, dan metode disposal. Selalu mendahului tiap deskriptor gambar di GIF beranimasi. Selalu dipertahankan.
Comment Extension (0xFE)
Komentar berupa teks biasa. Bisa memuat informasi apa saja, termasuk pembuat, tanggal pembuatan, software, atau catatan pribadi. Dihapus PicScrub.
Application Extension (0xFF)
Data khusus aplikasi. Yang paling penting: NETSCAPE2.0 untuk pengulangan animasi. Bisa juga memuat metadata XMP.
Plain Text Extension (0x01)
Jarang dipakai. Menampilkan teks memakai tabel warna GIF. Kebanyakan software modern mengabaikannya.
Ekstensi aplikasi
NETSCAPE2.0:Pengulangan animasi
Mengatur berapa kali GIF beranimasi berulang. Nilai 0 berarti berulang tanpa henti.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub mempertahankan NETSCAPE2.0 supaya animasinya tetap berjalan seperti semula.
XMP Data:Extensible Metadata Platform
Identifier aplikasi: XMP DataXMP. Berisi metadata XMP/RDF lengkap dalam format XML.
PicScrub menghapus ekstensi aplikasi XMP.
Menjaga animasinya tetap utuh
Bagian yang tricky di GIF adalah membedakan data animasi (yang harus dipertahankan) dari metadata (yang mau dibuang). Keduanya sama-sama tinggal di blok ekstensi, jadi kami tidak bisa asal membuang semua ekstensinya.
Dipertahankan untuk animasi
- • Jumlah pengulangan NETSCAPE2.0
- • Graphic Control Extension
- • Jeda antar frame
- • Metode disposal
- • Indeks transparansi
- • Tabel warna lokal
Dihapus
- • Ekstensi komentar
- • Blok aplikasi XMP
- • Blok aplikasi yang tidak dikenal
- • Ekstensi teks biasa
Bagaimana PicScrub memproses GIF
Memvalidasi header
Mengecek signature GIF87a atau GIF89a
Menyalin data header
Mempertahankan LSD dan tabel warna global apa adanya
Menyaring ekstensi
Menyimpan NETSCAPE2.0 dan Graphic Control, membuang Comment dan XMP
Menjaga data gambar
Menyalin semua deskriptor gambar, LCT, dan data LZW apa adanya
Menulis penutup
Menutup file dengan byte trailer 0x3B
Kompresi LZW
Sedikit catatan soal data gambar GIF: dia memakai kompresi LZW, yang dulu sempat dipatenkan sampai 2004 (dan bikin drama panjang di era 90-an). PicScrub sama sekali tidak menyentuh data terkompresi itu. Kami menyalinnya byte demi byte, jadi tidak ada kualitas yang hilang.
Kenapa ini penting
Dengan mempertahankan data LZW aslinya, PicScrub memastikan:
- • Tidak ada kualitas yang hilang (gambarnya utuh sampai level bit)
- • Pemrosesan cepat (tanpa siklus dekode dan enkode ulang)
- • Ukuran data gambarnya tetap sama
Batasan metadata di GIF
Kabar baik soal GIF: umurnya lebih tua dari standar EXIF, jadi tidak ada koordinat GPS atau info kamera yang perlu dikhawatirkan. Urusan metadatanya jauh lebih sederhana.
Apa yang bisa bocor
Risiko privasi GIF relatif kecil dibanding JPEG:
- • Ekstensi komentar (kadang berisi catatan pembuatnya)
- • Metadata XMP (jarang, tapi mungkin ada)
- • Identitas software di blok aplikasi