PicScrub logoPicScrub
Kembali ke daftar format

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)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 byte
Signature kontainer
Size
4 byte
Ukuran file - 8
WEBP
4 byte
Identifier format
VP8X
18 byte
Penanda fitur tambahan
EXIF/XMP
100 byte
Chunk metadata
VP8/VP8L
Panjang bervariasi
Data gambar

Header WebP

Signature RIFF
Ukuran file - 8
Identifier WEBP
Tipe chunk VP8X
Ukuran VP8X (10)
Penanda VP8X
Ukuran kanvas
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Struktur chunk RIFF

FourCCUkuranData
4 byte4 byte (LE)Bervariasi

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

Bit 0Dicadangkan (harus 0)
Bit 1Penanda animasi
Bit 2Ada metadata XMP
Bit 3Ada metadata EXIF
Bit 4Ada kanal alfa
Bit 5Ada profil ICC

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

1

Memvalidasi header RIFF

Mengecek signature RIFF....WEBP

2

Membaca chunk

Menyusuri semua chunk RIFF sambil membaca FourCC dan ukurannya

3

Menghapus chunk metadata

Melewati chunk EXIF dan XMP saat menulis hasilnya

4

Memperbarui penanda VP8X

Mengosongkan bit penanda EXIF/XMP di chunk VP8X

5

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.

RIFF + WEBP + VP8/VP8L

WebP extended

Punya chunk VP8X yang membuka metadata, alfa, dan animasi.

RIFF + WEBP + VP8X + [ICCP] + [ANIM] + [EXIF] + [XMP] + VP8/VP8L