WebP Kapsayıcı Özelliği

Giriş

WebP, (i) VP8 anahtar çerçevesi kodlamasını kullanarak veya (ii) WebP kayıpsız kodlama ile sıkıştırabilir. Bu kodlama şemaları, JPEG, Flash veya Drive gibi eski biçimlerden GIF ve PNG. Ağ üzerinden hızlı görüntü aktarımı ( örneğin web siteleri için). WebP biçiminde özellik denkliği (renk profili, meta veriler, animasyon vb.) diğer biçimlerle de uyumlu şekilde çalışır. Bu belgede şunlar açıklanmaktadır: yapısına dikkat edin.

WebP kapsayıcısı (yani WebP için RIFF kapsayıcısı) özellik desteğine izin verir WebP'nin (yani, WebP'nin tek bir kod içeren VP8 animasyon karesi olarak kodlanmış resim) WebP kapsayıcısı, şunlar için destek:

  • Kayıpsız Sıkıştırma: Bir resim WebP Kayıpsız Biçim.

  • Meta veri: Bir resmin, Değiştirilebilir Resim Dosyasında depolanan meta verileri olabilir Biçim (Exif) veya Genişletilebilir Meta Veri Platformu (XMP) biçimi.

  • Şeffaflık: Bir resim, saydamlığa, yani bir alfa kanalına sahip olabilir.

  • Renk Profili: Bir görselde açıklandığı gibi yerleştirilmiş bir ICC profili olabilir (Uluslararası Renk Konsorsiyumu)

  • Animasyon: Bir resimde, aralarında duraklar bulunan birden fazla kare olabilir. animasyona dönüştürüyorum.

Adlandırma

WebP'den bahsederken aşağıdaki türlerin kullanılması ÖNERİLİR kapsayıcı:

Kapsayıcı Biçimi AdıWebP
Dosya Adı Uzantısı.webp
MIME türüimage/webp
Tekdüzen Tür Tanımlayıcıorg.webmproject.webp

Terminoloji ve Temel Bilgiler

Şu anahtar kelimeler "ZORUNLU", "ZORUNLU OLMAMALIDIR", "GEREKLİ", "YAPILMAYACAK", "YA ALINMAMALIDIR", "KULLANILMAMALIDIR", "ÖNERİLİR", "ÖNERİLMEZ", "OLABİLİR" ve "İSTEĞE BAĞLI" bu belge, BCP 14 RFC 2119 RFC 8174'te açıklandığı gibi yorumlanacaktır burada gösterildiği gibi, yalnızca ne zaman ve ne zaman büyük harflerle yazılmış olarak görünürler.

Bir WebP dosyası hareketsiz bir resim (yani, kodlanmış pikseller matrisi) içerir animasyon içerir. İsteğe bağlı olarak, şeffaflık da içerebilir. bilgileri, renk profilini ve meta verileri içerir. Piksel matrisine resmin tuvali.

Parça diyagramlarındaki bit numaralandırması, en anlamlı bit için 0 ile başlar ("MSB 0")), RFC 1166'da açıklandığı gibidir.

Aşağıda, bu belgede kullanılan ek terimler verilmiştir:

Okuyucu/Yazar
WebP dosyalarını okuyan kod okuyucu olarak adlandırılır. WebP dosyalarını okuyan kod ise kullanıcı yazar olarak adlandırılır.
uint16
16 bit, küçük son, işaretsiz bir tam sayı.
uint24
24 bit, küçük son, işaretsiz bir tam sayı.
uint32
32 bit, küçük son, işaretsiz bir tam sayı.
FourCC
Dört karakterlik kod (FourCC), dört karakterin birleştirilmesiyle oluşturulmuş bir uint32'dir. Küçük endian sırasına göre ASCII karakterler. Bu, "aaaa" anlamına gelir (0x61616161) ve "AAAA" (0x41414141), farklı FourCCs olarak kabul edilir.
1 tabanlı
-1 ile uzaklık değerlerinin depolandığı imzasız bir tam sayı alanı; örneğin, alanı, 25 değerini 24 olarak saklar.
ChunkHeader('ABCD')
Bağımsız parçaların FourCC ve Chunk Size başlığını tanımlamak için kullanılır. "ABCD" parçanın FourCC'si olur. Bu öğenin boyutu 8 bayttır.

RIFF Dosya Biçimi

