PicScrub logoPicScrub
Formatlara dön

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ı)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 bayt
Kapsayıcı imzası
Size
4 bayt
Dosya boyutu - 8
WEBP
4 bayt
Format tanımlayıcısı
VP8X
18 bayt
Genişletilmiş özellik bayrakları
EXIF/XMP
100 bayt
Meta veri chunk'ları
VP8/VP8L
Değişken uzunluk
Görsel verisi

WebP başlığı

RIFF imzası
Dosya boyutu - 8
WEBP tanımlayıcısı
VP8X chunk türü
VP8X boyutu (10)
VP8X bayrakları
Tuval boyutu
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

RIFF chunk yapısı

FourCCBoyutVeri
4 bayt4 bayt (LE)Değişken

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

Bit 0Ayrılmış (0 olmalı)
Bit 1Animasyon bayrağı
Bit 2XMP meta verisi var
Bit 3EXIF meta verisi var
Bit 4Alfa kanalı var
Bit 5ICC profili var

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

1

RIFF başlığını doğrula

RIFF....WEBP imzasını kontrol et

2

Chunk'ları çözümle

Bütün RIFF chunk'larını dolaş, FourCC ve boyut bilgisini oku

3

Meta veri chunk'larını sil

Çıktıyı yazarken EXIF ve XMP chunk'larını atla

4

VP8X bayraklarını güncelle

VP8X chunk'ındaki EXIF/XMP bayrak bitlerini temizle

5

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.

RIFF + WEBP + VP8/VP8L

Genişletilmiş WebP

Meta veriyi, alfayı ve animasyonu mümkün kılan bir VP8X chunk'ı vardır.

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