PicScrub logoPicScrub
फ़ॉर्मैट पर वापस जाएँ

PNG फ़ॉर्मैट

Portable Network Graphics

chunk पर टिका स्ट्रक्चर

PNG का फ़ाइल फ़ॉर्मैट सबसे साफ़-सुथरे फ़ॉर्मैट में से एक है। सब कुछ "chunk" में बँटा होता है, यानी अपने आप में पूरे ब्लॉक, जिनका अपना टाइप, डेटा और चेकसम होता है। ख़ूबसूरत बात यह है कि जो chunk डिकोडर को समझ नहीं आते, वह उन्हें छोड़ सकता है, और इसी वजह से PNG पुराने सॉफ़्टवेयर को तोड़े बिना मेटाडेटा रख पाता है।

असली चतुराई chunk के नाम रखने में है: अगर पहला अक्षर कैपिटल है, तो वह "critical" है (उसके बिना इमेज दिखेगी ही नहीं)। छोटा अक्षर मतलब "ancillary", यानी हो तो अच्छा, पर ज़रूरी नहीं। मेटाडेटा वाले जितने chunk से हमें मतलब है, वे सब ancillary हैं, इसीलिए हम उन्हें बेफ़िक्र होकर हटा सकते हैं।

PNG फ़ाइल का स्ट्रक्चर

Signature
IHDR
Metadata
IDAT
IEND
Signature
8 बाइट
89 50 4E 47 0D 0A 1A 0A
IHDR
25 बाइट
इमेज हेडर (ज़रूरी)
Metadata
100 बाइट
tEXt, iTXt, eXIf chunk
IDAT
लंबाई बदलती रहती है
कंप्रेस किया हुआ इमेज डेटा
IEND
12 बाइट
इमेज के अंत का मार्कर

PNG सिग्नेचर और IHDR

PNG सिग्नेचर
IHDR की लंबाई (13)
IHDR टाइप
चौड़ाई (256)
ऊँचाई (256)
बिट डेप्थ, कलर टाइप वग़ैरह
OffsetHexASCII
0000
89504E470D0A1A0A0000000D49484452
.PNG........IHDR
0010
00000100000001000802000000000000
.............

chunk का स्ट्रक्चर

LengthTypeDataCRC32
4 बाइट4 बाइटबदलती रहती है4 बाइट

chunk के नाम रखने का नियम

  • • पहला अक्षर कैपिटल = critical chunk (समझना ज़रूरी है)
  • • पहला अक्षर छोटा = ancillary chunk (ज़रूरी नहीं, छोड़ा जा सकता है)
  • • दूसरा अक्षर = पब्लिक (कैपिटल) या प्राइवेट (छोटा)

critical chunk

इमेज के सही होने के लिए इन chunk का मौजूद होना और समझा जाना ज़रूरी है। PicScrub critical chunk को हमेशा बचाकर रखता है।

IHDR:इमेज हेडर

सिग्नेचर के बाद पहला chunk। इसमें चौड़ाई, ऊँचाई, बिट डेप्थ, कलर टाइप, कंप्रेशन मेथड, फ़िल्टर मेथड और इंटरलेस मेथड होते हैं। डेटा ठीक 13 बाइट का होता है।

IDAT:इमेज डेटा

इसमें कंप्रेस किया हुआ (zlib/deflate) इमेज डेटा रहता है। यह कई IDAT chunk में बँट सकता है। सभी IDAT chunk एक के बाद एक होने चाहिए।

IEND:इमेज का अंत

यह PNG डेटास्ट्रीम के ख़त्म होने का निशान है। यह आख़िरी chunk होना चाहिए। इसमें डेटा के शून्य बाइट होते हैं।

PLTE:पैलेट

इंडेक्स्ड कलर इमेज (कलर टाइप 3) के लिए ज़रूरी। इसमें 1 से 256 तक RGB पैलेट एंट्री होती हैं।

मेटाडेटा वाले chunk

ये ancillary chunk हैं, जिनमें प्राइवेसी के लिहाज़ से संवेदनशील मेटाडेटा हो सकता है। PicScrub इन्हीं chunk को हटाता है।

tEXt:बिना कंप्रेस किया टेक्स्ट

Latin-1 एन्कोडिंग में key-value जोड़े। आम keys: Author, Description, Copyright, Creation Time, Software.

