Format WebP
Format gambar modern buatan Google
Kontainer RIFF
Google tidak membuat kontainer baru untuk WebP. Mereka memilih RIFF, format yang sama yang sudah membawa audio WAV dan video AVI sejak awal 90-an. Kalau kamu pernah membaca isi file WAV, kamu sudah paham cara kerja WebP di level kontainernya.
Formatnya memakai chunk bersarang dengan identifier 4 karakter (disebut kode FourCC). Rancangannya sederhana dan tangguh, dan terbukti bertahan sampai sekarang.
Struktur file WebP (kontainer RIFF)
Header WebP
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 52494646241A00005745425056503858 | RIFF$...WEBPVP8X | |||||||||||||||
| 0010 | 0A00000010000000FF0000FF00000000 | .............. | |||||||||||||||
Struktur chunk RIFF
Catatan: data chunk digenapkan ke panjang genap dengan byte null kalau diperlukan.
Offset penting
- • Awal sub-chunk: 12 byte (setelah RIFF + ukuran + WEBP)
- • Header chunk: 8 byte (FourCC 4 byte + ukuran 4 byte)
- • Offset kolom ukuran: +4 dari awal chunk (little-endian)
Chunk gambar
WebP sebenarnya tiga format dalam satu: lossy (VP8), lossless (VP8L), dan extended (VP8X). Tipe chunk-nya menunjukkan metode kompresi mana yang dipakai.
VP8:Kompresi lossy
Memakai codec video VP8 untuk kompresi. Rasio kualitas dan ukurannya mirip JPEG. File WebP sederhana hanya berisi chunk ini.
VP8L:Kompresi lossless
Kompresi tanpa kehilangan kualitas dengan prediksi, transformasi warna, dan pengodean entropi. Biasanya 25-34% lebih kecil dari PNG.
VP8X:Format extended
Menandakan adanya fitur opsional: animasi, kanal alfa, profil ICC, EXIF, atau XMP. Wajib ada kalau salah satu fitur tersebut dipakai.
ALPH:Kanal alfa
Data kanal alfa yang terpisah. Bisa dikompresi secara lossless atau lossy, terpisah dari data warnanya.
ANIM/ANMF:Animasi
ANIM berisi parameter animasi secara global. Chunk ANMF berisi tiap frame animasi beserta info waktunya.
Chunk metadata
Berbeda dari file WebP sederhana yang isinya cuma data gambar, file WebP extended bisa membawa metadata. Kabar baiknya, chunk-chunk itu terpisah rapi dari data gambarnya, jadi gampang dikenali dan dihapus.
EXIF:Metadata EXIF
Berisi data EXIF dalam format yang sama dengan JPEG (struktur TIFF mentah). Termasuk info kamera, koordinat GPS, cap waktu, dan thumbnail. Masalah privasi yang utama.
XMP:Metadata XMP
Metadata berbasis XML. Bisa menggandakan data EXIF, ditambah riwayat penyuntingan, info software, dan kolom kustom.
ICCP:Profil warna ICC
Profil warna ICC untuk manajemen warna. PicScrub mempertahankannya secara bawaan supaya warnanya tetap akurat.
Penanda VP8X
Chunk VP8X berfungsi seperti daftar isi, memberi tahu dekoder apa saja yang bakal ditemui di dalam file. Saat kami membuang chunk metadata, penanda ini juga harus diperbarui, kalau tidak dekodernya akan mencari data yang sudah tidak ada.
Bit penanda
Kenapa penandanya penting
Saat PicScrub menghapus chunk EXIF/XMP, penanda VP8X juga harus diperbarui supaya mencerminkan hilangnya data itu. Kalau tidak, dekoder bisa mencari data yang sudah tidak ada.
Bagaimana PicScrub memproses WebP
Memvalidasi header RIFF
Mengecek signature RIFF....WEBP
Membaca chunk
Menyusuri semua chunk RIFF sambil membaca FourCC dan ukurannya
Menghapus chunk metadata
Melewati chunk EXIF dan XMP saat menulis hasilnya
Memperbarui penanda VP8X
Mengosongkan bit penanda EXIF/XMP di chunk VP8X
Menghitung ulang ukuran file
Memperbarui header RIFF dengan ukuran file yang baru
Dipertahankan
- • Data gambar VP8/VP8L
- • Kanal alfa ALPH
- • Data animasi ANIM/ANMF
- • Profil warna ICCP (opsional)
Dihapus
- • Metadata EXIF
- • Metadata XMP
WebP sederhana versus extended
Kalau sebuah file WebP tidak punya chunk VP8X, berarti dia WebP "sederhana": cuma pembungkus RIFF di sekitar satu chunk VP8 atau VP8L. File WebP sederhana tidak mungkin memuat metadata, jadi kalau kamu peduli privasi, format inilah yang paling ideal.
WebP sederhana
Hanya berisi chunk VP8 atau VP8L. Tidak mungkin ada metadata.
WebP extended
Punya chunk VP8X yang membuka metadata, alfa, dan animasi.