PicScrub logoPicScrub
Kembali ke daftar format

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

ftyp
meta
mdat
ftyp
24 byte
Tipe file dan brand-nya
meta
1000 byte
Wadah metadata
mdat
Panjang bervariasi
Data media (HEVC)

Header HEIC (box ftyp)

Ukuran box (24)
Tipe box (ftyp)
Brand utama (heic)
Versi minor
Kompatibel (mif1)
Kompatibel (heic)
OffsetHexASCII
0000
000000186674797068656963
....ftypheic
000C
000000006D69663168656963
....mif1heic

Struktur sebuah box

UkuranTipeData
4 byte (BE)4 byteUkuran - 8

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.

Brand yang kompatibel: heic heix hevc hevx heim heis hevm hevs mif1 msf1

meta: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.

Sebelum: [Exif][Data GPS: 37.7749, -122.4194][Kamera: iPhone]
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

1

Membaca struktur box

Menyusuri ftyp dan meta secara rekursif, lalu mengenali semua box-nya

2

Menemukan metadatanya

Mencari properti Exif dan XMP di dalam wadah ipco

3

Menolkan isi metadatanya

Menimpa isi box metadata dengan nol

4

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.

Masuk: 2,5 MB (dengan EXIF 50 KB)
Keluar: 2,5 MB (50 KB berisi nol)

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.

FormatKontainerCodecDipakai oleh
HEICHEIFHEVC (H.265)Perangkat Apple
HEIFHEIFBermacam-macamKontainer umum
AVIFHEIFAV1Web (bebas royalti)

Ketiganya memakai struktur kontainer ISOBMFF/HEIF yang sama, jadi pendekatan PicScrub berlaku untuk semuanya.