परिचय
WebP एक इमेज फ़ॉर्मैट है. इसमें इमेज डेटा को लॉसी तरीके से कंप्रेस करने के लिए, (i) VP8 की-फ़्रेम एन्कोडिंग या (ii) WebP लॉसलेस एन्कोडिंग का इस्तेमाल किया जाता है. इन एन्कोडिंग स्कीम की मदद से, इमेज को JPEG, GIF, और PNG जैसे पुराने फ़ॉर्मैट के मुकाबले ज़्यादा बेहतर तरीके से सेव किया जा सकता है. इसे नेटवर्क पर इमेज को तेज़ी से ट्रांसफ़र करने के लिए ऑप्टिमाइज़ किया गया है. उदाहरण के लिए, वेबसाइटों के लिए. WebP फ़ॉर्मैट में, अन्य फ़ॉर्मैट की तरह ही सुविधाएं (रंग प्रोफ़ाइल, मेटाडेटा, ऐनिमेशन वगैरह) होती हैं. इस दस्तावेज़ में, WebP फ़ाइल के स्ट्रक्चर के बारे में बताया गया है.
WebP कंटेनर, यानी WebP के लिए RIFF कंटेनर, WebP के बुनियादी इस्तेमाल के उदाहरण के ऊपर और ऊपर, सुविधा को इस्तेमाल करने की अनुमति देता है. इसका मतलब है कि ऐसी फ़ाइल जिसमें एक ही इमेज को VP8 मुख्य फ़्रेम के तौर पर एन्कोड किया गया है. WebP कंटेनर इन चीज़ों के लिए ज़्यादा सहायता देता है:
लॉसलेस कंप्रेसन: WebP लॉसलेस फ़ॉर्मैट का इस्तेमाल करके, इमेज को लॉसलेस तरीके से कंप्रेस किया जा सकता है.
मेटाडेटा: किसी इमेज में मेटाडेटा, एक्सचेंजेबल इमेज फ़ाइल फ़ॉर्मैट (एक्सिफ़) या एक्सटेंसिबल मेटाडेटा प्लैटफ़ॉर्म (XMP) फ़ॉर्मैट में स्टोर हो सकता है.
पारदर्शिता: इमेज में पारदर्शिता हो सकती है, यानी कि ऐल्फ़ा चैनल.
कलर प्रोफ़ाइल: किसी इमेज में एम्बेड की गई आईसीसी प्रोफ़ाइल हो सकती है, जैसा कि इंटरनैशनल कलर कंसोर्टियम में बताया गया है.
ऐनिमेशन: किसी इमेज में एक से ज़्यादा फ़्रेम हो सकते हैं और उनमें बीच-बीच में रुकावटें हो सकती हैं. इससे वह ऐनिमेशन बन जाता है.
इन्हें
हमारा सुझाव है कि WebP कंटेनर का रेफ़रंस देते समय, इन टाइप का इस्तेमाल करें:
कंटेनर फ़ॉर्मैट का नाम | WebP |
फ़ाइल नाम एक्सटेंशन | .webp |
MIME-टाइप | image/webp |
यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर | org.webmproject.webp |
शब्दावली और बुनियादी बातें
इस दस्तावेज़ में मुख्य शब्द "करना है", "नहीं करना", "ज़रूरी है", "करना चाहिए", "नहीं होना चाहिए", "सुझाया गया", "नहीं सुझाया जाना चाहिए", "सुझाया नहीं गया", "शायद", और "वैकल्पिक" का मतलब BCP 14 आरएफ़सी 2119 में बताए गए तरीके से तब माना जाना चाहिए, जब आरएफ़सी 8174 को यहां सभी कैपिटल लेटर में दिखाया गया हो.
WebP फ़ाइल में या तो एक स्टिल इमेज (यानी, पिक्सल का एन्कोड किया गया मैट्रिक्स) या ऐनिमेशन होती है. इसके अलावा, इसमें पारदर्शिता की जानकारी, कलर प्रोफ़ाइल, और मेटाडेटा भी शामिल हो सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है. हम पिक्सल के मैट्रिक्स को इमेज का कैनवस कहते हैं.
चंक डायग्राम में बिट नंबर, सबसे अहम बिट ('MSB 0') के लिए 0
से शुरू होती है, जैसा कि आरएफ़सी 1166 में बताया गया है.
इस दस्तावेज़ में इन शब्दों का इस्तेमाल किया गया है:
- पाठक/लेखक
- WebP फ़ाइलों को पढ़ने वाले कोड को रीडर कहा जाता है. वहीं, उन्हें लिखने वाले कोड को राइटर कहा जाता है.
- uint16
- 16-बिट, लिटल-इंडियन, बिना हस्ताक्षर वाला इंटिजर.
- uint24
- 24-बिट, लिटल-इंडियन, बिना हस्ताक्षर वाला इंटीजर.
- uint32
- 32-बिट, लिटल-इंडियन, बिना हस्ताक्षर वाला इंटिजर.
- FourCC
- चार वर्णों वाला कोड (FourCC), uint32 होता है. इसे चार ASCII वर्णों को लिटल-इंडियन ऑर्डर में जोड़कर बनाया जाता है. इसका मतलब है कि 'aaaa' (0x61616161) और 'AAAA' (0x41414141) को अलग-अलग FourCCs माना जाता है.
- 1 पर आधारित
- बिना हस्ताक्षर वाला पूर्णांक फ़ील्ड, जिसमें वैल्यू को
-1
से ऑफ़सेट करके सेव किया जाता है. उदाहरण के लिए, ऐसे फ़ील्ड की वैल्यू 25 को 24 के तौर पर सेव किया जाएगा. - ChunkHeader('ABCD')
- इसका इस्तेमाल, अलग-अलग चंक के FourCC और चंक साइज़ हेडर के बारे में बताने के लिए किया जाता है. इसमें 'ABCD', चंक का FourCC होता है. इस एलिमेंट का साइज़ 8 बाइट है.
RIFF फ़ाइल फ़ॉर्मैट
WebP फ़ाइल फ़ॉर्मैट, RIFF (रिसॉर्स इंटरचेंज फ़ाइल फ़ॉर्मैट) दस्तावेज़ फ़ॉर्मैट पर आधारित है.
RIFF फ़ाइल का बुनियादी एलिमेंट, चंक होता है. इसमें ये चीज़ें शामिल हैं:
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 :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- चंक फ़ोरसीसी: 32 बिट
- कई हिस्सों में पहचान करने के लिए ASCII के चार वर्णों वाला कोड इस्तेमाल किया जाता है.
- चंक का साइज़: 32 बिट (uint32)
- चंक का साइज़ बाइट में. इसमें यह फ़ील्ड, चंक आइडेंटिफ़ायर या पैडिंग शामिल नहीं है.
- चंक पेलोड: चंक का साइज़ बाइट
- डेटा पेलोड. अगर चंक साइज़ अजीब है, तो एक पैडिंग बाइट जोड़ा जाता है. यह बाइट, RIFF के मुताबिक
0
होना चाहिए.
ध्यान दें: RIFF में एक नियम है कि सभी अपरकेस वाले चंक फ़ोरसीसी, स्टैंडर्ड चंक होते हैं. ये किसी भी RIFF फ़ाइल फ़ॉर्मैट पर लागू होते हैं. वहीं, किसी फ़ाइल फ़ॉर्मैट के लिए खास तौर पर बने फ़ोरसीसी, सभी लोअरकेस में होते हैं. WebP इस नियम का पालन नहीं करता.
WebP फ़ाइल हेडर
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 बिट
- ASCII कैरेक्टर 'R', 'I', 'F', 'F'.
- फ़ाइल का साइज़: 32 बिट (uint32)
- फ़ाइल का साइज़, बाइट में. यह ऑफ़सेट 8 से शुरू होता है. इस फ़ील्ड की ज़्यादा से ज़्यादा वैल्यू 2^32 माइनस 10 बाइट होती है. इसलिए, पूरी फ़ाइल का साइज़ ज़्यादा से ज़्यादा 4 जीबी में से 2 बाइट होना चाहिए.
- 'WEBP': 32 बिट
- ASCII वर्ण 'W', 'E', 'B', 'P'.
WebP फ़ाइल, RIFF हेडर से शुरू होनी चाहिए. साथ ही, इसमें FourCC 'WEBP' होना चाहिए. हेडर में मौजूद फ़ाइल का साइज़, इसके बाद आने वाले सभी चंक का कुल साइज़ होता है. साथ ही, इसमें 'WEBP' फ़ोरसीसी के लिए 4
बाइट भी शामिल होते हैं. फ़ाइल साइज़ में बताए गए डेटा के बाद, फ़ाइल में कोई डेटा नहीं होना चाहिए. लोग पिछले डेटा को अनदेखा करते हुए, ऐसी फ़ाइलों को पार्स कर सकते हैं. किसी भी चंक का साइज़ बराबर होता है. इसलिए, RIFF हेडर में दिया गया साइज़ भी बराबर होता है. अलग-अलग हिस्सों के कॉन्टेंट के बारे में इन सेक्शन में बताया गया है.
सिंपल फ़ाइल फ़ॉर्मैट (नुकसान पहुंचाने वाला)
इस लेआउट का इस्तेमाल तब किया जाना चाहिए, जब इमेज के लिए लॉसी एन्कोडिंग की ज़रूरत हो. साथ ही, इसके लिए एक्सटेंडेट फ़ॉर्मैट में दी गई पारदर्शिता या दूसरी बेहतर सुविधाओं की ज़रूरत न हो. इस लेआउट वाली फ़ाइलें छोटी होती हैं और पुराने सॉफ़्टवेयर के साथ काम करती हैं.
सामान्य WebP (लोस-लेस) फ़ाइल फ़ॉर्मैट:
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 ' चंक:
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 डेटा: चंक साइज़ बाइट
- VP8 बिटस्ट्रीम डेटा.
ध्यान दें कि 'VP8 ' फ़ोरसीसी में चौथा वर्ण, ASCII स्पेस (0x20) है.
VP8 बिटस्ट्रीम फ़ॉर्मैट स्पेसिफ़िकेशन के बारे में VP8 डेटा फ़ॉर्मैट और डिकोडिंग गाइड में बताया गया है. ध्यान दें कि VP8 फ़्रेम के हेडर में, VP8 फ़्रेम की चौड़ाई और ऊंचाई शामिल होती है. यह माना जाता है कि यह कैनवस की चौड़ाई और ऊंचाई है.
VP8 स्पेसिफ़िकेशन में, इमेज को Y'CbCr फ़ॉर्मैट में डिकोड करने का तरीका बताया गया है. आरजीबी में बदलने के लिए, सुझाव BT.601 का इस्तेमाल किया जाना चाहिए. ऐप्लिकेशन, किसी दूसरे कन्वर्ज़न तरीके का इस्तेमाल कर सकते हैं. हालांकि, डिकोडर के हिसाब से विज़ुअल नतीजे अलग-अलग हो सकते हैं.
सिंपल फ़ाइल फ़ॉर्मैट (बिना डेटा हानि वाला)
ध्यान दें: ऐसा हो सकता है कि पुराने रीडर, लॉसलेस फ़ॉर्मैट का इस्तेमाल करने वाली फ़ाइलों के साथ काम न करें.
इस लेआउट का इस्तेमाल तब किया जाना चाहिए, जब इमेज को बिना किसी डेटा के एन्कोड करने की ज़रूरत हो (इसमें ट्रांसपेरेंसी चैनल का इस्तेमाल करना ज़रूरी नहीं है) और उसे एक्सटेंडेड फ़ॉर्मैट की बेहतर सुविधाओं की ज़रूरत न हो.
सिंपल WebP (बिना डेटा हानि वाला) फ़ाइल फ़ॉर्मैट:
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' चंक:
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 डेटा: चंक का साइज़ बाइट में
- VP8L बिटस्ट्रीम डेटा.
VP8L बिटस्ट्रीम की मौजूदा स्पेसिफ़िकेशन, WebP लॉसलेस बिटस्ट्रीम फ़ॉर्मैट पर देखी जा सकती है. ध्यान दें कि VP8L हेडर में VP8L इमेज की चौड़ाई और ऊंचाई शामिल है. यह माना जाता है कि यह कैनवस की चौड़ाई और ऊंचाई है.
एक्सटेंडेड फ़ाइल फ़ॉर्मैट
ध्यान दें: ऐसा हो सकता है कि पुराने रीडर, एक्सटेंडेड फ़ॉर्मैट का इस्तेमाल करने वाली फ़ाइलों के साथ काम न करें.
एक्सटेंडेड फ़ॉर्मैट की फ़ाइल में ये चीज़ें शामिल होती हैं:
फ़ाइल में इस्तेमाल की गई सुविधाओं के बारे में जानकारी वाला 'VP8X' चंक.
रंग की प्रोफ़ाइल वाला 'ICCP' चंक, जो ज़रूरी नहीं है.
ऐनिमेशन कंट्रोल डेटा वाला वैकल्पिक 'ANIM' चंक.
इमेज का डेटा.
Exif मेटाडेटा वाला वैकल्पिक 'EXIF' चंक.
XMP मेटाडेटा वाला वैकल्पिक 'XMP ' चंक.
अनजान चंक की वैकल्पिक सूची.
स्टिल इमेज के लिए, इमेज डेटा में एक फ़्रेम होता है. यह फ़्रेम इन चीज़ों से बना होता है:
अल्फ़ा सबचंक, जो ज़रूरी नहीं है.
ऐनिमेशन वाली इमेज के लिए, इमेज डेटा में कई फ़्रेम होते हैं. फ़्रेम के बारे में ज़्यादा जानकारी, ऐनिमेशन सेक्शन में मिल सकती है.
वीडियो को फिर से बनाने और रंग में सुधार करने के लिए ज़रूरी सभी चंक, पहले बताए गए क्रम में होने चाहिए. जैसे, 'VP8X', 'ICCP', 'ANIM', 'ANMF', 'ALPH', 'VP8 ', और 'VP8L'. जब रीकंस्ट्रक्शन और रंग में सुधार करने के लिए ज़रूरी चंक का क्रम गलत हो, तो रीडर काम नहीं कर पाएंगे.
मेटाडेटा और अनजान चंक, क्रम से नहीं दिख सकते.
वजह: फ़ाइल में सबसे पहले, रीकंस्ट्रक्शन के लिए ज़रूरी चंक दिखने चाहिए, ताकि रीडर पूरा डेटा पाने से पहले ही इमेज को डिकोड करना शुरू कर सके. किसी ऐप्लिकेशन को लागू करने के लिए, मेटाडेटा और कस्टम चंक के क्रम में बदलाव करने से फ़ायदा मिल सकता है.
एक्सटेंडेड WebP फ़ाइल हेडर:
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- रिज़र्व (Rsv): 2 बिट
- को
0
पर सेट करना ज़रूरी है. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए. - ICC प्रोफ़ाइल (I): 1 बिट
- अगर फ़ाइल में 'ICCP' चंक है, तो सेट करें.
- ऐल्फ़ा (L): 1 बिट
- सेट करें कि इमेज के किसी फ़्रेम में पारदर्शिता की जानकारी ("ऐल्फ़ा") है या नहीं.
- Exif मेटाडेटा (E): 1 बिट
- अगर फ़ाइल में Exif मेटाडेटा है, तो सेट करें.
- XMP मेटाडेटा (X): 1 बिट
- अगर फ़ाइल में XMP मेटाडेटा है, तो सेट करें.
- ऐनिमेशन (A): 1 बिट
- अगर यह ऐनिमेशन वाली इमेज है, तो सेट करें. ऐनिमेशन को कंट्रोल करने के लिए, 'ANIM' और 'ANMF' चंक में मौजूद डेटा का इस्तेमाल किया जाना चाहिए.
- रिज़र्व किया गया (R): 1 बिट
0
होना चाहिए. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.- रिज़र्व किया गया: 24 बिट
- को
0
पर सेट करना ज़रूरी है. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए. - कैनवस की चौड़ाई माइनस एक: 24 बिट पिक्सल में कैनवस की चौड़ाई,
- 1-आधारित.
कैनवस की असल चौड़ाई
1 + Canvas Width Minus One
है. - कैनवस की ऊंचाई में से एक घटाने पर: 24 बिट पिक्सल में कैनवस की ऊंचाई,
- 1-आधारित.
कैनवस की असल ऊंचाई
1 + Canvas Height Minus One
है.
कैनवस की चौड़ाई और कैनवस की ऊंचाई का गुणनफल, 2^32 - 1
से ज़्यादा नहीं होना चाहिए.
आने वाले समय में, ज़्यादा फ़ील्ड जोड़े जा सकते हैं. ऐसे फ़ील्ड को अनदेखा करना ज़रूरी है जिनके बारे में जानकारी नहीं है.
ऐनिमेशन
ऐनिमेशन को 'एनिम' और 'एएनएमएफ़' चंक्स से कंट्रोल किया जाता है.
'ANIM' चंक:
ऐनिमेशन वाली किसी इमेज के लिए, इस डेटा ग्रुप में ऐनिमेशन के ग्लोबल पैरामीटर शामिल होते हैं.
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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- बैकग्राउंड का रंग: 32 बिट (uint32)
- कैनवस का डिफ़ॉल्ट बैकग्राउंड कलर, [Blue, Green, Red, Alpha] बिट ऑर्डर में. कैनवस पर इस्तेमाल नहीं की गई जगह को फ़्रेम के आस-पास भरने के लिए, इस रंग का इस्तेमाल किया जा सकता है. साथ ही, पहली फ़्रेम के पारदर्शी पिक्सल को भरने के लिए भी इस रंग का इस्तेमाल किया जा सकता है.
बैकग्राउंड कलर का इस्तेमाल तब भी किया जाता है, जब कचरा हटाने का तरीका
1
हो.
ध्यान दें:
बैकग्राउंड के रंग में, पारदर्शी अल्फा वैल्यू हो सकती है. भले ही, 'VP8X' चंक में अल्फा फ़्लैग सेट न किया गया हो.
दर्शक के ऐप्लिकेशन को बैकग्राउंड के रंग की वैल्यू को एक हिंट के तौर पर इस्तेमाल करना चाहिए. हालांकि, इसके लिए ज़रूरी नहीं है कि वे इसका इस्तेमाल करें.
हर लूप की शुरुआत में कैनवस मिटा दिया जाता है. ऐसा करने के लिए, बैकग्राउंड के रंग का इस्तेमाल किया जा सकता है.
- लूप की संख्या: 16 बिट (uint16)
- एनिमेशन को कितनी बार लूप करना है. अगर यह
0
है, तो इसका मतलब असीमित है.
अगर 'VP8X' चंक में ऐनिमेशन फ़्लैग सेट है, तो यह चंक ज़रूर दिखना चाहिए. अगर ऐनिमेशन फ़्लैग सेट नहीं है और यह चंक मौजूद है, तो इसे अनदेखा करना ज़रूरी है.
'ANMF' चंक:
ऐनिमेशन वाली इमेज के लिए, इस चंक में एक फ़्रेम की जानकारी होती है. अगर ऐनिमेशन फ़्लैग सेट नहीं है, तो यह चंक मौजूद नहीं होना चाहिए.
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: 24 बिट (uint24)
- फ़्रेम के सबसे ऊपर बाएं कोने का X कोऑर्डिनेट
Frame X * 2
है. - फ़्रेम Y: 24 बिट (uint24)
- फ़्रेम के ऊपरी बाएं कोने का Y कोऑर्डिनेट
Frame Y * 2
है. - फ़्रेम की चौड़ाई में से एक घटाना: 24 बिट (uint24)
- फ़्रेम की 1-आधारित चौड़ाई.
फ़्रेम की चौड़ाई
1 + Frame Width Minus One
है. - फ़्रेम की लंबाई माइनस एक: 24 बिट (uint24)
- फ़्रेम की 1-आधारित ऊंचाई.
फ़्रेम की ऊंचाई
1 + Frame Height Minus One
है. - फ़्रेम की अवधि: 24 बिट (uint24)
- अगला फ़्रेम दिखाने से पहले इंतज़ार करने का समय, 1 मिलीसेकंड की यूनिट में. ध्यान दें कि फ़्रेम की अवधि 0 (और अक्सर <= 10) को लागू करने के तरीके से तय किया जाता है. कई टूल और ब्राउज़र, GIF की तरह ही कम से कम अवधि तय करते हैं.
- रिज़र्व किया गया: 6 बिट
0
होना चाहिए. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए.- ब्लेंड करने का तरीका (B): 1 बिट
इससे पता चलता है कि मौजूदा फ़्रेम के पारदर्शी पिक्सल को, पिछले कैनवस के मिलते-जुलते पिक्सल के साथ कैसे ब्लेंड किया जाएगा:
0
: ऐल्फ़ा-ब्लेंडिंग का इस्तेमाल करें. पिछले फ़्रेम को हटाने के बाद, कैनवस पर मौजूदा फ़्रेम को रेंडर करें. इसके लिए, अल्फा-ब्लेंडिंग का इस्तेमाल करें (यहां देखें). अगर मौजूदा फ़्रेम में कोई अल्फा चैनल नहीं है, तो मान लें कि अल्फा वैल्यू 255 है. इससे रेक्टैंगल को असरदार तरीके से बदला जा सकता है.1
: ब्लेंड न करें. पिछले फ़्रेम को हटाने के बाद, कैनवस पर मौजूदा फ़्रेम को रेंडर करें. इसके लिए, मौजूदा फ़्रेम से ढके हुए रेक्टैंगल को बदलें.
- कचरे के निपटारे का तरीका (D): 1 बिट
इससे पता चलता है कि कैनवस पर दिखाए जाने के बाद (अगले फ़्रेम को रेंडर करने से पहले), मौजूदा फ़्रेम को कैसे मैनेज किया जाएगा:
0
: नष्ट न करें. कैनवस को ऐसे ही छोड़ दें.1
: बैकग्राउंड के रंग को हटाएं. कैनवस पर मौजूदा फ़्रेम से ढके हुए रेक्टैंगल को, 'ANIM' चंक में बताए गए बैकग्राउंड कलर से भरें.
ध्यान दें:
फ़्रेम डिस्पोज़ल सिर्फ़ फ़्रेम रेक्टैंगल पर लागू होता है. इसका मतलब है कि यह फ़्रेम X, फ़्रेम Y, फ़्रेम की चौड़ाई, और फ़्रेम की ऊंचाई से तय किया गया रेक्टैंगल होता है. यह पूरे कैनवस को कवर कर भी सकती है और नहीं भी.
ऐल्फ़ा-ब्लेंडिंग:
यह देखते हुए कि R, G, B, और A चैनल में से हर चैनल 8 बिट का होता है और RGB चैनलों को अल्फा से मल्टीप्लाई नहीं किया जाता, 'dst' को 'src' पर ब्लेंड करने का फ़ॉर्मूला यह है:
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
अल्फा-ब्लेंडिंग, इमेज की रंग प्रोफ़ाइल को ध्यान में रखते हुए, लीनियर कलर स्पेस में की जानी चाहिए. अगर कलर प्रोफ़ाइल मौजूद नहीं है, तो स्टैंडर्ड आरजीबी (sRGB) को मान लिया जाएगा. (ध्यान दें कि ~2.2 की गामा की वजह से, sRGB का लीनियर होना भी ज़रूरी है.)
- फ़्रेम डेटा: चंक का साइज़ बाइट -
16
इसमें ये शामिल हैं:
फ़्रेम के लिए अल्फा सब-चंक, जो ज़रूरी नहीं है.
फ़्रेम के लिए बिटस्ट्रीम सबचंक.
डेटा के अलग-अलग हिस्सों की जानकारी नहीं है की एक वैकल्पिक सूची.
ध्यान दें: 'ANMF' पेलोड, फ़्रेम डेटा में अलग-अलग पैड किए गए चंक होते हैं, जैसा कि RIFF फ़ाइल फ़ॉर्मैट में बताया गया है.
ऐल्फ़ा
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... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- रिज़र्व (Rsv): 2 बिट
- को
0
पर सेट करना ज़रूरी है. पाठकों को इस फ़ील्ड को अनदेखा करना चाहिए. - प्री-प्रोसेसिंग (P): 2 बिट
इन जानकारी देने वाले बिट का इस्तेमाल, कॉम्प्रेस करने के दौरान की गई प्रोसेसिंग के बारे में बताने के लिए किया जाता है. डिकोडर इस जानकारी का इस्तेमाल, वैल्यू को डिटर करने या डिसप्ले करने से पहले ग्रेडिएंट को स्मूद करने के लिए कर सकता है.
0
: कोई प्री-प्रोसेसिंग नहीं है.1
: लेवल में कमी.
डिकोडर को इस जानकारी का इस्तेमाल किसी खास तरीके से करने की ज़रूरत नहीं है.
- फ़िल्टर करने का तरीका (F): 2 बिट
फ़िल्टर करने के इस्तेमाल किए गए तरीकों के बारे में यहां बताया गया है:
0
: कोई नहीं.1
: हॉरिज़ॉन्टल फ़िल्टर.2
: वर्टिकल फ़िल्टर.3
: ग्रेडिएंट फ़िल्टर.
हर पिक्सल के लिए, नीचे दिए गए कैलकुलेशन का इस्तेमाल करके फ़िल्टर किया जाता है.
मान लें कि मौजूदा X
पोज़िशन के आस-पास मौजूद अल्फा वैल्यू को इस तरह लेबल किया गया है:
C | B |
---+---+
A | X |
हमें X
पोज़िशन पर अल्फा वैल्यू का हिसाब लगाना है. सबसे पहले, फ़िल्टर करने के तरीके के आधार पर अनुमान लगाया जाता है:
- पहला तरीका
0
: predictor = 0 - तरीका
1
: predictor = A - तरीका
2
: predictor = B - पहला तरीका
3
: predictor = clip(A + B - C)
जहां clip(v)
का मान:
- 0 अगर v < 0 है,
- 255, अगर v > 255 है या
- v अन्य मामलों में
आखिरी वैल्यू, अनुमान लगाने वाले में X
की डिकंप्रेस की गई वैल्यू को जोड़कर मिलती है. इसके बाद, [256..511] रेंज को [0..255] में रैप करने के लिए, मॉड्यूलो-256 अंकगणित का इस्तेमाल किया जाता है:
alpha = (predictor + X) % 256
सबसे बाईं और सबसे ऊपर की पिक्सल पोज़िशन के लिए, कुछ खास केस होते हैं. उदाहरण के लिए, जगह (0, 0) पर सबसे ऊपर बाईं ओर मौजूद वैल्यू, अनुमानित वैल्यू के तौर पर 0 का इस्तेमाल करती है. अन्यथा:
- हॉरिज़ॉन्टल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, जगह (0, y) पर सबसे बाएं पिक्सल का अनुमान, ठीक ऊपर मौजूद जगह (0, y-1) का इस्तेमाल करके लगाया जाता है.
- वर्टिकल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, बाईं ओर मौजूद जगह (x-1, 0) का इस्तेमाल करके, जगह (x, 0) पर सबसे ऊपर मौजूद पिक्सल का अनुमान लगाया जाता है.
- कंप्रेस करने का तरीका (C): 2 बिट
वीडियो को कंप्रेस करने के लिए इस्तेमाल किया गया तरीका:
0
: कोई कंप्रेस नहीं किया गया.1
: WebP लॉसलेस फ़ॉर्मैट का इस्तेमाल करके कंप्रेस किया गया.
- ऐल्फ़ा बिटस्ट्रीम: चंक साइज़ बाइट -
1
एन्कोड किया गया ऐल्फ़ा बिटस्ट्रीम.
इस वैकल्पिक चंक में, इस फ़्रेम के लिए एन्क्रिप्ट (सुरक्षित) किया गया अल्फा डेटा होता है. 'VP8L' खंड वाले फ़्रेम में यह खंड नहीं होना चाहिए.
वजह: पारदर्शिता से जुड़ी जानकारी, पहले से ही 'VP8L' चंक का हिस्सा है.
ऐल्फ़ा चैनल का डेटा, कंप्रेस किए गए रॉ डेटा के तौर पर सेव किया जाता है (जब कंप्रेस करने का तरीका '0' हो) या लॉसलेस फ़ॉर्मैट का इस्तेमाल करके कंप्रेस किया जाता है जब कंप्रेस करने का तरीका '1' हो.
रॉ डेटा: इसमें लंबाई = चौड़ाई * ऊंचाई का बाइट क्रम होता है. इसमें स्कैन के क्रम में सभी 8-बिट ट्रांसपेरेंसी वैल्यू होती हैं.
लॉसलेस फ़ॉर्मैट कंप्रेसन: बाइट क्रम, चौड़ाई x ऊंचाई के डाइमेंशन वाली कंप्रेस की गई इमेज-स्ट्रीम होती है. इस बारे में "WebP लॉसलेस बिटस्ट्रीम फ़ॉर्मैट" में बताया गया है. इसका मतलब है कि इस इमेज-स्ट्रीम में, इमेज डाइमेंशन की जानकारी देने वाला कोई हेडर नहीं है.
वजह: डाइमेंशन पहले से ही दूसरे सोर्स से मौजूद होते हैं. इसलिए, उन्हें फिर से सेव करना बेकार होगा और गड़बड़ी का खतरा भी रहेगा.
इमेज-स्ट्रीम को ऐल्फ़ा, रेड, ग्रीन, ब्लू (एआरजीबी) कलर वैल्यू में डिकोड करने के बाद, लॉसलेस फ़ॉर्मैट के स्पेसिफ़िकेशन में बताई गई प्रोसेस का पालन करके, एआरजीबी क्वार्टुपलेट के ग्रीन चैनल से ट्रांसपेरेंसी की जानकारी निकाली जानी चाहिए.
वजह: ग्रीन चैनल को स्पेसिफ़िकेशन में, अन्य चैनलों के मुकाबले बदलाव के अतिरिक्त चरणों की अनुमति है. इससे, डेटा को बेहतर तरीके से कंप्रेस किया जा सकता है.
बिटस्ट्रीम (VP8/VP8L)
इस चंक में, किसी एक फ़्रेम के लिए कंप्रेस किया गया बिटस्ट्रीम डेटा होता है.
बिटस्ट्रीम चंक या तो (i) 'VP8 ' खंड हो सकता है, जिसके लिए 'VP8 ' का इस्तेमाल किया जा रहा है (ध्यान दें कि चौथे वर्ण की खास जगह) ForCC के रूप में, या (ii) 'VP8L' खंड हो सकता है और इसके लिए 'VP8L' को चारसीसी के रूप में इस्तेमाल किया जा सकता है.
'VP8 ' और 'VP8L' चंक के फ़ॉर्मैट, सिंपल फ़ाइल फ़ॉर्मैट (लोस वाली) और सिंपल फ़ाइल फ़ॉर्मैट (बिना डेटा हानि वाला) सेक्शन में बताए गए हैं.
कलर प्रोफ़ाइल
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 :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- कलर प्रोफ़ाइल: चंक का साइज़ बाइट
- आईसीसी प्रोफ़ाइल.
यह चंक, इमेज डेटा से पहले दिखना चाहिए.
ज़्यादा से ज़्यादा एक ऐसा चंक होना चाहिए. अगर इस तरह के और भी चंक हैं, तो हो सकता है कि पाठक पहले चंक को छोड़कर बाकी सभी चंक को अनदेखा कर दें. ज़्यादा जानकारी के लिए, आईसीसी स्पेसिफ़िकेशन देखें.
अगर डेटा का यह ग्रुप मौजूद नहीं है, तो इसे sRGB मानना चाहिए.
मेटाडेटा
मेटाडेटा को 'EXIF' या 'XMP ' चंक्स में सेव किया जा सकता है.
हर टाइप ('EXIF' और 'XMP ') का एक ही चंक होना चाहिए. अगर ऐसे और चंक हैं, तो हो सकता है कि पाठक पहले चंक को छोड़कर सभी चंक को अनदेखा कर दें.
चंक इस तरह से तय किए जाते हैं:
'EXIF' चंक:
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 मेटाडेटा: चंक का साइज़ बाइट में
- Exif फ़ॉर्मैट में इमेज का मेटाडेटा.
'XMP ' खंड:
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 मेटाडेटा: चंक साइज़ बाइट
- XMP फ़ॉर्मैट में इमेज का मेटाडेटा.
ध्यान दें कि 'XMP ' फ़ोरसीसी में चौथा वर्ण, ASCII स्पेस (0x20) है.
मेटाडेटा को हैंडल करने के बारे में ज़्यादा जानकारी, मेटाडेटा वर्किंग ग्रुप के "मेटाडेटा हैंडल करने के दिशा-निर्देश" में मिल सकती है.
अज्ञात चंक
RIFF फ़ाइल फ़ॉर्मैट सेक्शन में बताए गए RIFF चंक को अज्ञात चंक माना जाता है. ऐसा तब होता है, जब चंक का FourCC, इस दस्तावेज़ में बताए गए किसी भी चंक से अलग हो.
वजह: अनजान चंक की अनुमति देने से, आने वाले समय में फ़ॉर्मैट को बड़ा करने का विकल्प मिलता है. साथ ही, किसी भी ऐप्लिकेशन के हिसाब से डेटा को स्टोर करने की अनुमति मिलती है.
किसी फ़ाइल में ऐसे चंक हो सकते हैं जिनके बारे में जानकारी नहीं है:
- जैसा कि एक्सटेंडेड WebP फ़ाइल हेडर सेक्शन में बताया गया है, या
- 'ANMF' चंक के आखिर में जोड़ें. इस बारे में ऐनिमेशन सेक्शन में बताया गया है.
पाठकों को इन चंक को अनदेखा करना चाहिए. लेखकों को उन्हें अपने मूल क्रम में बनाए रखना चाहिए. हालांकि, अगर वे इन चंक में बदलाव करना चाहते हैं, तो ऐसा किया जा सकता है.
फ़्रेम से कैनवस असेंबली
यहां हम इस बारे में खास जानकारी देते हैं कि ऐनिमेशन वाली इमेज के मामले में, पाठक को कैनवस को कैसे इकट्ठा करना चाहिए.
यह प्रोसेस, 'VP8X' चंक में दिए गए डाइमेंशन का इस्तेमाल करके कैनवस बनाने से शुरू होती है. यह कैनवस Canvas Width Minus One + 1
पिक्सल चौड़ा और Canvas Height Minus
One + 1
पिक्सल ऊंचा होता है. 'ANIM' चंक का Loop Count
फ़ील्ड यह कंट्रोल करता है कि ऐनिमेशन की प्रोसेस कितनी बार दोहराई जाए. Loop Count
के शून्य न होने पर, यह वैल्यू Loop Count - 1
होती है. वहीं, अगर Loop Count
शून्य है, तो यह अनंत होता है.
हर लूप की शुरुआत में, कैनवस को भरने के लिए 'ऐनिम' चंक के बैकग्राउंड कलर या ऐप्लिकेशन के तय किए हुए रंग का इस्तेमाल किया जाता है.
'ANMF' हिस्से में, डिसप्ले के क्रम में दिए गए अलग-अलग फ़्रेम होते हैं. हर फ़्रेम को रेंडर करने से पहले, पिछले फ़्रेम का Disposal method
लागू किया जाता है.
डिकोड किए गए फ़्रेम को रेंडर करने की प्रोसेस, कार्टेशियन निर्देशांक (2 *
Frame X
, 2 * Frame Y
) से शुरू होती है. इसमें कैनवस के सबसे ऊपर बाएं कोने को ऑरिजिन के तौर पर इस्तेमाल किया जाता है.
Frame Width Minus One + 1
पिक्सल चौड़ी और Frame Height Minus One + 1
पिक्सल ऊंची इमेज को Blending method
का इस्तेमाल करके कैनवस पर रेंडर किया जाता है.
कैनवस Frame Duration
मिलीसेकंड के लिए दिखता है. यह तब तक जारी रहता है, जब तक 'ANMF' चंक से दिए गए सभी फ़्रेम नहीं दिखा दिए जाते. इसके बाद, एक नया लूप शुरू किया जाता है या अगर सभी दोहराव पूरे हो चुके हैं, तो कैनवस को उसकी आखिरी स्थिति में छोड़ दिया जाता है.
नीचे दिया गया स्यूडोकोड, रेंडर करने की प्रोसेस दिखाता है. VP8X.field नोटेशन का मतलब है कि 'VP8X' चंक में मौजूद वह फ़ील्ड जिसका ब्यौरा एक जैसा है.
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
फ़ाइल लेआउट के उदाहरण
ऐल्फ़ा के साथ, नुकसान पहुंचाने वाली कोड में बदली गई इमेज इस तरह दिख सकती है:
RIFF/WEBP
+- VP8X (descriptions of features used)
+- ALPH (alpha bitstream)
+- VP8 (bitstream)
लॉसलेस-कोड की गई इमेज कुछ इस तरह दिख सकती है:
RIFF/WEBP
+- VP8X (descriptions of features used)
+- VP8L (lossless bitstream)
+- XYZW (unknown chunk)
ICC प्रोफ़ाइल और XMP मेटाडेटा वाली, क्वालिटी में कोई बदलाव किए बिना इस्तेमाल की जा सकने वाली इमेज इस तरह दिख सकती है:
RIFF/WEBP
+- VP8X (descriptions of features used)
+- ICCP (color profile)
+- VP8L (lossless bitstream)
+- XMP (metadata)
Exif मेटाडेटा वाली ऐनिमेट की गई इमेज इस तरह दिख सकती है:
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)