QOI (image format)
काफी ठीक छवि प्रारूप (क्यू. ओ. आई.) 24-बिट (8 बिट प्रति रंग आर. जी. बी.) या 32-बिट (8 बिट प्रति रंग 8-बिट अल्फा चैनल आर. जी. बी. ए. के साथ) रंग रेखापुंज (बिटमैप) छवियों के दोषरहित छवि संपीड़न के लिए एक विनिर्देश है, जिसका आविष्कार डोमिनिक स्जाब्लेव्स्की द्वारा किया गया था और पहली बार 24 नवंबर 2021 को इसकी घोषणा की गई थी। विवरण इच्छित उद्देश्य एक मुक्त स्रोत हानिरहित संपीड़न विधि बनाना था, जो पी. एन. जी. की तुलना में तेजी से और लागू करने में आसान थी। एक तृतीय पक्ष यूट्यूब वीडियो बताता है कि पी. एन. जी. और क्यू. ओ. आई. संपीड़न कैसे किया जाता है। घोषणा और वीडियो में निर्दिष्ट आंकड़े समान फ़ाइल आकार के साथ पी. एन. जी. की तुलना में बीस से पचास गुना तेज एन्कोडिंग और तीन से चार गुना तेज डिकोडिंग गति का दावा करते हैं। लेखक ने विनिर्देश को सार्वजनिक डोमेन (CC0) को दान कर दिया है। सॉफ्टवेयर और भाषा समर्थन क्यू. ओ. आई. को इमेजमैजिक, इरफानव्यू (संस्करण 4.60 के अनुसार), एफ. एफ. एम. पी. ई. जी. (संस्करण 5.1 के अनुसार), और ग्राफिक कनवर्टर (v11.8 +) द्वारा मूल रूप से समर्थित किया जाता है। समुदाय निर्मित प्लगइन जी. आई. एम. पी., Paint.NET और एक्स. एन. व्यू एम. पी. में उपलब्ध हैं। रस्ट, पायथन, जावा, सी + +, सी #और अधिक जैसी विभिन्न भाषाओं के लिए भी कार्यान्वयन हैं। एक पूरी सूची परियोजना के गिट (हब) रिपॉजिटरी आर. ई. डी. एम. ई. पर पाई जा सकती है। फाइल प्रारूप हेडर एक क्यू. ओ. आई. फाइल में एक 14-बाईट हेडर होता है, जिसके बाद किसी भी संख्या में डेटा "चंक" और एक 8-बाईट एंड मार्कर होता है। qoi _ हेडर {चार मैजिक [4];// मैजिक बाइट्स "qoif" uint32 _ t चौड़ाई;// पिक्सेल में छवि की चौड़ाई (बीई) uint32 _ t ऊंचाई;// पिक्सेल में छवि की ऊंचाई (बीई) uint8 _ t चैनल;// 3 = आरजीबी, 4 = आरजीबीए uint8 _ t कलरस्पेस;// 0 = एसआरजीबी रैखिक अल्फा// 1 = सभी चैनल रैखिक के साथ; रंग स्थान और चैनल क्षेत्र विशुद्ध रूप से सूचनात्मक हैं। वे डेटा खंडों को कूटबद्ध करने के तरीके को नहीं बदलते हैं। एन्कोडिंग छवियाँ पंक्ति दर पंक्ति, बाएँ से दाएँ, ऊपर से नीचे तक एन्कोडेड होती हैं। डिकोडर और एनकोडर पिछले पिक्सेल मूल्य के साथ शुरू होते हैं। एक छवि तब पूरी होती है जब द्वारा निर्दिष्ट सभी पिक्सेल को कवर किया जाता है। पिक्सेल को इस प्रकार कूटबद्ध किया जाता हैः पिछले पिक्सेल की रन-लेंथ कूटलेखन () पहले देखे गए पिक्सेल की सरणी में एक सूचकांक () आर, जी, बी (या) फुल आर, जी, बी या आर, जी, बी में पिछले पिक्सेल मूल्य की तुलना में अंतर, एक मान (या) यह माना जाता है कि रंग चैनलों को अल्फा चैनल ("गैर-गुणित अल्फा") के साथ पूर्वगुणित नहीं किया गया है। एन्कोडर और डिकोडर द्वारा पहले देखे गए पिक्सेल मूल्यों का एक चालू (शून्य-प्रारंभिक) बनाए रखा जाता है। एन्कोडर और डिकोडर द्वारा देखे जाने वाले प्रत्येक पिक्सेल को रंग मूल्य के हैश फ़ंक्शन द्वारा बनाई गई स्थिति में इस सरणी में रखा जाता है। एनकोडर में, यदि सूचकांक पर पिक्सेल मूल्य वर्तमान पिक्सेल से मेल खाता है, तो इस सूचकांक स्थिति को धारा में लिखा जाता है। सूचकांक के लिए हैश कार्य हैः अनुक्रमणिका स्थिति = (r * 3 + g * 5 + b * 7 + a * 11)% 64 प्रत्येक खंड 2-या 8-बिट टैग के साथ शुरू होता है, जिसके बाद कई डेटा बिट्स होते हैं। टुकड़ों की बिट लंबाई 8 से विभाज्य है-अर्थात। सभी भागों को बाईट संरेखित किया गया है। इन डेटा बिट्स में एन्कोडेड सभी मूल्यों में सबसे महत्वपूर्ण बिट बाईं ओर होता है। 8-बिट टैगों को 2-बिट टैगों पर वरीयता दी जाती है। एक डिकोडर को पहले 8-बिट टैग की उपस्थिति की जांच करनी चाहिए। बाइट्स धारा के अंत को 7 बाइट्स के साथ चिह्नित किया जाता है जिसके बाद एक ही बाइट्स होता है। संभावित भाग हैंः 8-बिट टैग (254) 8-बिट लाल चैनल मान 8-बिट हरा चैनल मान 8-बिट नीला चैनल मान अल्फा मान पिछले पिक्सेल से अपरिवर्तित रहता है। 8-बिट टैग (255) 8-बिट रेड चैनल वैल्यू 8-बिट ग्रीन चैनल वैल्यू 8-बिट ब्लू चैनल वैल्यू 8-बिट अल्फा चैनल वैल्यू 2-बिट टैग 6-बिट इंडेक्स रंग सूचकांक सरणी मेंः एक वैध एनकोडर को एक ही सूचकांक में 2 या अधिक लगातार भाग जारी नहीं करना चाहिए। इसके बजाय इसका उपयोग किया जाना चाहिए। 2-बिट टैग 2-बिट रेड चैनल अंतर पिछले पिक्सेल 2-बिट ग्रीन चैनल अंतर से पिछले पिक्सेल 2-बिट ब्लू चैनल अंतर वर्तमान चैनल मूल्यों में अंतर एक रैपराउंड ऑपरेशन का उपयोग कर रहा है, इसलिए इसका परिणाम 255 होगा, जबकि इसका परिणाम 0 होगा। मानों को 2 के पूर्वाग्रह के साथ अहस्ताक्षरित पूर्णांक के रूप में संग्रहीत किया जाता है। ई. जी. −2 को 0 () के रूप में संग्रहीत किया जाता है। 1 को 3 () के रूप में संग्रहीत किया जाता है। अल्फा मान पिछले पिक्सेल से अपरिवर्तित रहता है। 2-बिट टैग 6-बिट ग्रीन चैनल अंतर पिछले पिक्सेल 4-बिट रेड चैनल अंतर माइनस ग्रीन चैनल अंतर 4-बिट ब्लू चैनल अंतर माइनस ग्रीन चैनल अंतर ग्रीन चैनल का उपयोग परिवर्तन की सामान्य दिशा को इंगित करने के लिए किया जाता है और इसे 6 बिट में एन्कोड किया जाता है। लाल और नीले चैनल (डी. आर. और डी. बी.) हरे चैनल के अंतर को आधार बनाते हैं। आई. ई. : dr _ dg = (cur_px.r-prev_px.r)-(cur_px.g-prev_px.g) db _ dg = (cur_px.b-prev_px.b)-(cur_px.g-prev_px.g) वर्तमान चैनल मानों में अंतर एक रैपराउंड ऑपरेशन का उपयोग कर रहा है, इसलिए इसका परिणाम 253 होगा, जबकि परिणाम 1 होगा। मानों को हरे चैनल के लिए 32 के पूर्वाग्रह और लाल और नीले चैनल के लिए 8 के पूर्वाग्रह के साथ अहस्ताक्षरित पूर्णांक के रूप में संग्रहीत किया जाता है। अल्फा मान पिछले पिक्सेल से अपरिवर्तित रहता है। 2-बिट टैग 6-बिट रन-लंबाई पिछले पिक्सेल को दोहराती है रन-लंबाई को-1 के पूर्वाग्रह के साथ संग्रहीत किया जाता है। ध्यान दें कि रन लेंथ 63 और 64 (और) अवैध हैं क्योंकि वे और टैग द्वारा कब्जा कर लिए गए हैं। संदर्भ बाहरी लिंक प्रारूप वेबसाइटः सी स्रोत कोड और बेंचमार्क परिणाम 1 पृष्ठ पीडीएफ विनिर्देश गिटहब रिपॉजिटरी (सी कार्यान्वयन सहित) 2021 ग्राफिक्स मानकों में कंप्यूटर से संबंधित परिचय छवि संपीड़न खुले प्रारूप रेखापुंज ग्राफिक्स फ़ाइल प्रारूप