WebP dosya biçimi, RIFF'yi (Kaynak Değişim Dosya Biçimi) temel alır doküman biçimi.

Bir RIFF dosyasının temel öğesi bir parçadır. Şunlardan oluşur:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Chunk FourCC                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Chunk Size                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         Chunk Payload                         :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Chunk FourCC: 32 bit
Parça tanımlama için kullanılan dört karakterli ASCII kod.
Yığın Boyutu: 32 bit (uint32)
Bu alan hariç, parçanın bayt cinsinden boyutu veya dolgudur.
Yığın Yükü: Parça Boyutu bayt
Veri yükü. Parça Boyutu tek ise tek bir dolgu baytı. RIFF ile uyum sağlamak için 0 olmalıdır -- eklenir.

Not: RIFF'te, tamamı büyük harfli FourCC'lerin standart olduğu bir kural vardır herhangi bir RIFF dosya biçimi için geçerli olan gruplar, bir dosyaya özgü FourCC'ler ise hepsi küçük harflidir. WebP bu kurala uymaz.

WebP Dosya Başlığı

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'R'      |      'I'      |      'F'      |      'F'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           File Size                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      'W'      |      'E'      |      'B'      |      'P'      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
'RIFF': 32 bit
"R", "I", "F", "F" ASCII karakterleri.
Dosya Boyutu: 32 bit (uint32)
Ofset 8'den itibaren dosyanın bayt cinsinden boyutu. Maksimum değer: 2^32 eksi 10 bayttır. Dolayısıyla, tüm dosyanın boyutu en fazla 4 GiB eksi 2 bayt boyutunda olabilir.
"WEBP": 32 bit
"W", "E", "B", "P" ASCII karakterleri.

Bir WebP dosyasının bir RIFF başlığıyla ve FourCC 'WEBP' ile başlaması ZORUNLUDUR. Dosya boyutu içinde, takip eden parçaların toplam boyutu artı 4 bayttır. 'WEBP' FourCC'ye gidin. Dosya, verilerden sonra hiçbir veri İÇERMEMELİDİR Dosya Boyutu ile belirtilir. Okuyucular, sondaki dışı verilerdir. Parçanın boyutu eşit olduğunda, RIFF başlığı tarafından verilen boyut bile. Bağımsız parçaların içerikleri aşağıda açıklanmıştır. bölümlerini kontrol edin.

Basit Dosya Biçimi (Kayıp)

Bu düzen, resim kayıp kodlaması gerektiriyorsa ve şeffaflık veya genişletilmiş biçimde sağlanan diğer gelişmiş özellikler gerektirir. Bu düzene sahip dosyalar daha küçüktür ve eski yazılımlar tarafından desteklenir.

Basit WebP (kayıplı) dosya biçimi:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                    WebP file header (12 bytes)                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        'VP8 ' Chunk                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

"VP8" Yığın:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8 ')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                           VP8 data                            :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VP8 verileri: Parça Boyutu bayt
VP8 bit akışı verileri.

"VP8" içindeki dördüncü karakterin FourCC, bir ASCII alanıdır (0x20).

VP8 bit akışı biçimi spesifikasyonu, VP8 Veri Biçimi ve Kod Çözme Kılavuzu. VP8 çerçeve başlığının VP8 çerçevesini içerdiğini unutmayın ve yüksekliği belirtmelisiniz. Zemin, tuval genişliği ve yüksekliği olarak kabul edilir.

VP8 spesifikasyonu, resmin Y'CbCr biçiminde şifresinin nasıl çözüleceğini açıklar. Alıcı: RGB'ye dönüştürmek için BT.601 önerisi kullanılmalıdır. Başvurular OLABİLİR kullanın ama görsel sonuçlar kod çözücüler arasında farklılık gösterebilir.

Basit Dosya Biçimi (Kayıpsız)

Not: Eski okuyucular, kayıpsız biçimi kullanan dosyaları desteklemeyebilir.

Bu düzen, resim kayıpsız kodlama ( isteğe bağlı şeffaflık kanalı) ve gelişmiş özelliklerin sağlanması gerekmez. genişletilmiş biçime göre.

Basit WebP (kayıpsız) dosya biçimi:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                    WebP file header (12 bytes)                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         'VP8L' Chunk                          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

"VP8L" Yığın:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8L')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                           VP8L data                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VP8L verileri: Parça Boyutu bayt
VP8L bit akışı verileri.

