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

GIF फ़ॉर्मैट

Graphics Interchange Format

ब्लॉक वाला स्ट्रक्चर

GIF उन फ़ॉर्मैट में से है जो अपनी उम्मीद से कई दशक ज़्यादा जी गए। इसे 1987 में CompuServe ने बनाया था, और आज भी यह हर जगह मौजूद है, ख़ास तौर पर एनिमेशन की वजह से।

यह फ़ॉर्मैट ब्लॉक पर टिका है, जो आज के फ़ॉर्मैट के मुक़ाबले सुखद रूप से सीधा-सादा है। एक हेडर, कुछ डिस्क्रिप्टर, एक कलर टेबल, आपका इमेज डेटा, और "बस, ख़त्म" कहने के लिए एक बाइट का ट्रेलर।

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

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 बाइट
GIF87a या GIF89a
LSD
7 बाइट
Logical Screen Descriptor
GCT
768 बाइट
ग्लोबल कलर टेबल (ज़रूरी नहीं)
Extensions
100 बाइट
एक्सटेंशन ब्लॉक (मेटाडेटा)
Image Data
लंबाई बदलती रहती है
इमेज डिस्क्रिप्टर + LZW डेटा
Trailer
1 बाइट
0x3B टर्मिनेटर

GIF हेडर

GIF सिग्नेचर
वर्ज़न (89a)
चौड़ाई (640)
ऊँचाई (480)
पैक्ड फ़ील्ड
बैकग्राउंड इंडेक्स
पिक्सल आस्पेक्ट रेशियो
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

वर्ज़न में फ़र्क़

GIF87a

पहला स्पेक। कोई एक्सटेंशन ब्लॉक नहीं।

GIF89a

इसमें एक्सटेंशन, एनिमेशन और पारदर्शिता जुड़े।

एक्सटेंशन ब्लॉक

GIF89a (1989 वाला संस्करण) में एक्सटेंशन ब्लॉक जुड़े, और इसी से GIF को एनिमेशन मिला। हर एक्सटेंशन ब्लॉक 0x21 से शुरू होता है और उसके बाद एक टाइप बाइट आता है, जिससे फ़ाइल खंगालते वक़्त इन्हें पहचानना आसान रहता है। इनमें से कुछ हमें रखने होते हैं (एनिमेशन की टाइमिंग), कुछ हटाने होते हैं (कमेंट)।

Graphic Control Extension (0xF9)

एनिमेशन की टाइमिंग, पारदर्शिता और disposal मेथड संभालता है। एनिमेटेड GIF में हर इमेज डिस्क्रिप्टर से पहले आता है। हमेशा बचाकर रखा जाता है।

21 F9 04 [disposal] [delay] [transparent] 00

Comment Extension (0xFE)

सादे टेक्स्ट वाले कमेंट। इनमें कुछ भी हो सकता है, जैसे लेखक का नाम, बनने की तारीख़, सॉफ़्टवेयर या निजी नोट्स। PicScrub इसे हटा देता है।

21 FE [size] [comment data...] 00

Application Extension (0xFF)

किसी एप्लिकेशन का अपना डेटा। सबसे अहम: एनिमेशन दोहराने के लिए NETSCAPE2.0. इसमें XMP मेटाडेटा भी हो सकता है।

21 FF 0B [app identifier] [auth code] [data...] 00

Plain Text Extension (0x01)

बहुत कम इस्तेमाल होता है। GIF की कलर टेबल से टेक्स्ट दिखाता है। आजकल के सॉफ़्टवेयर इसे ज़्यादातर अनदेखा कर देते हैं।

Application Extension

NETSCAPE2.0:एनिमेशन का लूप

तय करता है कि एनिमेटेड GIF कितनी बार दोहराया जाए। वैल्यू 0 हो तो अनगिनत बार।

एक्सटेंशन की शुरुआत
ब्लॉक का साइज़ (11)
NETSCAPE2.0
sub-block का साइज़
sub-block का ID
लूप की गिनती
टर्मिनेटर
OffsetHexASCII
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 को कैसे प्रोसेस करता है

1

हेडर की जाँच

GIF87a या GIF89a सिग्नेचर देखना

2

हेडर का डेटा कॉपी करना

LSD और ग्लोबल कलर टेबल को जस का तस रखना

3

एक्सटेंशन छाँटना

NETSCAPE2.0 और Graphic Control रखना, Comment और XMP हटाना

4

इमेज डेटा बचाना

सारे इमेज डिस्क्रिप्टर, LCT और LZW डेटा जस के तस कॉपी करना

5

ट्रेलर लिखना

फ़ाइल को 0x3B ट्रेलर बाइट पर ख़त्म करना

LZW कंप्रेशन

GIF के इमेज डेटा पर एक छोटी सी बात: यह LZW कंप्रेशन इस्तेमाल करता है, जो 2004 तक पेटेंट में था (और नब्बे के दशक में इससे ख़ूब बवाल मचा)। PicScrub कंप्रेस किए हुए डेटा को छूता तक नहीं। हम उसे बाइट-दर-बाइट कॉपी कर देते हैं, यानी क्वालिटी में ज़रा भी फ़र्क़ नहीं।

यह क्यों मायने रखता है

ओरिजिनल LZW डेटा बचाकर रखने से PicScrub यह पक्का करता है:

  • • क्वालिटी में कोई कमी नहीं (इमेज बिट-दर-बिट वैसी की वैसी)
  • • तेज़ प्रोसेसिंग (डिकोड/एन्कोड का चक्कर ही नहीं)
  • • इमेज डेटा का साइज़ बिल्कुल वही

GIF के मेटाडेटा की सीमाएँ

GIF के बारे में अच्छी बात यह है कि यह EXIF स्टैंडर्ड से भी पुराना है, इसलिए यहाँ GPS कोऑर्डिनेट या कैमरे की जानकारी की चिंता ही नहीं। मेटाडेटा से जुड़ी दिक़्क़तें यहाँ कहीं मामूली हैं।

क्या लीक हो सकता है

JPEG के मुक़ाबले GIF में प्राइवेसी की चिंता काफ़ी कम है:

  • • Comment extension (कभी-कभी इनमें लेखक के नोट्स होते हैं)
  • • XMP मेटाडेटा (कम मिलता है, पर मुमकिन है)
  • • application ब्लॉक में सॉफ़्टवेयर की पहचान