परिचय
WebP एक इमेज फ़ॉर्मैट है, जो या तो (i) VP8 की फ़्रेम एन्कोडिंग का इस्तेमाल करके, इमेज डेटा को नुकसान पहुंचाने वाले तरीके से कंप्रेस करना या (ii) WebP लॉसलेस एन्कोडिंग. ये पुराने फ़ॉर्मैट, जैसे कि JPEG, GIF, और PNG फ़ॉर्मैट में होने चाहिए. इसे नेटवर्क पर तेज़ी से इमेज ट्रांसफ़र करने के लिए ऑप्टिमाइज़ किया गया है (इसके लिए जैसे, वेबसाइटों के लिए). WebP फ़ॉर्मैट में, सुविधा की समानता (कलर प्रोफ़ाइल, मेटाडेटा, ऐनिमेशन वगैरह) के साथ भी दूसरे फ़ॉर्मैट इस्तेमाल किए जा सकते हैं. इस दस्तावेज़ में बताया गया है कि WebP फ़ाइल का स्ट्रक्चर तय करते हैं.
WebP कंटेनर (WebP के लिए, RIFF कंटेनर), सुविधा के साथ काम करने की अनुमति देता है WebP के बुनियादी इस्तेमाल के उदाहरण से भी ज़्यादा (इसका मतलब है कि ऐसी फ़ाइल जिसमें इमेज को VP8 की फ़्रेम के तौर पर एन्कोड किया गया हो. WebP कंटेनर अतिरिक्त जानकारी देता है निम्न के लिए समर्थन:
नुकसान-रहित कंप्रेशन: किसी इमेज को WebP लॉसलेस फ़ॉर्मैट.
मेटाडेटा: किसी इमेज में, बदली जा सकने वाली इमेज फ़ाइल में मेटाडेटा स्टोर हो सकता है फ़ॉर्मैट (Exif) या एक्सटेंसिबल मेटाडेटा प्लैटफ़ॉर्म (XMP) फ़ॉर्मैट.
पारदर्शिता: किसी इमेज में पारदर्शिता हो सकती है, यानी कि ऐल्फ़ा चैनल.
कलर प्रोफ़ाइल: किसी इमेज में एम्बेड की गई ICC प्रोफ़ाइल मौजूद हो सकती है, जैसा कि बताया गया है. इंटरनैशनल कलर कंसोर्टियम से.
ऐनिमेशन: किसी इमेज में कई फ़्रेम हो सकते हैं, जिनके बीच में कुछ समय के लिए रोक लगी है, जिससे उसे ऐनिमेशन बनाया जा सकता है.
इन्हें
WebP फ़ॉर्मैट के बारे में बताते समय, इन तरीकों का इस्तेमाल करने का सुझाव दिया जाता है कंटेनर:
कंटेनर के फ़ॉर्मैट का नाम | WebP |
फ़ाइल नाम एक्सटेंशन | .webp |
MIME-टाइप | image/webp |
यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर | org.webmproject.webp |
शब्दावली और मूलभूत बातें
जैसे कि "ज़रूरी है", "नहीं करना चाहिए", "ज़रूरी", "करना चाहिए", "नहीं होना चाहिए", "चाहिए", "नहीं होना चाहिए", "सुझाया गया", "सुझाया नहीं गया", "मई", और "ज़रूरी नहीं" इसमें दस्तावेज़ की व्याख्या BCP 14 आरएफ़सी 2119 आरएफ़सी 8174 में दी गई जानकारी के मुताबिक होनी चाहिए कब और सिर्फ़ तब, जब वे सभी बड़े अक्षरों में दिखते हैं, जैसा कि यहां दिखाया गया है.
WebP फ़ाइल में या तो एक स्टिल इमेज (यानी, पिक्सल का एन्कोड किया गया मैट्रिक्स) होती है या ऐनिमेशन का इस्तेमाल करें. वैकल्पिक रूप से, इसमें पारदर्शिता भी हो सकती है जानकारी, कलर प्रोफ़ाइल, और मेटाडेटा शामिल है. पिक्सल के मैट्रिक्स को हम कैनवस पर जाएं.
सबसे अहम बिट के लिए चंक डायग्राम में बिट नंबर, 0
से शुरू होता है
('MSB 0'), जैसा कि आरएफ़सी 1166 में बताया गया है.
इस दस्तावेज़ में इस्तेमाल किए गए अतिरिक्त शब्द नीचे दिए गए हैं:
- पाठक/लेखक
- WebP फ़ाइलों को पढ़ने वाले कोड को रीडर कहा जाता है, जबकि वह कोड जो उन्हें लेखक कहा जाता है.
- uint16
- 16-बिट, लिटिल-एंडियन, बिना साइन वाला पूर्णांक.
- uint24
- 24-बिट, लिटिल एंडियन, साइन नहीं किया गया पूर्णांक.
- uint32
- 32-बिट, लिटिल एंडियन, साइन नहीं किया गया पूर्णांक.
- FourCC
- चार वर्णों का कोड (FourCC) एक uint32 है, जो चार को जोड़कर बनाया गया है ASCII वर्ण, छोटे अक्षरों के क्रम में होते हैं. इसका मतलब है 'aaaa' (0x61616161) और 'एएएए' (0x41414141) को अलग FourCCs माना जाता है.
- 1-आधारित
-1
से ऑफ़सेट करके मानों को संग्रहित करने वाला बिना हस्ताक्षर वाला पूर्णांक फ़ील्ड, उदाहरण के लिए, ऐसे फ़ील्ड में वैल्यू 25 को 24 के तौर पर सेव किया जाएगा.- ChunkHeader('ABCD')
- अलग-अलग हिस्सों के FourCC और FourCC हेडर के बारे में बताने के लिए, इसका इस्तेमाल किया जाता है, जहां 'ABCD' इस ग्रुप के लिए फ़ोरसीसी का मतलब है. इस एलिमेंट का साइज़ 8 बाइट है.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk FourCC |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Chunk Size |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: Chunk Payload :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- चंक फ़ोरसीसी: 32 बिट
- कई हिस्सों में पहचान करने के लिए ASCII चार वर्णों का कोड इस्तेमाल किया जाता है.
- डेटा ग्रुप का साइज़: 32 बिट (uint32)
- सेगमेंट का साइज़ बाइट में. इसमें यह फ़ील्ड शामिल नहीं है, यानी डेटा आइडेंटिफ़ायर या पैडिंग.
- चंक पेलोड: चंक साइज़ बाइट
- डेटा पेलोड. अगर चंक साइज़ विषम है, तो एक पैडिंग बाइट -- जो ज़रूरी है
RIFF के अनुरूप होने के लिए
0
होगी -- जोड़ा गया.
ध्यान दें: आरआईएफ़एफ़ का मतलब है कि सभी अपरकेस चार सीसी वाला फ़ॉर्मैट स्टैंडर्ड होता है ऐसे हिस्से जो किसी भी आरआईएफ़ फ़ाइल फ़ॉर्मैट पर लागू होते हैं, जबकि किसी फ़ाइल के लिए चार CC फ़ॉर्मैट के सभी अक्षर अंग्रेज़ी के छोटे अक्षरों में होते हैं. 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 GiB 2 बाइट कम.
- 'WEBP': 32 बिट
- ASCII वर्ण 'W', 'E', 'B', 'P'.
WebP फ़ाइल की शुरुआत, एआरआईएफ़ हेडर से होनी चाहिए और इसमें फ़ोरसीसी 'वेबपी' को होना चाहिए. फ़ाइल का साइज़
हेडर में उन हिस्सों का कुल साइज़ है जो इसके बाद 4
बाइट के बाद आते हैं
'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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| 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 ' में चौथा वर्ण ForCC एक 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' कलर प्रोफ़ाइल के साथ डेटा का एक हिस्सा.
वैकल्पिक 'Animal' ऐनिमेशन कंट्रोल डेटा के साथ डेटा शेयर करें.
इमेज डेटा.
एक वैकल्पिक 'EXIF' Exif मेटाडेटा के साथ डेटा समूह.
एक वैकल्पिक 'XMP ' XMP मेटाडेटा वाला डेटा ग्रुप.
डेटा के अलग-अलग हिस्सों की जानकारी नहीं है की एक वैकल्पिक सूची.
स्टिल इमेज के लिए, इमेज डेटा में एक फ़्रेम होता है, जिसे ज़्यादा से ज़्यादा:
एक वैकल्पिक ऐल्फ़ा सबचंक.
एक बिटस्ट्रीम सबचंक.
ऐनिमेशन वाली इमेज के लिए, इमेज के डेटा में कई फ़्रेम होते हैं. ज़्यादा देखें फ़्रेम के बारे में जानकारी ऐनिमेशन सेक्शन में देखी जा सकती है.
फिर से बनाने और रंग में सुधार करने के लिए ज़रूरी सभी हिस्से, जो 'VP8X' है, 'आईसीसीपी', 'ऐनिम', 'एएनएमएफ़', 'एएलएच', '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 बिट
- सेट करें कि यह ऐनिमेशन वाली इमेज है या नहीं. 'ani' में मौजूद डेटा और 'ANMF' हिस्से ऐसे होने चाहिए का इस्तेमाल ऐनिमेशन को कंट्रोल करने के लिए किया जाता है.
- रिज़र्व किया गया (R): 1 बिट
0
होना चाहिए. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.- रिज़र्व: 24 बिट
0
होना चाहिए. लोगों को इस फ़ील्ड को अनदेखा करना चाहिए.- कैनवस की चौड़ाई माइनस एक: 24 बिट
- पिक्सल में कैनवस की 1-आधारित चौड़ाई.
कैनवस की असल चौड़ाई
1 + Canvas Width Minus One
है. - कैनवस की लंबाई माइनस एक: 24 बिट
- पिक्सल में कैनवस की 1-आधारित ऊंचाई.
कैनवस की असल ऊंचाई
1 + Canvas Height Minus One
है.
कैनवस की चौड़ाई और कैनवस की ऊंचाई का प्रॉडक्ट ज़्यादा से ज़्यादा 2^32 - 1
होना चाहिए.
आने वाले समय में, इस जानकारी में ज़्यादा फ़ील्ड जोड़े जा सकते हैं. अनजान फ़ील्ड को अनदेखा करना ज़रूरी है.
ऐनिमेशन
ऐनिमेशन को 'Animal' से कंट्रोल किया जाता है और '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('ANIM') |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Background Color |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Loop Count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- बैकग्राउंड का रंग: 32 बिट (uint32)
- कैनवस के बैकग्राउंड का डिफ़ॉल्ट रंग [नीला, हरा, लाल, ऐल्फ़ा]
बाइट ऑर्डर. कैनवस पर इस्तेमाल नहीं की गई जगह को भरने के लिए इस रंग का इस्तेमाल किया जा सकता है
दिख रहे हैं.
डिवाइस के नष्ट होने का तरीका
1
होने पर भी बैकग्राउंड के रंग का इस्तेमाल किया जाता है.
ध्यान दें:
पृष्ठभूमि रंग में एक गैर-ओपेक अल्फ़ा मान हो सकता है, भले ही 'VP8X' में ऐल्फ़ा फ़्लैग डेटा समूह सेट नहीं है.
दर्शक ऐप्लिकेशन को बैकग्राउंड के रंग की वैल्यू को संकेत के तौर पर मानना चाहिए और ज़रूरी नहीं है.
हर लूप की शुरुआत में कैनवस मिटा दिया जाता है. पृष्ठभूमि का रंग हो सकता है का इस्तेमाल किया गया है.
- लूप की संख्या: 16 बिट (uint16)
- ऐनिमेशन को लूप करने की संख्या. अगर यह
0
है, तो इसका मतलब है असीमित.
अगर 'VP8X' में ऐनिमेशन फ़्लैग मौजूद है, तो यह डेटा सेगमेंट दिखना चाहिए डेटा समूह सेट है. अगर ऐनिमेशन फ़्लैग सेट नहीं है और यह समूह मौजूद है, तो यह होना चाहिए अनदेखा किया गया.
'एएनएमएफ़' समूह:
ऐनिमेशन वाली इमेज के लिए, इस डेटा समूह में किसी एक फ़्रेम की जानकारी होती है. अगर ऐनिमेशन फ़्लैग सेट नहीं है, तो यह खंड मौजूद नहीं होना चाहिए.
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
: बैकग्राउंड के रंग में बदलाव करें. कैनवस पर रेक्टैंगल भरें मौजूदा फ़्रेम के ज़रिए कवर किया जाता है और बैकग्राउंड रंग के साथ 'एनिम' डेटा का एक हिस्सा.
ध्यान दें:
फ़्रेम डिस्पोज़ल सिर्फ़ फ़्रेम रेक्टैंगल पर लागू होता है, यानी फ़्रेम X, फ़्रेम Y, फ़्रेम की चौड़ाई, और फ़्रेम की मदद से तय किया गया रेक्टैंगल ऊंचाई के हिसाब से फ़िल्टर करें. यह पूरे कैनवस को कवर कर भी सकती है और नहीं भी.
अल्फ़ा-ब्लेंडिंग:
यह देखते हुए कि R, G, B, और A चैनल में से हर एक 8 बिट है और आरजीबी चैनलों को ऐल्फ़ा से पहले से गुणा नहीं किया गया हो. यह ब्लेंड करने का फ़ॉर्मूला है 'डीएसटी' '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
ऐल्फ़ा-ब्लेंडिंग को इन बातों को ध्यान में रखकर, लीनियर कलर स्पेस में किया जाना चाहिए इमेज की रंग प्रोफ़ाइल. अगर रंग प्रोफ़ाइल मौजूद नहीं है, तो स्टैंडर्ड RGB (sRGB) को माना जाना चाहिए. (ध्यान दें कि sRGB में भी ~2.2 की गामा की वजह से, इसे लीनियर बनाया जाना चाहिए.)
- फ़्रेम डेटा: चंक साइज़ -
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
: अनुमान लगाने वाला = 0 - तरीका
1
: अनुमान लगाने वाला = A - तरीका
2
: अनुमान लगाने वाला = B - तरीका
3
: अनुमान लगाने वाला = Clip(A + B - C)
जहां clip(v)
इसके बराबर है:
- 0 अगर v < 0,
- 255 अगर v > 255 या
- दूसरा वर्शन
आखिरी वैल्यू पाने के लिए, डिकंप्रेस की गई वैल्यू X
को
[256..511] रेंज को रैप करने के लिए, मॉड्यूलो-256 अंकगणित का इस्तेमाल और उसका अनुमान लगाना
[0..255] वाले में:
alpha = (predictor + X) % 256
सबसे बाईं और सबसे ऊपर की पिक्सल पोज़िशन के लिए, कुछ खास केस होते हैं. इसके लिए उदाहरण के लिए, जगह (0, 0) पर सबसे ऊपर बाईं ओर मौजूद वैल्यू, अनुमान लगाने वाले की वैल्यू के तौर पर 0 का इस्तेमाल करती है. अन्यथा:
- हॉरिज़ॉन्टल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, सबसे बाएं पिक्सल जगह (0, y) का अनुमान जगह (0, y-1) के ठीक ऊपर दी गई जगह का इस्तेमाल करके लगाया जाता है.
- वर्टिकल या ग्रेडिएंट फ़िल्टर करने के तरीकों के लिए, इमेज में सबसे ऊपर जगह (x, 0) का अनुमान बाईं ओर मौजूद जगह (x-1, 0) का इस्तेमाल करके लगाया जाता है.
- कंप्रेशन का तरीका (C): 2 बिट
इन चीज़ों को कंप्रेस करने के लिए इस्तेमाल किया जाता है:
0
: कोई कंप्रेशन नहीं.1
: WebP लॉसलेस फ़ॉर्मैट का इस्तेमाल करके कंप्रेस किया गया.
- ऐल्फ़ा बिटस्ट्रीम: चंक साइज़ -
1
बाइट एन्कोड किया गया अल्फ़ा बिटस्ट्रीम.
डेटा के इस वैकल्पिक हिस्से में, इस फ़्रेम के लिए कोड में बदला गया ऐल्फ़ा डेटा शामिल है. फ़्रेम 'VP8L' शामिल है डेटा वाले हिस्से में यह डेटा शामिल नहीं होना चाहिए.
तर्क वाली जानकारी: पारदर्शिता से जुड़ी जानकारी पहले से ही 'VP8L' का हिस्सा है डेटा का हिस्सा.
ऐल्फ़ा चैनल का डेटा, बिना कंप्रेस किए सबमिट किए गए रॉ डेटा के तौर पर सेव किया जाता है. ऐसा तब होता है, जब कंप्रेस करने का तरीका '0' है) या लॉसलेस फ़ॉर्मैट का इस्तेमाल करके कंप्रेस किया गया है (जब संपीड़न विधि '1' हो).
रॉ डेटा: इसमें, लंबाई = चौड़ाई * ऊंचाई का बाइट क्रम होता है, इसमें स्कैन के क्रम में सभी 8-बिट पारदर्शिता वैल्यू शामिल होती हैं.
नुकसान-रहित प्रारूप संपीड़न: बाइट अनुक्रम एक संपीड़ित इंप्लिसिट डाइमेंशन (चौड़ाई x ऊंचाई) वाली इमेज-स्ट्रीम (जैसा कि "WebP लॉसलेस बिटस्ट्रीम फ़ॉर्मैट" में बताया गया है). इसका मतलब है कि इमेज-स्ट्रीम में इमेज के डाइमेंशन की जानकारी देने वाला कोई हेडर नहीं है.
तथ्यों के हिसाब से: डाइमेंशन के बारे में दूसरे सोर्स से पहले से पता होता है, इसलिए, उन्हें फिर से सेव करना गैर-ज़रूरी होगा और उसमें गड़बड़ी हो सकती है.
इमेज-स्ट्रीम को अल्फ़ा, लाल, हरा, नीला (एआरजीबी) रंग में डिकोड करने के बाद लॉसलेस फ़ॉर्मैट में बताई गई प्रोसेस के हिसाब से वैल्यू को सबमिट किया जाता है विशिष्टता के लिए, पारदर्शिता जानकारी ARGB क्वाड्रपलेट का हरा चैनल.
तथ्यों के हिसाब से: ग्रीन चैनल में ज़्यादा बदलाव करने की अनुमति होती है अन्य चैनलों के उलट -- इन चरणों को पूरा करने वाले कंप्रेस करने में मदद करता है.
Bitstream (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 '). अगर वहां इस तरह के ज़्यादा डेटा का इस्तेमाल किया जाता है. पाठक, पहले विकल्प को छोड़कर बाकी सभी को अनदेखा कर सकते हैं.
अलग-अलग हिस्सों को इस तरह से दिखाया गया है:
'एक्सआईएफ़' समूह:
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 ' में चौथा वर्ण ForCC एक ASCII स्पेस (0x20) है.
मेटाडेटा को मैनेज करने के बारे में ज़्यादा जानकारी यहां मिल सकती है मेटाडेटा वर्किंग ग्रुप का "मेटाडेटा हैंडल करने के लिए दिशा-निर्देश".
अज्ञात डेटा
आरआईएफ़एफ़ हिस्सा (RIFF फ़ाइल फ़ॉर्मैट सेक्शन में बताया गया है) जिसकी फ़ोरसीसी, इस दस्तावेज़ में बताए गए किसी भी हिस्से से अलग है, अज्ञात डेटा ग्रुप माना जाता है.
खास जानकारी: अज्ञात डेटा को शामिल करने से, आने वाले समय में एक्सटेंशन को इस्तेमाल करने का प्रावधान मिलता है को फ़ॉर्मैट करने के साथ-साथ किसी खास ऐप्लिकेशन-खास डेटा को स्टोर करने की सुविधा भी देता है.
फ़ाइल में ऐसे हिस्से हो सकते हैं जिनके बारे में जानकारी नहीं है:
- फ़ाइल के आखिर में, जैसा कि एक्सटेंडेड WebP फ़ाइल में बताया गया है हेडर सेक्शन या
- 'ANMF' के आखिर में डेटा के हिस्से, जैसा कि ऐनिमेशन सेक्शन
पाठकों को इन हिस्सों को अनदेखा करना चाहिए. लेखकों को उन्हें अपने में दी गई जानकारी इस्तेमाल की जा सकती है (जब तक कि वे खास तौर पर इन हिस्सों को बदलने का इरादा न रखते हों).
फ़्रेम से कैनवस असेंबली
यहां हम आपको यह जानकारी देंगे कि किसी व्यक्ति के लिए, कैनवस को किस तरह जोड़ना ज़रूरी है इमेज दिखाई गई है.
इस प्रोसेस की शुरुआत, कैनवस बनाने से होती है. इसके लिए,
'VP8X' डेटा का हिस्सा, Canvas Width Minus One + 1
पिक्सल चौड़ा और Canvas Height Minus
One + 1
पिक्सल लंबा. 'Animal' में सेव किया गया Loop Count
फ़ील्ड डेटा समूह, यह कंट्रोल करता है कि
कई बार ऐनिमेशन प्रोसेस दोहराई जाती है. यह Loop Count - 1
गैर-शून्य Loop Count
मान या अगर Loop Count
शून्य है, तो अनंत.
हर लूप प्रोसेस की शुरुआत में, कैनवस को भरे जाने के लिए इसका इस्तेमाल किया जाता है 'ऐनिम' से लिया गया बैकग्राउंड का रंग डेटा का कोई हिस्सा या ऐप्लिकेशन के हिसाब से तय किया गया रंग.
'एएनएमएफ़' डेटा के हिस्से में, डिसप्ले ऑर्डर में दिए गए अलग-अलग फ़्रेम होते हैं. रेंडरिंग से पहले
हर फ़्रेम पर, पिछले फ़्रेम का Disposal method
लागू होता है.
डिकोड किए गए फ़्रेम की रेंडरिंग, कार्टीज़न कोऑर्डिनेट (2 *
Frame X
, 2 * Frame Y
) से शुरू होती है. इसके लिए, कैनवस के सबसे ऊपर बाएं कोने को ऑरिजिन के तौर पर इस्तेमाल किया जाता है.
Frame Width Minus One + 1
पिक्सल चौड़ा और Frame Height Minus One + 1
पिक्सल
ज़्यादा से ज़्यादा वैल्यू को कैनवस पर Blending method
का इस्तेमाल करके रेंडर किया जाता है.
कैनवस Frame Duration
मिलीसेकंड तक दिखाया जाता है. यह कार्रवाई इस समय तक जारी रहेगी
'ANMF' के दिए गए सभी फ़्रेम हिस्से दिखाए गए हैं. लूप में बार-बार
फिर वह शुरू हो गया है या अगर सभी बार
पूरा हुआ.
यहां दिया गया pseudocode, रेंडरिंग की प्रोसेस को दिखाता है. नोटेशन 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)