VP8L bit akışının mevcut spesifikasyonu şu adreste bulunabilir: WebP Kayıpsız Bit Akışı Biçimi. VP8L başlığının VP8L resim genişliğini ve yüksekliğini içerir. Bunun, genişliği 1000 dolar olduğu varsayılır ve kanvasın yüksekliğini ayarlayın.

Genişletilmiş Dosya Biçimi

Not: Eski okuyucular, genişletilmiş biçimi kullanan dosyaları desteklemeyebilir.

Genişletilmiş biçim dosyası şunlardan oluşur:

  • "VP8X" Dosyada kullanılan özellikler hakkındaki bilgileri içeren yığın.

  • İsteğe bağlı bir "ICCP" Renk profiline sahip yığın.

  • İsteğe bağlı "ANIM" Animasyon kontrol verilerini içeren yığın.

  • Resim verileri.

  • İsteğe bağlı bir "EXIF" EXIF meta verilerini içeren yığın.

  • İsteğe bağlı bir "XMP " XMP meta verileriyle yığın.

  • İsteğe bağlı bir bilinmeyen parçalar listesi.

Hareketsiz bir resim için resim verileri tek bir kareden oluşur. Bu kare en fazla:

Animasyonlu resim için resim verileri birden fazla kareden oluşur. Daha fazla çerçevelerle ilgili ayrıntıları Animasyon bölümünde bulabilirsiniz.

Rekonstrüksiyon ve renk düzeltme için gereken tüm parçalar, yani "VP8X", "ICCP", "ANIM", "ANMF", "ALPH", "VP8" ve 'VP8L', ele alacağız. Yeniden oluşturma için gerekli parçalar olduğunda okuyucular başarısız DEĞİLDİR ve renk düzeltme yanlış.

Meta veri ve bilinmeyen parçalar sipariş.

Mantıksal: Yeniden oluşturma için gerekli parçalar önce tüm bilgileri almadan önce okuyucunun bir resmin kodunu çözmeye başlamasına izin vermek için bahsedeceğim. Bir uygulama, meta verilerin sırasının ve özel gruplar oluşturabilirsiniz.

Genişletilmiş WebP dosya üstbilgisi:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                   WebP file header (12 bytes)                 |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('VP8X')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Rsv|I|L|E|X|A|R|                   Reserved                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Canvas Width Minus One               |             ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...  Canvas Height Minus One    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ayrılmış (Rsv): 2 bit
0 OLMALIDIR. Okuyucular bu alanı Yoksaymalıdır.
ICC profili (I): 1 bit
Dosyanın "ICCP" içerip içermediğini ayarlayın Yığın.
Alfa (L): 1 bit
Resmin çerçevelerinden herhangi birinin şeffaflık bilgisi içerip içermediğini ayarlayın ("alfa")
EXIF meta verisi (E): 1 bit
Dosyanın EXIF meta verileri içerip içermediğini ayarlayın.
XMP meta verileri (X): 1 bit
Dosyanın XMP meta verileri içerip içermediğini ayarlayın.
Animasyon (A): 1 bit
Bunun animasyonlu bir resim olup olmadığını ayarlayın. "ANIM"deki veriler ve "ANMF" Parçalar animasyonu kontrol etmek için kullanılır.
Ayrılmış (R): 1 bit
0 OLMALIDIR. Okuyucular bu alanı Yoksaymalıdır.
Ayrılmış: 24 bit
0 OLMALIDIR. Okuyucular bu alanı Yoksaymalıdır.
Tuval Genişliği Eksi Bir: 24 bit
Kanvasın piksel cinsinden 1 tabanlı genişliği. Gerçek kanvas genişliği 1 + Canvas Width Minus One.
Tuval Yüksekliği Eksi Bir: 24 bit
Kanvasın piksel cinsinden 1 tabanlı yüksekliği. Gerçek tuval yüksekliği 1 + Canvas Height Minus One.

Tuval Genişliği ve Kanvas Yüksekliği değerleri en fazla 2^32 - 1 OLMALIDIR.

Gelecekteki spesifikasyonlar daha fazla alan ekleyebilir. Bilinmeyen alanlar yok sayılmalıdır.

Animasyon

Animasyon "ANIM" tarafından kontrol ediliyor ve "ANMF" Topuklar.

"ANIM" Yığın:

