कंप्रेस करने की तकनीक

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

Google में, हम वेब पेजों को तेज़ी से लोड करने के तरीके ढूंढते रहते हैं. इसका एक तरीका वेब इमेज को छोटा करना है. ज़्यादातर वेब पेजों पर इमेज, 60%-65% बाइट तक की होती हैं. साथ ही, पेज का साइज़, रेंडर होने में लगने वाले कुल समय पर निर्भर करता है. पेज का साइज़ मोबाइल डिवाइस के लिए खास तौर पर ज़रूरी होता है, जहां छोटी इमेज बैंडविड्थ और बैटरी लाइफ़, दोनों की बचत करती हैं.

WebP एक नया इमेज फ़ॉर्मैट है, जिसे Google ने बनाया है. यह Chrome, Opera, और Android में काम करता है. इसे वेब पर तेज़ और छोटी इमेज दिखाने के लिए ऑप्टिमाइज़ किया गया है. WebP इमेज का साइज़ 30% छोटा होता है. यह इमेज, PNG और JPEG फ़ॉर्मैट वाली इमेज के मुकाबले, एक जैसी विज़ुअल क्वालिटी वाली होती है. इसके अलावा, WebP इमेज फ़ॉर्मैट में भी दूसरे फ़ॉर्मैट की सुविधाएं एक जैसी हैं. यह इन विकल्पों पर काम करता है:

  • लॉसी कंप्रेस करने की सुविधा: खराब कंप्रेस करने की प्रोसेस, VP8 की फ़्रेम फ़्रेम एन्कोडिंग पर आधारित होती है. VP8 एक वीडियो कंप्रेस फ़ॉर्मैट है, जिसे On2 Technologies ने VP6 और VP7 फ़ॉर्मैट के उत्तराधिकारी के तौर पर बनाया है.

  • बिना नुकसान वाला कंप्रेस करना: लॉसलेस कंप्रेशन फ़ॉर्मैट को WebP टीम ने बनाया है.

  • पारदर्शिता: आठ इमेज वाला ऐल्फ़ा चैनल, ग्राफ़िक इमेज के लिए मददगार होता है. ऐल्फ़ा चैनल को नुकसान पहुंचाने वाले आरजीबी के साथ इस्तेमाल किया जा सकता है. यह एक ऐसी सुविधा है जो फ़िलहाल किसी दूसरे फ़ॉर्मैट में उपलब्ध नहीं है.

  • ऐनिमेशन: यह सही रंग वाली ऐनिमेटेड इमेज के साथ काम करता है.

  • मेटाडेटा: इसमें EXIF और XMP मेटाडेटा हो सकता है. उदाहरण के लिए, कैमरा इसका इस्तेमाल करता है.

  • रंग प्रोफ़ाइल: इसमें एक एम्बेड की गई ICC प्रोफ़ाइल हो सकती है.

इमेज के बेहतर तरीके से कंप्रेस होने और इन सभी सुविधाओं में काम करने की वजह से, WebP ज़्यादातर इमेज फ़ॉर्मैट: PNG, JPEG या GIF के लिए एक बेहतरीन विकल्प हो सकता है. पहले से बेहतर क्या आपको पता है कि WebP, इमेज ऑप्टिमाइज़ेशन के नए अवसरों को बढ़ावा देता है, जैसे कि पारदर्शिता की मदद से खराब इमेज के लिए सहायता पाना? जी हां! WebP, इमेज के लिए स्विस स्विस का चाकू है.

तो, यह जादू कैसे चलेगा? चलिए, आस्तीन और लुढ़कते हुए अपना ख्याल रखते हैं.

लोसी WebP

WebP's का नुकसान कम करने के लिए कंप्रेस करने का तरीका, वीडियो के फ़्रेम का अनुमान लगाने के लिए VP8 की तरह ही इस्तेमाल करता है. VP8, ब्लॉक करने के अनुमान पर आधारित होता है और किसी भी ब्लॉक-आधारित कोडेक की तरह, VP8, फ़्रेम को छोटे-छोटे सेगमेंट में बांटता है. इसे मैक्रोब्लॉक कहा जाता है.

हर मैक्रोब्लॉक में, एन्कोडर पहले से प्रोसेस किए गए ब्लॉक के आधार पर मोशन और कलर की जानकारी का अनुमान लगा सकता है. इमेज का फ़्रेम, कोट और कोट; इस तरह से होता है कि वह हर मैक्रोब्लॉक के तुरंत आस-पास के इलाके में पहले से डिकोड किए गए पिक्सल का इस्तेमाल करता है. साथ ही, उनमें मौजूद अनजान हिस्से को पेंट करने की कोशिश करता है. इसे अनुमानित कोडिंग कहा जाता है (VP8 वीडियो की इंट्रा-फ़्रेम कोडिंग देखें).

