पीएनजी प्रारूप के लिए एक प्राथमिक प्रेरणा जीआईएफ के लिए एक प्रतिस्थापन बनाना था जो न केवल मुफ्त था, बल्कि अनिवार्य रूप से सभी मामलों में इस पर सुधार भी था। नतीजतन, पीएनजी संपीड़न पूरी तरह से दोषरहित है - अर्थात्, मूल छवि डेटा को ठीक से, बिट के लिए बिट - बस जीआईएफ में और टीआईएफएफ के अधिकांश रूपों के रूप में फिर से बनाया जा सकता है।
पीएनजी 2-चरण संपीड़न प्रक्रिया का उपयोग करता है:
- पूर्व संपीड़न: फ़िल्टरिंग (भविष्यवाणी)
- संपीड़न: DEFLATE ( विकिपीडिया देखें )
प्रीकम्प्रेशन चरण को फ़िल्टरिंग कहा जाता है, जो छवि डेटा को विपरीत रूप से बदलने की एक विधि है, ताकि मुख्य संपीड़न इंजन अधिक कुशलता से काम कर सके।
एक साधारण उदाहरण के रूप में, बाइट्स के एक क्रम को 1 से 255 तक समान रूप से बढ़ाने पर विचार करें:
1, 2, 3, 4, 5, .... 255
चूंकि अनुक्रम में कोई पुनरावृत्ति नहीं है, यह या तो बहुत खराब तरीके से संपीड़ित करता है या बिल्कुल भी नहीं। लेकिन अनुक्रम का एक मामूली संशोधन - अर्थात्, पहली बाइट को अकेला छोड़ देना लेकिन प्रत्येक बाद की बाइट को उसके और उसके पूर्ववर्ती के बीच के अंतर से बदलना - अनुक्रम को एक अत्यंत संपीड़ित सेट में बदल देता है:
1, 1, 1, 1, 1, .... 1
उपरोक्त परिवर्तन दोषरहित है, क्योंकि कोई बाइट्स छोड़ा नहीं गया था, और पूरी तरह से प्रतिवर्ती है। इस श्रृंखला का संकुचित आकार बहुत कम हो जाएगा, लेकिन मूल श्रृंखला अभी भी पूरी तरह से पुनर्गठित की जा सकती है।
वास्तविक छवि-डेटा शायद ही कभी सही होता है, लेकिन फ़िल्टरिंग ग्रेस्केल और ट्रुकॉलर चित्रों में संपीड़न में सुधार करता है, और यह कुछ पैलेट छवियों पर भी मदद कर सकता है। पीएनजी पांच प्रकार के फिल्टर का समर्थन करता है, और एक एनकोडर छवि में पिक्सेल की प्रत्येक पंक्ति के लिए एक अलग फिल्टर का उपयोग करने का चयन कर सकता है:
एल्गोरिथ्म बाइट्स पर काम करता है, लेकिन बड़े पिक्सल के लिए (जैसे, 24-बिट आरजीबी या 64-बिट आरजीबीए) केवल इसी बाइट्स की तुलना की जाती है, जिसका अर्थ है कि पिक्सेल-रंगों के लाल घटकों को हरे और नीले पिक्सेल-घटकों से अलग-अलग संभाला जाता है।
प्रत्येक पंक्ति के लिए सबसे अच्छा फिल्टर चुनने के लिए, एक एनकोडर को सभी संभावित संयोजनों का परीक्षण करने की आवश्यकता होगी। यह स्पष्ट रूप से असंभव है, क्योंकि 20-पंक्ति की छवि के लिए 95 ट्रिलियन संयोजनों पर परीक्षण की आवश्यकता होगी, जहां "परीक्षण" में संपूर्ण छवि को फ़िल्टर करना और संपीड़ित करना शामिल होगा।
संपीड़न स्तर को आमतौर पर 0 (कोई नहीं) और 9 (सर्वश्रेष्ठ) के बीच की संख्या के रूप में परिभाषित किया जाता है। ये गति और आकार के बीच के ट्रेडऑफ़ को संदर्भित करते हैं, और पंक्ति-फ़िल्टर के कितने संयोजनों से संबंधित होने की कोशिश की जाती है। इन संपीड़न स्तरों के संबंध में कोई मानक नहीं हैं, इसलिए प्रत्येक छवि-संपादक के पास अपने स्वयं के एल्गोरिदम हो सकते हैं कि छवि-आकार का अनुकूलन करते समय कितने फ़िल्टर आज़माने होंगे।
संपीड़न स्तर 0 का मतलब है कि फिल्टर का उपयोग बिल्कुल नहीं किया जाता है, जो तेज लेकिन बेकार है। उच्च स्तर का मतलब है कि छवि-पंक्तियों पर अधिक से अधिक संयोजनों की कोशिश की जाती है और केवल सबसे अच्छे लोगों को रखा जाता है।
मुझे लगता है कि सबसे अच्छा संपीड़न के लिए सबसे सरल दृष्टिकोण प्रत्येक फिल्टर के साथ प्रत्येक पंक्ति को वृद्धिशील रूप से परीक्षण-संपीड़ित करना है, सबसे छोटे परिणाम को बचाएं, और अगली पंक्ति के लिए दोहराएं। यह पूरी छवि को पांच बार फ़िल्टर करने और संपीड़ित करने की मात्रा है, जो एक ऐसी छवि के लिए एक उचित व्यापार-बंद हो सकती है जो कई बार प्रसारित और डिकोड हो जाएगी। उपकरण के डेवलपर के विवेक पर कम संपीड़न मान कम होगा।
फ़िल्टर के अतिरिक्त, संपीड़न स्तर zlib संपीड़न स्तर को भी प्रभावित कर सकता है जो कि 0 (कोई अपस्फीति) और 9 (अधिकतम अपस्फीति) के बीच की संख्या है। निर्दिष्ट 0-9 स्तर फ़िल्टर के उपयोग को कैसे प्रभावित करते हैं, जो कि पीएनजी की मुख्य अनुकूलन सुविधा है, अभी भी उपकरण के डेवलपर पर निर्भर है।
निष्कर्ष यह है कि पीएनजी में एक संपीड़न पैरामीटर है जो फ़ाइल-आकार को काफी कम कर सकता है, सभी एक पिक्सेल के नुकसान के बिना भी।
सूत्रों का कहना है:
विकिपीडिया पोर्टेबल नेटवर्क ग्राफिक्स
डॉक्यूमेंटेशन अध्याय 9 का उपयोग - संपीड़न और फ़िल्टरिंग