Bu parça, animasyonlu bir resim için animasyon ekler.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ANIM')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Background Color                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Loop Count           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Arka Plan Rengi: 32 bit (uint32)
Kanvasın varsayılan arka plan rengi [Mavi, Yeşil, Kırmızı, Alfa] bayt sırası. Kanvastaki kullanılmayan alanı doldurmak için bu renk kullanılabilir ilk karenin şeffaf pikselleri gösterilir. Arka plan rengi, İmha yöntemi 1 olduğunda da kullanılır.

Not:

  • Arka plan rengi opak olmayan bir alfa değeri içerebilir. 'VP8X'teki Alpha işareti Yığın ayarlanmamış.

  • Görüntüleyen uygulamaları, arka plan rengi değerini bir ipucu olarak ve zorunlu değildir.

  • Kanvas, her döngünün başında temizlenir. Arka plan rengi nasıl kullanılır?

Döngü Sayısı: 16 bit (uint16)
Animasyonun döngü sayısı. 0 ise bu, sonsuza kadar.

"VP8X"te Animasyon işareti varsa bu parçanın görünmesi ZORUNLUDUR Yığın ayarlandı. Animasyon işareti ayarlanmazsa ve bu parça mevcutsa yoksayıldı.

"ANMF" Yığın:

Bu parça, animasyonlu resimler için tek bir kareyle ilgili bilgiler içerir. Animasyon işareti ayarlanmazsa bu parçanın mevcut olmaması GEREKİR.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ANMF')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Frame X                |             ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...          Frame Y            |   Frame Width Minus One     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...             |           Frame Height Minus One              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Frame Duration                |  Reserved |B|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                         Frame Data                            :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
X çerçevesi: 24 bit (uint24)
Çerçevenin sol üst köşesindeki X koordinatı Frame X * 2 şeklindedir.
Y çerçevesi: 24 bit (uint24)
Çerçevenin sol üst köşesinin Y koordinatı Frame Y * 2.
Çerçeve Genişliği Eksi Bir: 24 bit (uint24)
Çerçevenin 1 tabanlı genişliğidir. Çerçeve genişliği: 1 + Frame Width Minus One.
Çerçeve Yüksekliği Eksi Bir: 24 bit (uint24)
Çerçevenin 1 tabanlı yüksekliği. Kare yüksekliği 1 + Frame Height Minus One.
Kare Süresi: 24 bit (uint24)
Sonraki kareyi görüntülemeden önce beklenecek süre (1 milisaniye cinsinden). Çerçeve Süresi'nin 0 (ve genellikle <= 10) yorumlanmasının tanımlanmıştır. Birçok araç ve tarayıcı, belirli bir hedefe süresi GIF'tekine benzer.
Ayrılmış: 6 bit
0 OLMALIDIR. Okuyucular bu alanı Yoksaymalıdır.
Harmanlama yöntemi (B): 1 bit

Geçerli karenin şeffaf piksellerinin ne kadar karıştırılacağını gösterir önceki tuvalin karşılık gelen pikselleriyle:

  • 0: Alfa karıştırma kullanır. Önceki kareyi attıktan sonra, alfa karıştırmayı kullanarak tuvaldeki geçerli kareyi seçin (aşağıya bakın). Öğe geçerli karenin bir alfa kanalı yok; alfa değerinin 255 gibi bir sayı yazın.

  • 1: Karıştırmayın. Önceki kareyi attıktan sonra, tuvaldeki geçerli çerçeveyi, kapladığı dikdörtgenin üzerine geçerli kareyi seçin.

Atma yöntemi (D): 1 bit

Geçerli karenin kullanıldıktan sonra nasıl ele alınacağını belirtir tuvalde görüntülenen (sonraki kareyi oluşturmadan önce):

  • 0: Atmayın. Kanvası olduğu gibi bırakın.

  • 1: Arka plan rengini belirleyin. Kanvasta dikdörtgeni doldur belirtilen arka plan rengiyle geçerli çerçevenin "ANIM" Yığın.