गै़र-ज़रूरी डेटा को ब्लॉक से घटाया जा सकता है. इससे, ज़्यादा बेहतर तरीके से कंप्रेस करने की प्रक्रिया पर असर पड़ेगा. हमारे पास बस एक छोटा सा अंतर है, जिसे कंप्रेस करना है. इसे रेज़िडेंट कहा जाता है.

गणित के हिसाब से उलटे जाने वाले बदलाव के तहत, DCT (जिसका मतलब है को छोड़कर कोसाइन को बदलना). आम तौर पर, इसके छोटे-छोटे हिस्सों में कई शून्य वैल्यू होती हैं, जिन्हें ज़्यादा असरदार तरीके से कंप्रेस किया जा सकता है. इसके बाद, नतीजे को आंकड़ों में मापा जाता है और एंट्रॉपी कोड किया जाता है. स्मार्ट तरीके से इस सुविधा का इस्तेमाल सिर्फ़ एक तरीका के तौर पर किया जाता है. एक बिट को नुकसान पहुंचाने की वजह से खारिज किया जाता है (नीचे दिए गए डायग्राम में, क्यूपी से भाग दें). बाकी सभी चरण उलटे नहीं जा सकते!

नीचे दिए गए डायग्राम में, WebP में नुकसान पहुंचाने वाले कंप्रेस करने के तरीके बताए गए हैं. JPEG की तुलना में अंतर वाली सुविधाओं को लाल रंग में दिखाया गया है.

WebP, ब्लॉक वॉल्यूम का इस्तेमाल करता है और बिट को अलग-अलग इमेज सेगमेंट में एडाप्टिव तरीके से बांटता है: कम एंट्रॉपी सेगमेंट के लिए कम बिट और ज़्यादा एंट्रॉपी सेगमेंट के लिए ज़्यादा बिट. WebP, अरिथमेटिक एंट्रॉपी एन्कोडिंग का इस्तेमाल करता है, ताकि JPEG में इस्तेमाल की गई हफ़मैन एन्कोडिंग की तुलना में बेहतर तरीके से कंप्रेस किया जा सके.

VP8, अनुमान का इस्तेमाल करने के तरीके

VP8 इंट्रा-प्रेडिक्शन मोड का इस्तेमाल तीन तरह के मैक्रोब्लॉक के साथ किया जाता है:

  • 4x4 लूमा
  • 16x16 लूमा
  • 8x8 क्रोमा

पांच सामान्य इंट्रा-प्रेडिक्शन मोड इन मैक्रोब्लॉक में शेयर किए जाते हैं:

  • H_PRED (हॉरिज़ॉन्टल अनुमान). ब्लॉक के हर कॉलम को बाएं कॉलम की कॉपी के साथ भरता है, L.

  • V_PRED (वर्टिकल अनुमान). ब्लॉक की हर पंक्ति ऊपर दी गई पंक्ति A, की एक कॉपी के साथ भरती है.

  • DC_PRED (DC का अनुमान). ब्लॉक को A मान के ऊपर की पंक्ति के औसत कॉलम और L की बाईं ओर के कॉलम का इस्तेमाल करके एक मान में भर देता है.

  • TM_PRED (TrueMotion का अनुमान). यह एक ऐसा मोड है जिसे कंप्रेस करने की तकनीक से इसकी पहचान मिली है. इसे On2 Technologies ने बनाया है. पंक्ति A और कॉलम L के अलावा, TM_PRED ऊपर दिए गए Pixel P और ब्लॉक की बाईं ओर मौजूद पिक्सल P का इस्तेमाल करता है. A (P से शुरू करके) में पिक्सल के बीच हॉरिज़ॉन्टल तौर पर अंतर दिखाने के लिए, L से पिक्सल का इस्तेमाल करके हर पंक्ति को शुरू किया जाता है.

नीचे दिए गए डायग्राम में, WebP में नुकसान पहुंचाने वाले कंप्रेस करने के लिए इस्तेमाल किए गए अलग-अलग अनुमान मोड दिखाए गए हैं.

4x4 लूमा ब्लॉक के लिए, V_PRED और H_PRED के समान छह अतिरिक्त इंट्रा मोड हैं, लेकिन वे अलग-अलग दिशा में पिक्सल का अनुमान लगाने के मुताबिक हैं. इन मोड के बारे में ज़्यादा जानकारी VP8 बिटस्ट्रीम गाइड में मिल सकती है.

स्वीकार किए जाने वाले ब्लॉक का आकलन