Format: keyword + null + text

zTXt:कंप्रेस किया टेक्स्ट

tEXt जैसा ही, बस zlib कंप्रेशन के साथ। लंबे टेक्स्ट के लिए इस्तेमाल होता है।

iTXt:अंतरराष्ट्रीय टेक्स्ट

UTF-8 टेक्स्ट, कंप्रेशन के साथ भी और बिना भी। इसमें भाषा के टैग और अनूदित keyword रखे जा सकते हैं। XMP मेटाडेटा इसी में आता है।

XMP keyword: XML:com.adobe.xmp\0

eXIf:EXIF डेटा

2017 में PNG के एक्सटेंशन के तौर पर दर्ज हुआ। इसमें TIFF फ़ॉर्मैट में कच्चा EXIF डेटा रहता है, ठीक वैसा ही जैसा JPEG के EXIF में होता है। इसमें GPS, तारीख़ और समय, डिवाइस की जानकारी हो सकती है।

iCCP:ICC कलर प्रोफ़ाइल

फ़ाइल में जुड़ी ICC कलर प्रोफ़ाइल, zlib से कंप्रेस की हुई। रंग सही दिखें, इसलिए PicScrub इसे डिफ़ॉल्ट रूप से रहने देता है।

tIME:आख़िरी बदलाव का समय

सात बाइट: साल (2), महीना, दिन, घंटा, मिनट, सेकंड। इससे पता चलता है कि इमेज में आख़िरी बार कब बदलाव हुआ।

रंग से जुड़े chunk

ये chunk रंग दिखने के तरीके पर असर डालते हैं, पर आम तौर पर इनमें कोई निजी जानकारी नहीं होती। PicScrub इन्हें डिफ़ॉल्ट रूप से रहने देता है।

sRGB

बताता है कि कलर स्पेस sRGB है। रेंडरिंग इंटेंट के लिए एक बाइट।

gAMA

गामा वैल्यू, 4 बाइट के अनसाइन्ड इंटीजर के रूप में (1,00,000 से गुणा करके)।

cHRM

प्राइमरी क्रोमैटिसिटी और व्हाइट पॉइंट के कोऑर्डिनेट।

sBIT

हर चैनल की ओरिजिनल सैंपल बिट डेप्थ।

CRC32 की जाँच

हर PNG chunk के साथ एक CRC32 चेकसम रहता है, जो chunk के टाइप और डेटा पर निकाला जाता है। इससे डेटा की सलामती पक्की होती है।

CRC कैसे निकलता है

CRC32 input = chunk_type (4 bytes) + chunk_data (N bytes)
CRC32 output = 4 bytes appended after chunk data

// PNG इस CRC-32 पॉलिनोमियल का इस्तेमाल करता है: 0xEDB88320

PicScrub, CRC क्यों जाँचता है

PNG फ़ाइल पढ़ते समय PicScrub हर chunk का CRC जाँचता है, ताकि डेटा सही-सलामत रहे। ख़राब chunk को वह संभालकर निपटा देता है।

PicScrub, PNG को कैसे प्रोसेस करता है

1

सिग्नेचर जाँचना

PNG सिग्नेचर देखना: 89 50 4E 47 0D 0A 1A 0A

2

chunk पढ़ना

हर chunk की लंबाई और टाइप पढ़ना, और CRC जाँचना

3

मेटाडेटा वाले chunk छाँटना

tEXt, zTXt, iTXt, eXIf, tIME chunk पहचानकर छोड़ देना

4

फ़ाइल दोबारा बनाना

सिग्नेचर + छाँटे हुए chunk + IEND लिखना

जो chunk बचे रहते हैं

  • • IHDR, PLTE, IDAT, IEND (critical)
  • • sRGB, gAMA, cHRM (रंग)
  • • iCCP (कलर प्रोफ़ाइल, आपकी मर्ज़ी)
  • • pHYs (पिक्सल के डाइमेंशन)
  • • tRNS (पारदर्शिता)

जो chunk हट जाते हैं

  • • tEXt (टेक्स्ट मेटाडेटा)
  • • zTXt (कंप्रेस किया टेक्स्ट)
  • • iTXt (अंतरराष्ट्रीय टेक्स्ट, XMP)
  • • eXIf (EXIF डेटा)
  • • tIME (बदलाव का समय)