Notlar:

  • Çerçevenin atılması yalnızca çerçeve dikdörtgeni için geçerlidir. Diğer bir deyişle, Kare X, Kare Y, kare genişliği ve kare yükseklik bölümüne gidin. Zeminin tamamını kaplayabilir veya kapmayabilir.

  • Alfa karıştırma:

    R, G, B ve A kanallarının her biri 8 bit ve RGB kanalların, harmanlama formülü olan alfa ile önceden çarpılmaz "dst" yerine şununla eşleşir:

    blend.A = src.A + dst.A * (1 - src.A / 255)
    if blend.A = 0 then
      blend.RGB = 0
    else
      blend.RGB =
          (src.RGB * src.A +
           dst.RGB * dst.A * (1 - src.A / 255)) / blend.A
    
  • Alfa karıştırma işlemi, doğrusal renk alanında Resmin renk profiline. Renk profili standart RGB (sRGB) olduğu varsayılır. (sRGB'nin ayrıca ~2,2 gama nedeniyle doğrusal hale getirilmesi gerekir.)

Çerçeve Verileri: Parça Boyutu - 16 bayt

Şunlardan oluşur:

Not: "ANMF" Çerçeve Verileri, tek bir değerden RIFF dosya biçiminde açıklandığı şekilde dolgulu parçalar.

Alfa

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ALPH')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Rsv| P | F | C |     Alpha Bitstream...                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Ayrılmış (Rsv): 2 bit
0 OLMALIDIR. Okuyucular bu alanı Yoksaymalıdır.
Ön işleme (P): 2 bit

Bu bilgilendirici bitler, veri içeren ön işlemeyi bir tekniktir. Kod çözücü bu bilgiyi kullanarak değerini değiştirebilirsiniz.

  • 0: Ön işleme yok.
  • 1: Seviye azaltma.

Kod çözücülerin bu bilgileri herhangi bir şekilde kullanması gerekmez.

Filtreleme yöntemi (F): 2 bit

Kullanılan filtreleme yöntemleri aşağıda açıklanmıştır:

  • 0: Yok.
  • 1: Yatay filtre.
  • 2: Dikey filtre.
  • 3: Gradyan filtresi.

Her piksel için filtreleme, aşağıdaki hesaplamalar kullanılarak gerçekleştirilir. Geçerli X konumunun etrafındaki alfa değerlerinin şu şekilde etiketlendiğini varsayalım:

 C | B |
---+---+
 A | X |

X konumunda alfa değerini hesaplamaya çalışırız. İlk olarak tahmin yapılan aramalardan birini seçin:

  • 0. yöntem: tahminci = 0
  • 1. yöntem: tahminci = A
  • 2. yöntem: tahminci = B
  • 3. yöntem: tahminci = klip(A + B - C)

clip(v) şuna eşittir:

  • v < ise 0 0,
  • v > ise 255 255 veya
  • v, aksi takdirde

Nihai değer, sıkıştırılmış X değerinin tahmin edici ve [256..511] aralığını sarmak için modülo-256 aritmetiğini kullanma [0..255] olan içine:

alpha = (predictor + X) % 256

En soldaki ve en üstteki piksel konumları için özel durumlar vardır. Örneğin, Örneğin, konumdaki sol üstteki değer (0, 0) tahmin aracı değeri olarak 0'ı kullanır. Diğer durumlarda:

  • Yatay veya gradyan filtreleme yöntemlerinde, en soldaki pikseller konum (0, y), hemen üzerindeki konum (0, y-1) kullanılarak tahmin edilir.
  • Dikey veya gradyan filtreleme yöntemlerinde, en üstte konum (x, 0), soldaki konum (x-1, 0) kullanılarak tahmin edilir.
Sıkıştırma yöntemi (C): 2 bit

Kullanılan sıkıştırma yöntemi:

  • 0: Sıkıştırma yok.
  • 1: WebP kayıpsız biçimi kullanılarak sıkıştırılır.
Alfa bit akışı: Parça Boyutu - 1 bayt

Kodlanmış alfa bit akışı.

Bu isteğe bağlı parça, bu çerçeve için kodlanmış alfa verileri içerir. Çerçeve 'VP8L' içeren Yığın, bu parçayı İÇERMEMELİDİR.

Gerekçe: Şeffaflık bilgileri zaten "VP8L"nin bir parçası. Yığın.

Alfa kanalı verileri, sıkıştırılmamış ham veri olarak saklanır ( sıkıştırma yöntemi '0'dır) veya kayıpsız biçim kullanılarak sıkıştırılır (sıkıştırma yöntemi "1" olduğunda).

  • Ham veri: Bu, bir bayt uzunluğundan oluşur = genişlik * yükseklik, tarama düzeninde tüm 8 bit şeffaflık değerlerini içerir.

  • Kayıpsız biçim sıkıştırma: Bayt dizisi, ("WebP Kayıpsız Bit Akışı Biçimi"nde açıklandığı gibi) içeren örtülü boyutlar, genişlik x yükseklik. Yani, image-stream, resim boyutlarını açıklayan herhangi bir başlık İÇERMEZ.

    Mantıksal: Boyutlar diğer kaynaklardan zaten bilinmektedir, bu nedenle bunları tekrar depolamak gereksiz olur ve hataya açıktır.

    Görüntü akışının kodu Alfa, Kırmızı, Yeşil, Mavi (ARGB) renge dönüştürüldükten sonra değerleri, kayıpsız biçimde açıklanan işlemi uygulayarak şeffaflık bilgileri, yeşil kanalı test edebilirsiniz.

    Mantıksal: Yeşil kanalda ekstra dönüşüme izin verilir diğer kanallardan farklı olarak spesifikasyondaki adımlar kullanarak sıkıştırmayı iyileştirebilirsiniz.

Bit akışı (VP8/VP8L)

Bu parça, tek bir kare için sıkıştırılmış bit akışı verileri içerir.

Bit akışı yığını, (i) bir "VP8" olabilir Yığın, "VP8" kullanılarak ( önemli dördüncü karakter boşluğu) DörtCC olarak veya (ii) bir "VP8L" olarak Yığın, "VP8L" kullanılıyor olarak da adlandırabilirsiniz.

"VP8" biçimleri ve "VP8L" Yığınlar, bölümler halinde açıklandığı gibi Basit Dosya Biçimi (Kayıp) ve Basit Dosya Biçimi (Kayıpsız) seçeneklerini belirleyin.

Renk Profili

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('ICCP')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                       Color Profile                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Renk Profili: Parça Boyutu bayt
ICC profili

Bu parçanın resim verilerinden önce görünmesi ZORUNLUDUR.

Böyle bir parçanın en fazla bir tane olması ZORUNLUDUR. Böyle bölümler varsa okuyucular İlki hariç tümünü yok sayabilir. Ayrıntılar için ICC Spesifikasyonu'na bakın.

Bu parça mevcut değilse sRGB'nin üstlenilmesi GEREKİR.

Meta veri

Meta veriler "EXIF" biçiminde depolanabilir veya "XMP" Topuklar.

Her türde en fazla bir parça ('EXIF' ve 'XMP') OLMALIDIR. Varsa okuyucular ilki hariç tümünü yok sayabilir.

Parçalar şu şekilde tanımlanır:

"EXIF" Yığın:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('EXIF')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        Exif Metadata                          :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
EXIF Meta Verileri: Parça Boyutu baytları
EXIF biçiminde resim meta verileri.

"XMP" Yığın:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      ChunkHeader('XMP ')                      |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                        XMP Metadata                           :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
XMP Meta Verileri: Parça Boyutu baytları
XMP biçiminde resim meta verileri.

'XMP'deki dördüncü karakterin FourCC, bir ASCII alanıdır (0x20).

Meta verilerin işlenmesi hakkında daha fazla bilgiyi şurada bulabilirsiniz: Meta Veri Çalışma Grubu'nun "Meta Verileri İşleme Kuralları".

Bilinmeyen Yığınlar

RIFF parçası (RIFF Dosya Biçimi bölümünde açıklanmıştır) dört temel bileşeni, bu dokümanda açıklanan tüm parçalardan farklı olan bilinmeyen yığın olarak değerlendirilir.

Gerekçe: Bilinmeyen parçalara izin verildiğinde gelecekteki uzatmalar için bir temel sağlanır saklamasına izin verir ve uygulamaya özel verilerin depolanmasına olanak tanır.

Bir dosya bilinmeyen parçalar İÇEREBİLİR:

Okuyucular bu bölümleri Yoksaymalıdır. Yazarlar bunları kişisel e-postalarında (bu parçaları özellikle değiştirmeyi amaçlamıyorlarsa).

Çerçevelerden Kanvas Montajı

Burada, okuyucunun kasada tuval montajı GEREKTİĞİNİ bir genel bakış sunuyoruz. bir resim.

Süreç, "VP8X" Yığın, Canvas Width Minus One + 1 piksel genişliğinde ve Canvas Height Minus One + 1 piksel yüksekliğinde. "ANIM"deki Loop Count alanı Yığın, kontrol edilir işlemi tekrarlanır. Bu, Loop Count - 1 için sıfır olmayan Loop Count değerleri veya Loop Count sıfırsa sonsuz.

Her döngü yinelemesinin başında kanvas 'ANIM'den arka plan rengi Yığın veya uygulama tanımlı bir renk.

"ANMF" Yığınlar, görüntülenme sırasına göre verilen bağımsız çerçeveler içerir. Oluşturmadan önce önceki karenin Disposal method değeri uygulanır.

Kodu çözülmüş çerçevenin oluşturulması Kartezyen koordinatlarla (2 * Frame X, 2 * Frame Y) başlar ve başlangıç noktası olarak tuvalin sol üst köşesi kullanılır. Frame Width Minus One + 1 piksel genişliğinde ve Frame Height Minus One + 1 piksel yüksek değerler tuvalde Blending method kullanılarak oluşturulur.

Tuval Frame Duration milisaniye boyunca gösterilir. Bu işlem, 'ANMF' tarafından verilen tüm kareler Yığınlar gösterildi. Yeni bir döngü yinelemesi tüm yinelemeler bu şekilde uygulanmışsa zemin son tamamlandı.

Aşağıdaki sözde kod, oluşturma işlemini göstermektedir. Gösterim VP8X.field, "VP8X" içindeki alanı ifade eder Aynı açıklamaya sahip yığın.

VP8X.flags.hasAnimation MUST be TRUE
canvas ← new image of size VP8X.canvasWidth x VP8X.canvasHeight with
         background color ANIM.background_color or
         application-defined color.
loop_count ← ANIM.loopCount
dispose_method ← Dispose to background color
if loop_count == 0:
  loop_count = ∞
frame_params ← nil
next chunk in image_data is ANMF MUST be TRUE
for loop = 0..loop_count - 1
  clear canvas to ANIM.background_color or application-defined color
  until eof or non-ANMF chunk
    frame_params.frameX = Frame X
    frame_params.frameY = Frame Y
    frame_params.frameWidth = Frame Width Minus One + 1
    frame_params.frameHeight = Frame Height Minus One + 1
    frame_params.frameDuration = Frame Duration
    frame_right = frame_params.frameX + frame_params.frameWidth
    frame_bottom = frame_params.frameY + frame_params.frameHeight
    VP8X.canvasWidth >= frame_right MUST be TRUE
    VP8X.canvasHeight >= frame_bottom MUST be TRUE
    for subchunk in 'Frame Data':
      if subchunk.tag == "ALPH":
        alpha subchunks not found in 'Frame Data' earlier MUST be
          TRUE
        frame_params.alpha = alpha_data
      else if subchunk.tag == "VP8 " OR subchunk.tag == "VP8L":
        bitstream subchunks not found in 'Frame Data' earlier MUST
          be TRUE
        frame_params.bitstream = bitstream_data
    apply dispose_method.
    render frame with frame_params.alpha and frame_params.bitstream
      on canvas with top-left corner at (frame_params.frameX,
      frame_params.frameY), using Blending method
      frame_params.blendingMethod.
    canvas contains the decoded image.
    Show the contents of the canvas for
    frame_params.frameDuration * 1 ms.
    dispose_method = frame_params.disposeMethod

Örnek Dosya Düzenleri

Alfa sürümüne sahip kayıplı kodlanmış bir resim aşağıdaki gibi görünebilir:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ALPH (alpha bitstream)
+- VP8 (bitstream)

Kayıpsız kodlanmış bir görüntü aşağıdaki gibi görünebilir:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- VP8L (lossless bitstream)
+- XYZW (unknown chunk)

ICC profiline ve XMP meta verilerine sahip kayıpsız bir resim, şöyle görünür:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ICCP (color profile)
+- VP8L (lossless bitstream)
+- XMP  (metadata)

Exif meta verisi içeren animasyonlu bir resim aşağıdaki gibi görünebilir:

RIFF/WEBP
+- VP8X (descriptions of features used)
+- ANIM (global animation parameters)
+- ANMF (frame1 parameters + data)
+- ANMF (frame2 parameters + data)
+- ANMF (frame3 parameters + data)
+- ANMF (frame4 parameters + data)
+- EXIF (metadata)