GIF फ़ॉर्मैट
Graphics Interchange Format
ब्लॉक वाला स्ट्रक्चर
GIF उन फ़ॉर्मैट में से है जो अपनी उम्मीद से कई दशक ज़्यादा जी गए। इसे 1987 में CompuServe ने बनाया था, और आज भी यह हर जगह मौजूद है, ख़ास तौर पर एनिमेशन की वजह से।
यह फ़ॉर्मैट ब्लॉक पर टिका है, जो आज के फ़ॉर्मैट के मुक़ाबले सुखद रूप से सीधा-सादा है। एक हेडर, कुछ डिस्क्रिप्टर, एक कलर टेबल, आपका इमेज डेटा, और "बस, ख़त्म" कहने के लिए एक बाइट का ट्रेलर।
GIF फ़ाइल का स्ट्रक्चर
GIF हेडर
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
वर्ज़न में फ़र्क़
पहला स्पेक। कोई एक्सटेंशन ब्लॉक नहीं।
इसमें एक्सटेंशन, एनिमेशन और पारदर्शिता जुड़े।
एक्सटेंशन ब्लॉक
GIF89a (1989 वाला संस्करण) में एक्सटेंशन ब्लॉक जुड़े, और इसी से GIF को एनिमेशन मिला। हर एक्सटेंशन ब्लॉक 0x21 से शुरू होता है और उसके बाद एक टाइप बाइट आता है, जिससे फ़ाइल खंगालते वक़्त इन्हें पहचानना आसान रहता है। इनमें से कुछ हमें रखने होते हैं (एनिमेशन की टाइमिंग), कुछ हटाने होते हैं (कमेंट)।
Graphic Control Extension (0xF9)
एनिमेशन की टाइमिंग, पारदर्शिता और disposal मेथड संभालता है। एनिमेटेड GIF में हर इमेज डिस्क्रिप्टर से पहले आता है। हमेशा बचाकर रखा जाता है।
Comment Extension (0xFE)
सादे टेक्स्ट वाले कमेंट। इनमें कुछ भी हो सकता है, जैसे लेखक का नाम, बनने की तारीख़, सॉफ़्टवेयर या निजी नोट्स। PicScrub इसे हटा देता है।
Application Extension (0xFF)
किसी एप्लिकेशन का अपना डेटा। सबसे अहम: एनिमेशन दोहराने के लिए NETSCAPE2.0. इसमें XMP मेटाडेटा भी हो सकता है।
Plain Text Extension (0x01)
बहुत कम इस्तेमाल होता है। GIF की कलर टेबल से टेक्स्ट दिखाता है। आजकल के सॉफ़्टवेयर इसे ज़्यादातर अनदेखा कर देते हैं।
Application Extension
NETSCAPE2.0:एनिमेशन का लूप
तय करता है कि एनिमेटेड GIF कितनी बार दोहराया जाए। वैल्यू 0 हो तो अनगिनत बार।
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
एनिमेशन वैसा ही चलता रहे, इसलिए PicScrub, NETSCAPE2.0 को बचाकर रखता है।
XMP Data:Extensible Metadata Platform
एप्लिकेशन का आइडेंटिफ़ायर: XMP DataXMP. इसमें XML फ़ॉर्मैट में पूरा XMP/RDF मेटाडेटा रहता है।
PicScrub, XMP वाले application extension हटा देता है।
एनिमेशन बचाए रखना
GIF में असली पेच यह है कि एनिमेशन का डेटा (जो रखना है) और मेटाडेटा (जो हटाना है), दोनों में फ़र्क़ करना पड़ता है। दोनों एक्सटेंशन ब्लॉक में ही रहते हैं, इसलिए हम सारे एक्सटेंशन एक साथ नहीं हटा सकते।
एनिमेशन के लिए बचाया गया
- • NETSCAPE2.0 लूप की गिनती
- • Graphic Control Extension
- • फ़्रेम के बीच का अंतराल
- • disposal मेथड
- • पारदर्शिता के इंडेक्स
- • लोकल कलर टेबल
हटाया गया
- • Comment extension
- • XMP वाले application ब्लॉक
- • अनजाने application ब्लॉक
- • Plain text extension
PicScrub, GIF को कैसे प्रोसेस करता है
हेडर की जाँच
GIF87a या GIF89a सिग्नेचर देखना
हेडर का डेटा कॉपी करना
LSD और ग्लोबल कलर टेबल को जस का तस रखना
एक्सटेंशन छाँटना
NETSCAPE2.0 और Graphic Control रखना, Comment और XMP हटाना
इमेज डेटा बचाना
सारे इमेज डिस्क्रिप्टर, LCT और LZW डेटा जस के तस कॉपी करना
ट्रेलर लिखना
फ़ाइल को 0x3B ट्रेलर बाइट पर ख़त्म करना
LZW कंप्रेशन
GIF के इमेज डेटा पर एक छोटी सी बात: यह LZW कंप्रेशन इस्तेमाल करता है, जो 2004 तक पेटेंट में था (और नब्बे के दशक में इससे ख़ूब बवाल मचा)। PicScrub कंप्रेस किए हुए डेटा को छूता तक नहीं। हम उसे बाइट-दर-बाइट कॉपी कर देते हैं, यानी क्वालिटी में ज़रा भी फ़र्क़ नहीं।
यह क्यों मायने रखता है
ओरिजिनल LZW डेटा बचाकर रखने से PicScrub यह पक्का करता है:
- • क्वालिटी में कोई कमी नहीं (इमेज बिट-दर-बिट वैसी की वैसी)
- • तेज़ प्रोसेसिंग (डिकोड/एन्कोड का चक्कर ही नहीं)
- • इमेज डेटा का साइज़ बिल्कुल वही
GIF के मेटाडेटा की सीमाएँ
GIF के बारे में अच्छी बात यह है कि यह EXIF स्टैंडर्ड से भी पुराना है, इसलिए यहाँ GPS कोऑर्डिनेट या कैमरे की जानकारी की चिंता ही नहीं। मेटाडेटा से जुड़ी दिक़्क़तें यहाँ कहीं मामूली हैं।
क्या लीक हो सकता है
JPEG के मुक़ाबले GIF में प्राइवेसी की चिंता काफ़ी कम है:
- • Comment extension (कभी-कभी इनमें लेखक के नोट्स होते हैं)
- • XMP मेटाडेटा (कम मिलता है, पर मुमकिन है)
- • application ब्लॉक में सॉफ़्टवेयर की पहचान