पीएनजी फाइल क्या है?
A PNG (पोर्टेबल नेटवर्क ग्राफ़िक्स) फ़ाइल एक रेखापुंज छवि फ़ाइल स्वरूप है जो दोषरहित संपीड़न का उपयोग करता है। यह फ़ाइल प्रारूप ग्राफ़िक्स इंटरचेंज फ़ॉर्मेट (GIF) के प्रतिस्थापन के रूप में बनाया गया था और इसकी कोई कॉपीराइट सीमाएँ नहीं हैं। हालाँकि, PNG फ़ाइल स्वरूप एनिमेशन का समर्थन नहीं करता है। पीएनजी फ़ाइल प्रारूप दोषरहित छवि संपीड़न का समर्थन करता है जो इसे अपने उपयोगकर्ताओं के बीच लोकप्रिय बनाता है। समय बीतने के साथ, पीएनजी व्यापक रूप से उपयोग की जाने वाली छवि फ़ाइल स्वरूपों में से एक के रूप में विकसित हुई है।
PNG फ़ाइल स्वरूप का संक्षिप्त इतिहास
पीएनजी फ़ाइल प्रारूप के निर्माण के पीछे मुख्य कारण जीआईएफ फ़ाइल प्रारूप में प्रयुक्त पेटेंट संपीड़न एल्गोरिदम, लेम्पेल-ज़िव-वेल्च था। अन्य जीआईएफ सीमाओं के साथ इसने GIF फ़ाइल प्रारूप के प्रतिस्थापन की आवश्यकता पैदा की। पीएनजी फ़ाइल प्रारूप के लिए पहला प्रस्ताव और नाम जनवरी 1995 में आया था। पीएनजी फ़ाइल स्वरूपों के संबंध में प्रमुख घटनाएँ नीचे सूचीबद्ध हैं:
- अक्टूबर 1996: PNG विनिर्देश संस्करण 1.0 जारी किया गया और बाद में RFC 2083 के रूप में दिखाई दिया। अक्टूबर 1996 में यह W3C अनुशंसा बन गया।
- दिसंबर 1998: संस्करण 1.1, कुछ छोटे बदलावों और तीन नए हिस्सों को जोड़ने के साथ जारी किया गया था।
- अगस्त 1999: संस्करण 1.2, एक अतिरिक्त चंक जोड़कर जारी किया गया था।
- नवंबर 2003: PNG एक अंतर्राष्ट्रीय मानक बन गया (ISO/IEC 15948:2003)। पीएनजी का यह संस्करण संस्करण 1.2 से केवल थोड़ा अलग है और कोई नया हिस्सा नहीं जोड़ता है।
- मार्च 2004: आईएसओ/आईईसी 15948:2004
GIF और PNG की कार्यात्मक तुलना
पीएनजी फ़ाइल प्रारूप को सरल और पोर्टेबल, कानूनी रूप से अभारग्रस्त, विनिमेय, लचीला और मजबूत होने के लिए डिज़ाइन किया गया था। निम्न तालिका उन GIF सुविधाओं को सूचीबद्ध करती है जो नई सुविधाओं के साथ-साथ PNG फ़ाइल स्वरूप द्वारा इनहेरिट की गई हैं।
फीचर | जीआईएफ | पीएनजी |
---|---|---|
इंडेक्स-कलर इमेज 256 रंगों तक | हां | हां |
स्ट्रीमिंग के लिए समर्थन | हां | हां |
पारदर्शिता | हां | हां |
सहायक जानकारी | हां | हां |
हार्डवेयर और प्लेटफार्म इंडिपेंडेंस | हां | हां |
प्रभावी | हां | हां |
प्रति पिक्सेल 48 बिट तक की ट्रू कलर छवियां | नहीं | हां |
प्रति पिक्सेल 16 बिट तक की ग्रेस्केल छवियां | नहीं | हां |
पूर्ण अल्फा चैनल (सामान्य पारदर्शिता मास्क) | नहीं | हां |
इमेज गामा जानकारी | नहीं | हां |
विश्वसनीयता | नहीं | हां |
तेजी से प्रारंभिक प्रस्तुति | नहीं | हां |
पीएनजी फ़ाइल संरचना
लगभग सभी ऑपरेटिंग सिस्टम में PNG फाइलें खोलने के लिए सपोर्ट है। उदाहरण के लिए, माइक्रोसॉफ्ट विंडोज व्यूअर में पीएनजी फाइलों को खोलने की क्षमता है क्योंकि ओएस में डिफ़ॉल्ट रूप से इंस्टॉलेशन के हिस्से के रूप में समर्थन उपलब्ध है। पीएनजी फाइल में पीएनजी सिग्नेचर
होता है, जिसके बाद // भाग // की एक श्रृंखला होती है।
पीएनजी फाइल हैडर
PNG फ़ाइल के पहले आठ बाइट्स में हमेशा निम्नलिखित (दशमलव) मान होते हैं:
{{{137 80 78 71 13 10 26 10 }}}
यह हस्ताक्षर इंगित करता है कि शेष फ़ाइल में एक PNG छवि है, जिसमें IHDR चंक से शुरू होने वाले और IEND चंक के साथ समाप्त होने वाले चंक्स की एक श्रृंखला शामिल है।
हिस्सा
प्रत्येक चंक में चार भाग होते हैं:
लंबाई: चंक के डेटा फ़ील्ड में बाइट्स की संख्या देने वाला 4-बाइट अहस्ताक्षरित पूर्णांक। लंबाई केवल डेटा फ़ील्ड की गणना करती है, स्वयं की नहीं, चंक प्रकार कोड या CRC की। शून्य एक वैध लंबाई है। हालांकि एनकोडर और डिकोडर को लंबाई को अहस्ताक्षरित मानना चाहिए, इसका मान 231 बाइट्स से अधिक नहीं होना चाहिए।
चंक प्रकार: एक 4-बाइट चंक प्रकार कोड। विवरण में सुविधा के लिए और पीएनजी फाइलों की जांच में, टाइप कोड अपरकेस और लोअरकेस ASCII अक्षरों (AZ और az, या 65-90 और 97-122 दशमलव) से मिलकर प्रतिबंधित हैं। हालांकि, एनकोडर और डिकोडर को कोड को फिक्स्ड बाइनरी वैल्यू के रूप में मानना चाहिए, कैरेक्टर स्ट्रिंग्स के रूप में नहीं। उदाहरण के लिए, उन अक्षरों के EBCDIC समकक्षों द्वारा टाइप कोड IDAT का प्रतिनिधित्व करना सही नहीं होगा। चंक प्रकारों के लिए अतिरिक्त नामकरण परिपाटियों पर अगले भाग में चर्चा की गई है।
चंक डेटा: चंक प्रकार के लिए उपयुक्त डेटा बाइट, यदि कोई हो। यह क्षेत्र शून्य लंबाई का हो सकता है।
CRC: एक 4-बाइट CRC (साइक्लिक रिडंडेंसी चेक) की गणना चंक में पूर्ववर्ती बाइट्स पर की जाती है, जिसमें चंक टाइप कोड और चंक डेटा फ़ील्ड शामिल हैं, लेकिन लंबाई फ़ील्ड शामिल नहीं है। बिना डेटा वाले चंक्स के लिए भी CRC हमेशा मौजूद रहता है।
चंक डेटा की लंबाई अधिकतम बाइट्स की कोई भी संख्या हो सकती है; इसलिए, कार्यान्वयनकर्ता यह नहीं मान सकते हैं कि टुकड़े बाइट्स से बड़ी किसी भी सीमा पर संरेखित हैं।
चंक्स किसी भी क्रम में दिखाई दे सकते हैं, प्रत्येक चंक प्रकार पर लगाए गए प्रतिबंधों के अधीन। (एक उल्लेखनीय प्रतिबंध यह है कि IHDR को पहले और IEND को सबसे अंत में प्रदर्शित होना चाहिए; इस प्रकार IEND चंक फ़ाइल के अंत के मार्कर के रूप में कार्य करता है।) एक ही प्रकार के कई भाग दिखाई दे सकते हैं, लेकिन केवल तभी जब उस प्रकार के लिए विशेष रूप से अनुमति दी गई हो।
चंक प्रकार
चंक प्रकार को चंक प्रकार को निर्दिष्ट 4-बाइट केस-संवेदी ASCII मान के आधार पर महत्वपूर्ण और अनुषंगी चंक में वर्गीकृत किया गया है। सभी कार्यान्वयनों को मानक महत्वपूर्ण हिस्सों को समझना और सफलतापूर्वक प्रस्तुत करना चाहिए। एक मान्य PNG इमेज में एक IHDR चंक, एक या अधिक IDAT चंक और एक IEND चंक होना चाहिए।
संपीड़न
पीएनजी संपीड़न विधि 0 (वर्तमान में पीएनजी के लिए परिभाषित एकमात्र संपीड़न विधि) अधिकतम 32768 बाइट्स की स्लाइडिंग विंडो के साथ संपीड़न को कम करना/फुलाना निर्दिष्ट करती है। डिफ्लेट संपीड़न एक LZ77 व्युत्पन्न है जिसका उपयोग ज़िप, gzip, pkzip और संबंधित कार्यक्रमों में किया जाता है। इसकी पेटेंट-मुक्त स्थिति का समर्थन करने के लिए व्यापक शोध किया गया है। Zlib डेटास्ट्रीम के भीतर संपीड़ित डेटा को ब्लॉक की एक श्रृंखला के रूप में संग्रहीत किया जाता है, जिनमें से प्रत्येक कच्चे (असम्पीडित) डेटा का प्रतिनिधित्व कर सकता है, निश्चित हफमैन कोड के साथ एन्कोडेड LZ77-संपीड़ित डेटा, या कस्टम हफ़मैन कोड के साथ एन्कोडेड LZ77-संपीड़ित डेटा। अंतिम ब्लॉक में एक मार्कर बिट इसे अंतिम ब्लॉक के रूप में पहचानता है, डिकोडर को संपीड़ित डेटास्ट्रीम के अंत को पहचानने की अनुमति देता है।
पूर्व-संपीड़न फ़िल्टरिंग
इष्टतम संपीड़न के लिए छवि डेटा तैयार करने के लिए पूर्व-संपीड़न फ़िल्टर लागू किए जाते हैं। PNG फ़िल्टर विधि पाँच बुनियादी फ़िल्टर प्रकारों को निम्नानुसार परिभाषित करती है:
फ़िल्टर प्रकार | नाम | अनुमानित मान |
---|---|---|
0 | कोई नहीं | स्कैनलाइन को बिना संशोधित किए ट्रांसमिट किया जाता है |
1 | उप | प्रत्येक बाइट और पिछले पिक्सेल के संबंधित बाइट के बीच के अंतर को प्रसारित करता है। |
2 | अप | अप () फिल्टर सब () फिल्टर की तरह ही है, सिवाय इसके कि वर्तमान पिक्सेल के ठीक ऊपर के पिक्सेल, इसके बाईं ओर के बजाय, भविष्यवक्ता के रूप में उपयोग किया जाता है। |
3 | औसत | औसत() फ़िल्टर पिक्सेल के मान का अनुमान लगाने के लिए दो पड़ोसी पिक्सेल (बाएं और ऊपर) के औसत का उपयोग करता है। |
4 | Paeth | Paeth() फ़िल्टर तीन पड़ोसी पिक्सेल (बाएं, ऊपर, ऊपरी बाएं) के एक साधारण रैखिक फ़ंक्शन की गणना करता है, फिर गणना किए गए मान के निकटतम पड़ोसी पिक्सेल को भविष्यवक्ता के रूप में चुनता है। |
फ़िल्टरिंग एल्गोरिदम बाइट्स
पर लागू होते हैं, पिक्सेल पर नहीं, छवि की बिट गहराई या रंग प्रकार पर ध्यान दिए बिना। फ़िल्टरिंग एल्गोरिदम स्कैनलाइन द्वारा गठित बाइट अनुक्रम पर काम करते हैं। अगर छवि में अल्फा चैनल शामिल है, तो अल्फा डेटा उसी तरह फ़िल्टर किया जाता है जैसे छवि डेटा।
जब छवि को इंटरलेस किया जाता है, तो इंटरलेस पैटर्न के प्रत्येक पास को फ़िल्टरिंग उद्देश्यों के लिए एक स्वतंत्र छवि के रूप में माना जाता है। फ़िल्टर वास्तव में एक पास के दौरान प्रेषित पिक्सेल द्वारा गठित बाइट अनुक्रमों पर काम करते हैं, और “पिछला स्कैनलाइन” वह है जो पहले उसी पास में प्रेषित होता है, न कि पूरी छवि में आसन्न। ध्यान दें कि किसी एक पास में प्रेषित उपछवि हमेशा आयताकार होती है, लेकिन पूरी छवि की तुलना में कम चौड़ाई और/या ऊंचाई की होती है। यह सबइमेज खाली होने पर फ़िल्टरिंग लागू नहीं होती है।