WebP formatı
Google'ın modern görsel formatı
RIFF kapsayıcısı
Google, WebP için yeni bir kapsayıcı icat etmedi. 90'ların başından beri WAV seslerini ve AVI videolarını taşıyan RIFF'i tercih etti. Daha önce bir WAV dosyası çözümlediysen, WebP'nin kapsayıcı düzeyinde nasıl çalıştığını zaten biliyorsun demektir.
Format, dört karakterlik tanımlayıcıları (FourCC kodları) olan iç içe chunk'lar kullanıyor. Zamana meydan okumuş, basit ve sağlam bir tasarım.
WebP dosya yapısı (RIFF kapsayıcısı)
WebP başlığı
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 52494646241A00005745425056503858 | RIFF$...WEBPVP8X | |||||||||||||||
| 0010 | 0A00000010000000FF0000FF00000000 | .............. | |||||||||||||||
RIFF chunk yapısı
Not: Chunk verisi, gerekiyorsa bir null baytla çift uzunluğa tamamlanır.
Önemli offset'ler
- • Alt chunk başlangıcı: 12 bayt (RIFF + boyut + WEBP sonrası)
- • Chunk başlığı: 8 bayt (4 baytlık FourCC + 4 baytlık boyut)
- • Boyut alanının offset'i: chunk başlangıcından +4 (little-endian)
Görsel chunk'ları
WebP aslında üçü bir arada bir format: kayıplı (VP8), kayıpsız (VP8L) ve genişletilmiş (VP8X). Hangi sıkıştırma yönteminin kullanıldığını chunk türünden anlarsın.
VP8:Kayıplı sıkıştırma
Sıkıştırma için VP8 video kodeğini kullanır. Kalite/boyut oranı JPEG'e benzer. Basit WebP dosyalarında yalnızca bu chunk bulunur.
VP8L:Kayıpsız sıkıştırma
Tahmin, renk dönüşümü ve entropi kodlamasıyla kayıpsız sıkıştırma. Genellikle PNG'den %25-34 daha küçük.
VP8X:Genişletilmiş format
İsteğe bağlı özelliklerin varlığını belirtir: animasyon, alfa kanalı, ICC profili, EXIF ya da XMP. Bu özelliklerden herhangi biri varsa zorunludur.
ALPH:Alfa kanalı
Ayrı alfa kanalı verisi. Renk verisinden bağımsız olarak kayıplı ya da kayıpsız sıkıştırılabilir.
ANIM/ANMF:Animasyon
ANIM genel animasyon parametrelerini içerir. ANMF chunk'ları ise zamanlama bilgisiyle birlikte tek tek animasyon karelerini taşır.
Meta veri chunk'ları
Yalnızca görsel verisi taşıyan basit WebP dosyalarının aksine, genişletilmiş WebP dosyaları meta veri taşıyabilir. İyi haber şu: bu chunk'lar görsel verisinden tertemiz ayrılmış durumda, yani tespit etmesi ve silmesi kolay.
EXIF:EXIF meta verisi
EXIF verisini JPEG'dekiyle aynı biçimde (ham TIFF yapısı) içerir. Kamera bilgileri, GPS koordinatları, tarih ve saat ile küçük resimler barındırır. Gizlilik açısından bir numaralı sorun.
XMP:XMP meta verisi
XML tabanlı meta veri. EXIF verilerini tekrarlayabilir, ayrıca düzenleme geçmişi, yazılım bilgisi ve özel alanlar içerebilir.
ICCP:ICC renk profili
Renk yönetimi için ICC renk profili. PicScrub renkler bozulmasın diye bunu varsayılan olarak korur.
VP8X bayrakları
VP8X chunk'ı bir içindekiler tablosu gibi çalışır, çözücülere dosyada neyi bekleyeceklerini söyler. Meta veri chunk'larını sildiğimizde bu bayrakları da güncellememiz gerekiyor, yoksa çözücü orada olmayan bir veriyi arar.
Bayrak bitleri
Bayraklar neden önemli
PicScrub, EXIF/XMP chunk'larını sildiğinde bunların artık orada olmadığını yansıtmak için VP8X bayraklarını da güncellemek zorunda. Aksi hâlde çözücüler var olmayan bir veriyi bekleyebilir.
PicScrub WebP dosyalarını nasıl işliyor
RIFF başlığını doğrula
RIFF....WEBP imzasını kontrol et
Chunk'ları çözümle
Bütün RIFF chunk'larını dolaş, FourCC ve boyut bilgisini oku
Meta veri chunk'larını sil
Çıktıyı yazarken EXIF ve XMP chunk'larını atla
VP8X bayraklarını güncelle
VP8X chunk'ındaki EXIF/XMP bayrak bitlerini temizle
Dosya boyutunu yeniden hesapla
RIFF başlığını yeni toplam dosya boyutuyla güncelle
Korunanlar
- • VP8/VP8L görsel verisi
- • ALPH alfa kanalı
- • ANIM/ANMF animasyon verisi
- • ICCP renk profili (isteğe bağlı)
Silinenler
- • EXIF meta verisi
- • XMP meta verisi
Basit WebP ve genişletilmiş WebP
Bir WebP dosyasında VP8X chunk'ı yoksa o dosya "basit" bir WebP'dir: tek bir VP8 ya da VP8L chunk'ının etrafına sarılmış bir RIFF katmanından ibarettir. Basit WebP dosyalarında meta veri bulunması mümkün değil, yani gizliliğine düşkünsen bunlar biçilmiş kaftan.
Basit WebP
Yalnızca VP8 ya da VP8L chunk'ı içerir. Meta veri mümkün değil.
Genişletilmiş WebP
Meta veriyi, alfayı ve animasyonu mümkün kılan bir VP8X chunk'ı vardır.