इमेज की क्वालिटी को बेहतर बनाने के लिए, इमेज को ऐसी जगहों पर बांटा जाता है जिनमें साफ़ तौर पर मिलती-जुलती सुविधाएं हैं. इनमें से हर सेगमेंट के लिए, कंप्रेस करने के पैरामीटर (संख्या देने के तरीके, फ़िल्टर करने का तरीका वगैरह) को अलग-अलग बदला जाता है. इससे बिट में सबसे ज़्यादा काम की जगह बिट में बंटकर असरदार तरीके से काम होता है. VP8, ज़्यादा से ज़्यादा चार सेगमेंट (VP8 बिटस्ट्रीम की सीमा) की अनुमति देता है.

WebP (लॉसी) फ़ॉर्मैट JPEG से बेहतर क्यों है

पूर्वानुमान कोडिंग, WebP पर JPEG जीतने की एक मुख्य वजह है. अडैप्टिव संख्या को ब्लॉक करने से भी बहुत फ़र्क़ पड़ता है. फ़िल्टर करने से मिड/कम बिटरेट पर मदद मिलती है. बूलियन अंकगणित के कोड में बदलने की सुविधा से, हफ़मैन एन्कोडिंग की तुलना में 5% से 10% तक का फ़ायदा मिलता है.

नुकसान न पहुंचाने वाला WebP

WebP-लॉसलेस एन्कोडिंग को बनाने के लिए, कई अलग-अलग तकनीकों का इस्तेमाल करके इमेज को बदला जाता है. फिर, एंट्रॉपी कोडिंग को ट्रांसफ़ॉर्म पैरामीटर और ट्रांसफ़ॉर्म इमेज डेटा में किया जाता है. इमेज पर किए गए बदलावों में, जगह की जानकारी का अनुमान लगाकर पिक्सल का पता लगाना, कलर स्पेस ट्रांसफ़ॉर्मेशन, स्थानीय रूप से उभरते हुए पैलेट का इस्तेमाल करना, एक पिक्सल में एक से ज़्यादा पिक्सल पैक करना, और ऐल्फ़ा रिप्लेसमेंट शामिल करना शामिल हैं. एंट्रॉपी कोडिंग के लिए, हम LZ77-Huffman कोडिंग का एक वैरिएंट इस्तेमाल करते हैं. इस में, डिस्टेंस वैल्यू के लिए 2D एन्कोडिंग और छोटे-छोटे पार्स वैल्यू का इस्तेमाल किया जाता है.

पूर्वानुमान (स्पेशल) बदलने की सुविधा

जगह का अनुमान लगाने की सुविधा का इस्तेमाल करके, एंट्रॉपी कम की जाती है. ऐसा करने के लिए, आस-पास के पिक्सल के बारे में कहा जाता है. अनुमानित बदलाव में, मौजूदा पिक्सल वैल्यू का अनुमान ऐसे पिक्सल से लगाया जाता है जिन्हें पहले से डिकोड किया गया हो (स्कैन-लाइन के क्रम में) और सिर्फ़ बचा हुआ बचा हुआ वैल्यू ही वास्तविक कोड में बदला जाता है. सुझाव मोड, यह तय करता है कि सुझाव किस तरह का होना चाहिए. इमेज को कई वर्ग क्षेत्रों में बांटा गया है और एक वर्ग में सभी पिक्सल एक ही अनुमान मोड का इस्तेमाल करते हैं.

अनुमान के लिए 13 अलग-अलग मोड हैं. पिछले हिस्से बाएं, ऊपर, बाएं, और ऊपर दाएं पिक्सल के तौर पर दिखते हैं. बाईं ओर वाले व्यू, बाईं, ऊपर, सबसे ऊपर बाईं ओर, और ऊपर दाईं ओर मौजूद मिले-जुले हैं.

रंग (डी-कोरिलेशन) पूरी तरह बदलें

रंग बदलने का लक्ष्य हर पिक्सल के आर, जी, और बी के मानों को सजाने का है. रंग में बदलाव करने से हरा (G) मान वही रहता है जो वह है. हरे रंग के आधार पर लाल (R) बदलता है, हरा रंग के आधार पर नीला (B) होता है, और फिर लाल रंग होता है.

जैसे कि अनुमान लगाने वाले को बदलने पर होता है, पहले इमेज को ब्लॉक में बांटा जाता है. साथ ही, ब्लॉक के सभी पिक्सल के लिए ट्रांसफ़ॉर्म मोड का इस्तेमाल किया जाता है. हर ब्लॉक के लिए, तीन तरह के रंग बदलने वाले एलिमेंट होते हैं: हरा_to_red, green_to_blue, और red_to_blue.

ग्रीन ट्रांसफ़ॉर्म घटाएं

"हरे रंग को घटाएं और कोट करें; हरे रंग के मान को लाल और नीले रंग के मान से घटा देता है. जब यह बदलाव मौजूद होता है, तो डीकोडर को लाल और नीले, दोनों तरह से हरे रंग की वैल्यू जोड़नी पड़ती है. यह एक खास मामला है, जिसके लिए ऊपर दिए गए रंग को सामान्य तरीके से सजाया गया है. एक कटऑफ़ वारंटी के लिए इतना ज़रूरी है.

