Format HEIC
High Efficiency Image Container
Kontainer ISOBMFF
Kalau kamu pernah mengutak-atik file video MP4, HEIC akan terasa akrab. Apple memilih ISO Base Media File Format (ISOBMFF) sebagai kontainer HEIC, artinya DNA-nya lebih dekat ke format video daripada ke format gambar tradisional seperti JPEG atau PNG.
Formatnya tersusun dari "box" bersarang (kadang disebut atom) dengan kode tipe 4 karakter. Rancangannya ternyata cukup elegan: dia memungkinkan hierarki data yang rumit tapi tetap relatif mudah dibaca begitu kamu paham dasarnya.
Struktur file HEIC
Header HEIC (box ftyp)
| Offset | Hex | ASCII | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 000000186674797068656963 | ....ftypheic | |||||||||||
| 000C | 000000006D69663168656963 | ....mif1heic | |||||||||||
Struktur sebuah box
Kalau ukurannya = 1, ada ukuran diperluas 8 byte setelah tipenya. Kalau ukurannya = 0, box-nya memanjang sampai akhir file.
Box yang penting
Hierarki box di file HEIC bisa dalam sekali. Berbeda dari JPEG yang metadatanya duduk di posisi yang mudah ditebak, HEIC mengubur metadatanya beberapa lapis di dalam struktur bersarang. Beginilah bagian-bagian utamanya saling terhubung.
ftyp:Tipe file
Box pertama di dalam file. Berisi brand utama dan brand yang kompatibel. Wajib ada untuk mengenali formatnya.
heic heix hevc hevx heim heis hevm hevs mif1 msf1meta:Wadah metadata
Berisi semua metadata, termasuk lokasi item, propertinya, dan kaitan antar keduanya. Di sinilah data EXIF/XMP tinggal.
meta (wadah metadata) ├── hdlr (referensi handler) ├── pitm (ID item utama) ├── iloc (lokasi item → offset ke dalam mdat) │ └── entri [item_id, offset, panjang] ├── iinf (info item → mencari item 'Exif') │ └── entri infe beserta tipe itemnya ├── iprp (properti item) │ ├── ipco (wadah properti) │ │ ├── hvcC (konfigurasi dekoder HEVC) │ │ ├── ispe (ukuran gambar) │ │ ├── colr (profil ICC, offset+12) │ │ ├── Exif (EXIF dalam format TIFF) │ │ └── pixi (informasi piksel) │ └── ipma (kaitan properti) └── iref (referensi item)
mdat:Data media
Berisi data gambar yang sudah dikodekan dengan HEVC. Box iloc di dalam meta menyediakan offsetnya ke dalam mdat.
Metadata di dalam HEIC
Kalau kamu terbiasa dengan marker APP milik JPEG, HEIC memakai pendekatan yang berbeda. Alih-alih marker berurutan di awal file, metadatanya tinggal sebagai "properti item" di dalam box meta. Data EXIF-nya sendiri tetap dalam format TIFF yang familier, tapi untuk menemukannya kamu harus menyusuri hierarki box-nya dulu.
Properti EXIF
Disimpan di ipco (wadah properti item) dengan tipe "Exif". Berisi data EXIF standar dalam format TIFF, sama seperti di JPEG.
Properti XMP
Metadata berbasis XML yang disimpan sebagai properti bertipe "mime" dengan content-type "application/rdf+xml".
Profil ICC
Profil warna yang disimpan sebagai box "colr" bertipe "prof".
Kenapa offsetnya penting
Box iloc berisi offset byte yang persis, menunjuk ke dalam mdat. Kalau ada ukuran box yang berubah (misalnya karena metadatanya dibuang), offset itu harus dihitung ulang atau filenya jadi tidak terbaca.
Anonimisasi tanpa kehilangan kualitas
Di sinilah HEIC jadi rumit. Formatnya dirancang untuk menyimpan video dan gambar secara efisien, bukan untuk mempermudah pengubahan metadata.
Tantangannya
Struktur HEIC yang berbasis offset membuat pembuangan byte jadi berisiko. Box iloc berisi offset byte yang persis, menunjuk ke dalam mdat. Kalau kamu membuang satu box saja, offset-offset itu jadi salah, dan gambarnya tidak bisa dibuka lagi.
Pendekatan menimpa dengan nol
Alih-alih membuang box metadatanya, PicScrub menimpa isinya dengan nol sambil menjaga struktur dan ukuran box-nya tetap sama.
Sesudah: [Exif][0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00...]
Kenapa ditimpa nol?
- • Keutuhan file terjaga:semua offsetnya tetap valid
- • Tanpa kompresi ulang:data gambarnya tidak disentuh
- • Metadatanya hancur:nol tidak membawa informasi apa pun
- • Bisa dikembalikan?:tidak, data yang sudah ditimpa hilang selamanya
Bagaimana PicScrub memproses HEIC
Membaca struktur box
Menyusuri ftyp dan meta secara rekursif, lalu mengenali semua box-nya
Menemukan metadatanya
Mencari properti Exif dan XMP di dalam wadah ipco
Menolkan isi metadatanya
Menimpa isi box metadata dengan nol
Menjaga strukturnya
Membiarkan header box, ukuran, dan semua offsetnya apa adanya
Soal ukuran file
Karena PicScrub menimpa dengan nol alih-alih membuang, ukuran file hasilnya akan sama dengan file aslinya. Ruang metadatanya tetap ada, cuma sekarang isinya nol semua.
HEIC, HEIF, dan AVIF
Penamaannya membingungkan, jadi mari kita luruskan. HEIF adalah format kontainernya, sedangkan HEIC dan AVIF menunjukkan codec apa yang dipakai untuk mengompres gambar di dalam kontainer itu.
| Format | Kontainer | Codec | Dipakai oleh |
|---|---|---|---|
| HEIC | HEIF | HEVC (H.265) | Perangkat Apple |
| HEIF | HEIF | Bermacam-macam | Kontainer umum |
| AVIF | HEIF | AV1 | Web (bebas royalti) |
Ketiganya memakai struktur kontainer ISOBMFF/HEIF yang sama, jadi pendekatan PicScrub berlaku untuk semuanya.