FLIF फाइल क्या है?
FLIF (मुक्त दोषरहित छवि प्रारूप) एक दोषरहित छवि प्रारूप है जो अपनी फ़ाइलों के लिए .flif एक्सटेंशन का उपयोग करता है। FLIF संपीड़न अनुपात के मामले में PNG, दोषरहित WebP, दोषरहित BPG, और दोषरहित JPEG 2000 से बेहतर प्रदर्शन करने का दावा करता है। FLIF प्रगतिशील इंटरलेसिंग का उपयोग करता है, जिसके कारण छवि के किसी भी आंशिक डाउनलोड को संपूर्ण छवि के लिए हानिपूर्ण एन्कोडिंग के रूप में उपयोग किया जा सकता है।
संक्षिप्त इतिहास
सितंबर 2015 में FLIF की घोषणा की गई थी, और अल्फा संस्करण अक्टूबर 2015 में जारी किया गया था। सितंबर 2016 में, FLIF का पहला स्थिर संस्करण जारी किया गया था।
FLIF डिजाइन
FLIF संपीड़न के लिए CABAC (संदर्भ-अनुकूली बाइनरी अंकगणितीय कोडिंग), MANIAC (मेटा-एडेप्टिव नियर-ज़ीरो इंटीजर अंकगणित कोडिंग) के एक प्रकार का उपयोग करता है। MANIAC जॉन स्नेयर्स और पीटर वुइल द्वारा विकसित एक एन्ट्रापी कोडिंग एल्गोरिथम है। MANIAC में, संदर्भ निर्णय वृक्षों के नोड होते हैं जो गतिशील रूप से एन्कोडिंग समय पर सीखे जाते हैं। यह संदर्भ मॉडल को अधिक छवि-विशिष्ट बनाता है और बेहतर संपीड़न में परिणाम देता है। एफएलआईएफ में निम्नलिखित विशेषताएं हैं:
- दोषरहित संपीड़न का समर्थन करता है
- एन्कोडर प्रीप्रोसेसिंग के साथ हानिपूर्ण संपीड़न का समर्थन करता है
- ग्रेस्केल, आरजीबी और आरजीबीए का समर्थन करता है
- प्रति चैनल 1 से 16 बिट की रंग गहराई का समर्थन करता है
- इंटरलेस्ड और नॉन-इंटरलेस्ड फाइलों का समर्थन करता है
- आंशिक रूप से डाउनलोड की गई फ़ाइलों के प्रगतिशील डिकोडिंग का समर्थन करता है
- एनिमेशन का समर्थन करता है
- एम्बेडेड ICC रंग प्रोफाइल, Exif और XMP मेटाडेटा का समर्थन करता है
- कैमरा कच्ची फाइलों (आरजीजीबी) को संपीड़ित करने के लिए सीमित समर्थन है
FLIF फ़ाइल स्वरूप
एक FLIF फ़ाइल में निम्नलिखित चार भाग होते हैं:
मुख्य हैडर
मुख्य हेडर में चौड़ाई, ऊंचाई, रंग की गहराई, फ़्रेम की संख्या सहित मुख्य मेटाडेटा होता है।
प्रकार | मूल्य | विवरण |
---|---|---|
4 बाइट्स | “FLIF” | मैजिक |
4 बिट्स | 3 = नी स्टिल; 4 = मैं अभी भी; 5 = नी एनिम; 6 = मैं एनिमेशन | इंटरलेसिंग, एनिमेशन |
4 बिट्स | 1 = ग्रेस्केल; 3 = आरजीबी; 4 = RGBA | चैनलों की संख्या (nb_channels) |
1 बाइट | ‘0’,‘1’,‘2’ (‘0’=कस्टम) | बाइट्स प्रति चैनल (बीपीसी) |
varint | चौड़ाई-1 | चौड़ाई |
varint | ऊंचाई-1 | ऊंचाई |
varint | nb_frames-2 (केवल अगर एनिमेशन) | फ्रेम की संख्या (nb_frames) |
मेटाडेटा खंड
इस भाग में गैर-पिक्सेल जैसे Exif/XMP मेटाडेटा, ICC रंग प्रोफ़ाइल आदि शामिल हैं, जो DEFLATE संपीड़न का उपयोग करके एन्कोड किया गया है। इन विखंडू को पीएनजी विखंडू के समान परिभाषित किया गया है, जिसमें अंतर यह है कि चक आकार बाइट्स की एक चर संख्या के साथ एन्कोड किया गया है। चंक्स के नाम 4 अक्षर (4 बाइट्स) हो सकते हैं या 32 से नीचे का मान एक गैर-वैकल्पिक चंक को दर्शाता है।
निम्नलिखित वैकल्पिक चक का एक उदाहरण है:
खंड नाम | विवरण | सामग्री (डिफलेट-डीकंप्रेसन के बाद) |
---|---|---|
आईसीसीपी | आईसीसी कलर प्रोफाइल | रॉ आईसीसी कलर प्रोफाइल डेटा |
eXif | Exif मेटाडेटा | “Exif\0\0” हेडर के बाद एक TIFF हेडर और EXIF डेटा |
eXmp | XMP मेटाडेटा | XMP बिना पैडिंग वाले केवल-पढ़ने के लिए xpacket में समाहित है |
नामकरण परंपरा
- पहला अक्षर: क्रिटिकल के लिए अपरकेस का इस्तेमाल होता है और नॉन-क्रिटिकल चंक्स के लिए लोअरकेस का इस्तेमाल होता है।
- दूसरा अक्षर: अपरकेस का इस्तेमाल पब्लिक के लिए और लोअरकेस का इस्तेमाल प्राइवेट चंक्स के लिए किया जाता है
- तीसरा अक्षर: चक के लिए अपरकेस का उपयोग किया जाता है जो छवि को सही ढंग से प्रदर्शित करने के लिए आवश्यक होते हैं और छवि प्रदर्शित करने के लिए लोअरकेस महत्वपूर्ण नहीं होते हैं।
- चौथा अक्षर: अपरकेस का उपयोग चक के लिए किया जाता है जिसे आँख बंद करके सुरक्षित रूप से कॉपी किया जा सकता है। लोअरकेस चक छवि डेटा पर निर्भर करते हैं।
दूसरा हैडर
इसमें पिक्सल के वास्तविक एन्कोडिंग के बारे में जानकारी शामिल है।
प्रकार | विवरण | शर्त | डिफ़ॉल्ट मान |
---|---|---|---|
1 बाइट | एनयूएल बाइट (0x00), एक FLIF16 बिटस्ट्रीम का खंड नाम | ||
uni_int(1,16) | बिट्स प्रति पिक्सेल चैनल्स | बीपीसी == ‘0’: रिपीट(nb_channels) | 8 अगर बीपीसी == ‘1’, 16 अगर बीपीसी == ‘2’ |
uni_int(0,1) | ध्वज: alpha_zero | nb_channels > 3 | 0 |
uni_int(0,100) | लूपों की संख्या | nb_frames > 1 | |
uni_int(0,60_000) | ms में फ्रेम विलंब | nb_frames > 1: दोहराना(nb_frames) | |
uni_int(0,1) | ध्वज: has_custom_cutoff_and_alpha | ||
uni_int(1,128) | कटऑफ | has_custom_cutoff_and_alpha | 2 |
uni_int(2,128) | अल्फा भाजक | has_custom_cutoff_and_alpha | 19 |
uni_int(0,1) | ध्वज: has_custom_bitchance | has_custom_cutoff_and_alpha | 0 |
? | बिचेंस | has_custom_bitchance | |
चर | रूपांतरण (नीचे देखें) | ||
uni_int(1) = 0 | संकेतक बिट: परिवर्तनों के साथ किया गया | ||
uni_int(0,2) | अदृश्य पिक्सेल प्रेडिक्टर | alpha_zero && इंटरलेस्ड && अल्फा श्रेणी में शून्य शामिल है |
चैनल
चैनल नंबर | विवरण |
---|---|
0 | लाल या स्लेटी |
1 | हरा |
2 | नीला |
3 | अल्फा |
रूपांतरण
प्रकार | विवरण |
---|---|
uni_int(1) = 1 | संकेतक बिट: अभी तक नहीं किया |
uni_int(0,13) | रूपांतरण पहचानकर्ता |
चर | रूपांतरण डेटा (रूपांतरण पर निर्भर करता है) |
बेहतर संपीड़न के लिए पिक्सेल डेटा को संशोधित करने और वास्तव में होने वाले पिक्सेल मानों का ट्रैक रखने के लिए रूपांतरण का उपयोग किया जाता है।
पिक्सेल डेटा
इस भाग में MANIAC एन्ट्रॉपी कोडिंग का उपयोग करके एन्कोडेड वास्तविक पिक्सेल डेटा होता है। पिक्सल को इंटरलेस्ड या नॉन-इंटरलेस्ड एन्कोडिंग का उपयोग करके एन्कोड किया जा सकता है।
इंटरलेस्ड विधि
इस पद्धति में, ज़ूम स्तर परिभाषित किए गए हैं। ज़ूमलेवल 0 का उपयोग पूर्ण छवि के लिए किया जाता है, ज़ूमलेवल 1 का उपयोग सभी सम-संख्या वाली पंक्तियों के लिए किया जाता है, ज़ूमलेवल 2 का उपयोग ज़ूमलेवल 1 के सभी सम-संख्या वाले कॉलम के लिए किया जाता है। इमेज, स्केल 1:2^k पर। ज़ूम स्तर उच्चतम से निम्नतम तक एन्कोडेड होते हैं।
गैर-इंटरलेस्ड विधि
इस पद्धति में, MANIAC पेड़ों की एन्कोडिंग तुरंत पिक्सेल की एन्कोडिंग के बाद शुरू होती है।