कलर इंडेक्सिंग (पैलेट) ट्रांसफ़ॉर्मेशन

अगर कई यूनीक पिक्सल वैल्यू नहीं दी गई हैं, तो ज़्यादा बेहतर तरीके से कलर इंडेक्स अरे बनाई जा सकती है और पिक्सल की वैल्यू को श्रेणी और # इंडेक्स से बदला जा सकता है. रंग का इंडेक्स बदलने से ऐसा होता है. रंग के इंडेक्स करने की सुविधा की मदद से, इमेज में यूनीक ARGB वैल्यू की जांच की जाती है. अगर यह संख्या थ्रेशोल्ड (256) से कम है, तो यह एआरजीबी वैल्यू की श्रेणी बनाता है. इसका इस्तेमाल पिक्सल वैल्यू को संबंधित इंडेक्स से बदलने के लिए किया जाता है.

कलर कैश को कोड करना

नए पिक्सल बनाने के लिए, कम क्वालिटी वाले WebP कंप्रेस करने की सुविधा का इस्तेमाल, पहले से देखे गए इमेज फ़्रैगमेंट का इस्तेमाल करता है. अगर कोई दिलचस्प मिलान नहीं मिलता है, तो यह स्थानीय पैलेट का भी इस्तेमाल कर सकता है. हाल के रंगों का फिर से इस्तेमाल करने के लिए, इस पैलेट को लगातार अपडेट किया जाता है. नीचे दी गई फ़ोटो में, आप देख सकते हैं कि हाल ही में इस्तेमाल किए गए 32 रंगों में, स्थानीय रंग कैश मेमोरी में तेज़ी से अपडेट हो रहा है.

LZ77 बैकवर्ड रेफ़रंस

बैकवर्ड रेफ़रंस, लंबाई और दूरी के कोड के ग्रुप हैं. लंबाई से यह पता चलता है कि स्कैन-लाइन क्रम में कितने पिक्सल कॉपी किए जाने हैं. दूरी का कोड, वह संख्या है जिससे पता चलता है कि पिक्सल को पहले कहां देखा गया था. इसकी मदद से पिक्सल कॉपी किए जा सकते हैं. लंबाई और दूरी के मान को LZ77 प्रीफ़िक्स कोडिंग का इस्तेमाल करके सेव किया जाता है.

LZ77 प्रीफ़िक्स कोड में बड़ी वैल्यू को दो हिस्सों में बांटा जाता है: प्रीफ़िक्स कोड और अतिरिक्त बिट. प्रीफ़िक्स कोड को एंट्रॉपी कोड का इस्तेमाल करके सेव किया जाता है. हालांकि, अतिरिक्त बिट को उसी तरह सेव किया जाता है जैसे वे (एंट्रॉपी कोड के बिना).

नीचे दिया गया डायग्राम, LZ77 (2D वैरिएंट) को शब्द मिलान की सुविधा के साथ दिखाता है (पिक्सल के बजाय).

अल्फ़ा के साथ हानि वाला WebP

हानि वाले WebP (RGB रंग) और हानि न करने वाले WebP (ऐल्फ़ा के साथ कम हानि वाले RGB) के अलावा, एक और WebP मोड है जो RGB चैनल के लिए खराब एन्कोडिंग और ऐल्फ़ा चैनल के लिए हानि रहित एन्कोडिंग की अनुमति देता है. इस तरह की संभावना (नुकसान पहुंचाने वाला आरजीबी और बिना नुकसान वाला ऐल्फ़ा) आज भी किसी भी मौजूदा इमेज फ़ॉर्मैट के लिए उपलब्ध नहीं है. आज, जिन वेबमास्टर को पारदर्शिता की ज़रूरत है उन्हें बिना इमेज के इमेज को PNG में बदलना होता है, ताकि वे बड़े साइज़ के ब्लूट में पहुंच जाएं. WebP ऐल्फ़ा, कम बिट-हर पिक्सल की इमेज को कोड में बदलता है और ऐसी इमेज का साइज़ कम करने का असरदार तरीका देता है. ऐल्फ़ा चैनल को बेहतर तरीके से कंप्रेस करने से, 22% बाइट खराब हो जाती है (क्वालिटी 90) WebP एन्कोडिंग.

कुल मिलाकर, पारदर्शी PNG को नुकसान पहुंचाने वाले ऐल्फ़ा वर्शन से बदलने पर, 60-70% के साइज़ में औसतन बचत होती है. इसकी पुष्टि आइकॉन-मोबाइल साइटों के लिए एक बेहतरीन सुविधा के तौर पर की गई है (उदाहरण के लिए,whereing.me).