12 पॉइंट द्वारा xguru 2021-11-25 | 3 टिप्पणियां | WhatsApp पर शेयर करें
<p>"Quite OK Image" <br /> - PNG के समान आकार में RGB/RGBA compression करता है<br /> → compression 20x-50x तेज़ है, और decompression 3~4x तेज़ है <br /> → 300 लाइन की single-header file वाला C code open source <br /> → SIMD का उपयोग न करने वाला सरल single-threaded implementation <br /> - तकनीकी विवरण <br /> → single pass में image encode/decode <br /> → सभी pixels को केवल एक बार छूता है, और हर pixel को 4 तरीकों में से एक से encode किया जाता है <br /> ⇨ अगर ठीक पिछले pixel के समान हो तो पिछले pixel की run-length बढ़ाता है, और अलग हो to नए pixel को नीचे दिए गए 3 तरीकों में से एक से pack करता है <br /> ⇨ अगर पहले से प्रोसेस किए गए pixel के समान हो तो उस pixel का index उपयोग करता है. इसके लिए हाल के 64 pixels की array रखी जाती है<br /> ⇨ अगर पिछले pixel से बहुत अधिक अंतर न हो तो उसके RGBA difference values को store करता है <br /> ⇨ अगर ऊपर के 3 तरीके विफल हों तो pixel का RGBA value store करता है. लेकिन केवल वे हिस्से store करता है जो पिछले pixel से अलग हों </p>

3 टिप्पणियां

 
lifthrasiir 2021-11-25
<p>थोड़ा बढ़ा-चढ़ाकर कहें तो QOI, PNG से zlib को हटाकर सिर्फ filtering छोड़ देने और फिर उसे बेहतर बनाने जैसा है.<br /> <br /> हालाँकि PNG में इस्तेमाल होने वाला zlib/gzip/DEFLATE compression algorithm काफ़ी व्यापक रूप से उपयोग होता है, लेकिन वह बहुत पुराना होने के कारण उसकी दक्षता कम हो गई है। साथ ही, zlib समेत LZ77 परिवार के algorithms इस मूल धारणा पर आधारित होते हैं कि "हाल के bytes में एक जैसी लगातार byte sequences कई बार दिखाई देती हैं" (उदाहरण के लिए, अगर input "to be or not to be" हो तो यह इस बात का उपयोग करता है कि "to be" हिस्सा दो बार आता है)। लेकिन images ऐसा data हैं जिन पर यह धारणा अच्छी तरह लागू नहीं होती। इसलिए PNG, zlib का उपयोग व्यावहारिक रूप से सिर्फ entropy coding के लिए करता है (यानी बिना किसी अतिरिक्त context के अगला byte आने की probability के आधार पर compression करने का तरीका), और preprocessing चरण में simple filtering का उपयोग करके zlib में जाने वाले data को उसकी धारणा के जितना संभव हो उतना अनुकूल बनाने की कोशिश करता है, लेकिन वास्तव में इसे बहुत efficient नहीं कहा जा सकता.<br /> <br /> आधुनिक lossless image formats इसे मुख्य रूप से दो तरीकों से बेहतर बनाते हैं: एक तरीका PNG की filtering के अनुरूप pixel prediction को बेहतर बनाना है (जैसे filtering के प्रकारों की संख्या बहुत बढ़ा देना, या image के अलग-अलग हिस्सों पर अलग filtering लागू करना), और दूसरा तरीका PNG के zlib के अनुरूप entropy coding को बेहतर बनाना है। QOI का approach भी कुछ ऐसा ही है, लेकिन simplicity के लिए इसकी खासियत यह है कि pixel prediction में मौजूदा position के ऊपर वाले pixel का बिल्कुल उपयोग नहीं किया जाता, और entropy coding को छोड़कर अनुभव-आधारित कई delta coding तरीकों को तैयार किया गया है। खास तौर पर पहली विशेषता के कारण, compression/decompression performance से अलग भी, इसका compression ratio PNG से कम रहने की प्रवृत्ति होती है, लेकिन ऐसा लगता है कि simplicity में थोड़ी कमी स्वीकार करके इसे बेहतर बनाया जा सकता है.</p>
 
xguru 2021-11-25
<p>ओह, अतिरिक्त स्पष्टीकरण के लिए धन्यवाद। काफ़ी दिलचस्प है।</p>
 
xguru 2021-11-25
<p>इसे किसी दूसरे फ़ॉर्मैट के विकल्प के रूप में इस्तेमाल करना शायद मुश्किल हो, लेकिन कोड काफ़ी simple है और implementation भी अच्छी तरह समझाई गई है, इसलिए पढ़ने में मज़ेदार लगने वाला कोड है.<br /> https://github.com/phoboslab/qoi/blob/master/qoi.h<br /> </p>