PicScrub logoPicScrub
Kembali ke daftar format

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
LSD
GCT
Extensions
Image Data
Trailer
Header
6 byte
GIF87a atau GIF89a
LSD
7 byte
Logical Screen Descriptor
GCT
768 byte
Tabel warna global (opsional)
Extensions
100 byte
Blok ekstensi (metadata)
Image Data
Panjang bervariasi
Deskriptor gambar + data LZW
Trailer
1 byte
Penutup 0x3B

Header GIF

Signature GIF
Versi (89a)
Lebar (640)
Tinggi (480)
Packed field
Indeks warna latar
Rasio aspek piksel
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Beda antar versi

GIF87a

Spesifikasi awal. Belum ada blok ekstensi.

GIF89a

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.

21 F9 04 [disposal] [delay] [transparent] 00

Comment Extension (0xFE)

Komentar berupa teks biasa. Bisa memuat informasi apa saja, termasuk pembuat, tanggal pembuatan, software, atau catatan pribadi. Dihapus PicScrub.

21 FE [size] [comment data...] 00

Application Extension (0xFF)

Data khusus aplikasi. Yang paling penting: NETSCAPE2.0 untuk pengulangan animasi. Bisa juga memuat metadata XMP.

21 FF 0B [app identifier] [auth code] [data...] 00

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.

Pembuka ekstensi
Ukuran blok (11)
NETSCAPE2.0
Ukuran sub-blok
ID sub-blok
Jumlah pengulangan
Penutup
OffsetHexASCII
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

1

Memvalidasi header

Mengecek signature GIF87a atau GIF89a

2

Menyalin data header

Mempertahankan LSD dan tabel warna global apa adanya

3

Menyaring ekstensi

Menyimpan NETSCAPE2.0 dan Graphic Control, membuang Comment dan XMP

4

Menjaga data gambar

Menyalin semua deskriptor gambar, LCT, dan data LZW apa adanya

5

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