emptygif
भाषा: हिन्दी

सबसे छोटा ट्रांसपेरेंट GIF 43 बाइट का होता है।

पूरी फ़ाइल बस इतनी ही है। कोई भी बाइट चुनें और देखें कि वह क्या करता है, फिर फ़ाइल कॉपी करें, डाउनलोड करें, हॉटलिंक करें, या अपने कोड से सर्व करें।

43 बाइट का GIF, बड़ा करके दिखाया गया: एक ट्रांसपेरेंट पिक्सेल
0000
0010
0020
1×1.gif डाउनलोड करें

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

हर बाइट क्या करता है

GIF ब्लॉकों का एक क्रम होता है। इसमें सात ब्लॉक हैं, और इस पेज का हर रंग उनमें से किसी एक का है। पढ़ने के लिए कोई बाइट या ब्लॉक चुनें। नंबर little-endian में स्टोर होते हैं: लो बाइट पहले आता है, इसलिए 01 00 का मतलब 1 है।

बाइटफ़ील्डमतलब
हेडर डिकोडर को बताता है कि यह GIF है और फ़ॉर्मेट का कौन-सा वर्ज़न अपेक्षित है।
47 49 46सिग्नेचरASCII अक्षर “GIF”। हर GIF फ़ाइल इन्हीं से शुरू होती है।
38 39 61वर्ज़न“89a”। ट्रांसपेरेंसी के लिए 89a ज़रूरी है; 87a में ग्राफ़िक कंट्रोल एक्सटेंशन नहीं होता।
लॉजिकल स्क्रीन डिस्क्रिप्टर कैनवस का साइज़ और उसकी कलर टेबल का सेटअप।
01 00कैनवस की चौड़ाई1 px।
01 00कैनवस की ऊँचाई1 px।
80पैक्ड फ़्लैगएक बाइट में चार सेटिंग्स समाई हैं। सबसे ऊपरी बिट बताता है कि आगे ग्लोबल कलर टेबल है; आख़िरी तीन बिट उसका साइज़ बताते हैं।
00बैकग्राउंड कलर इंडेक्सपैलेट एंट्री 0। ब्राउज़र इसे अनदेखा करते हैं और इमेज के पीछे जो है, वही दिखाते हैं।
00पिक्सेल आस्पेक्ट रेशियो0 का मतलब चौकोर पिक्सेल, कोई करेक्शन नहीं।
ग्लोबल कलर टेबल पैलेट। पिक्सेल में रंग नहीं, बल्कि इस लिस्ट का इंडेक्स स्टोर होता है।
FF FF FFपैलेट एंट्रीलाल, हरा और नीला, हर एक के लिए एक बाइट: #ffffff। दो एंट्री वाली टेबल किसी GIF की सबसे छोटी संभव टेबल है।
00 00 00पैलेट एंट्रीलाल, हरा और नीला, हर एक के लिए एक बाइट: #000000। दो एंट्री वाली टेबल किसी GIF की सबसे छोटी संभव टेबल है।
ग्राफ़िक कंट्रोल एक्सटेंशन GIF89a में जोड़ा गया वैकल्पिक ब्लॉक। यहाँ यह पैलेट एंट्री 0 को ट्रांसपेरेंट बनाता है।
21एक्सटेंशन इंट्रोड्यूसर0x21 (“!”) बताता है कि आगे एक्सटेंशन ब्लॉक है।
F9ग्राफ़िक कंट्रोल लेबल0xF9 बताता है कि यह एक्सटेंशन ग्राफ़िक कंट्रोल एक्सटेंशन है।
04ब्लॉक साइज़आगे 4 बाइट की सेटिंग्स हैं।
01पैक्ड फ़्लैगसबसे निचला बिट ट्रांसपेरेंसी फ़्लैग है। यह ऑन है, इसलिए नीचे दिया गया ट्रांसपेरेंट इंडेक्स इस्तेमाल होता है।
00 00डिलेसेकंड के 0 सौवें हिस्से। यह सिर्फ़ ऐनिमेशन में मायने रखता है।
00ट्रांसपेरेंट कलर इंडेक्सपैलेट एंट्री 0 पूरी तरह ट्रांसपेरेंट ड्रॉ होती है।
00ब्लॉक टर्मिनेटरशून्य लंबाई का सब-ब्लॉक, जो ब्लॉक को बंद करता है।
इमेज डिस्क्रिप्टर इमेज कैनवस पर कहाँ है और कितनी बड़ी है।
2Cइमेज सेपरेटर0x2C (“,”) से इमेज शुरू होती है।
00 00लेफ़्टइमेज कैनवस के बाएँ किनारे से 0 px पर शुरू होती है।
00 00टॉपइमेज कैनवस के ऊपरी किनारे से 0 px पर शुरू होती है।
01 00इमेज की चौड़ाई1 px।
01 00इमेज की ऊँचाई1 px।
00पैक्ड फ़्लैगकोई लोकल कलर टेबल नहीं, इंटरलेस्ड नहीं। इमेज ग्लोबल पैलेट इस्तेमाल करती है।
इमेज डेटा पिक्सेल, जो LZW से कंप्रेस होकर 255 बाइट तक के सब-ब्लॉकों में बँटे हैं।
02LZW मिनिमम कोड साइज़2, इसलिए कंप्रेस्ड कोड शुरू में 3 बिट चौड़े होते हैं।
02सब-ब्लॉक साइज़आगे 2 बाइट कंप्रेस्ड डेटा है।
44 01कंप्रेस्ड पिक्सेलLZW कोड, सबसे निचले बिट से ऊपर की ओर पैक किए गए। ये कैसे डिकोड होते हैं, नीचे देखें।
00ब्लॉक टर्मिनेटरशून्य लंबाई का सब-ब्लॉक, जो ब्लॉक को बंद करता है।
ट्रेलर एक बाइट, जो फ़ाइल का अंत दर्शाता है।
3Bट्रेलर0x3B (“;”) फ़ाइल को ख़त्म करता है।

पैक्ड बाइट्स के अंदर

तीन बाइट ऐसे हैं, जिनमें से हर एक में कई छोटी सेटिंग्स रखी हैं। बिट 7 सबसे बाईं ओर है।

लॉजिकल स्क्रीन डिस्क्रिप्टर 0x80
1ग्लोबल कलर टेबल मौजूद
000कलर रेज़ोल्यूशन
0पैलेट महत्व के क्रम में सॉर्टेड
000टेबल साइज़: 2^(n+1) एंट्री
ग्राफ़िक कंट्रोल एक्सटेंशन 0x01
000रिज़र्व्ड
000डिस्पोज़ल मेथड
0यूज़र इनपुट का इंतज़ार
1ट्रांसपेरेंसी ऑन
इमेज डिस्क्रिप्टर 0x00
0लोकल कलर टेबल मौजूद
0इंटरलेस्ड
0पैलेट महत्व के क्रम में सॉर्टेड
00रिज़र्व्ड
000लोकल टेबल साइज़

दो बाइट में एक पिक्सेल कैसे आता है

मिनिमम कोड साइज़ 2 होने पर डिकोडर 3-बिट कोड पढ़ता है। कोड 4 टेबल को क्लियर करता है, कोड 5 इमेज ख़त्म करता है, और कोड 0 से 3 पैलेट एंट्री हैं। बाइट 44 01 सबसे निचले बिट से ऊपर की ओर पढ़े जाते हैं:

0x44 010001000x01 00000001

  1. 001100 = 4क्लियर: नई टेबल से शुरुआत
  2. 000000 = 0पिक्सेल: पैलेट एंट्री 0
  3. 101101 = 5इमेज का अंत
  4. 0000000 इस्तेमाल न होने वाले पैडिंग बिट

बड़ी इमेज में भी यही तरकीब काम करती है: हर नया कोड पिछले कोड से एक पिक्सेल लंबे रन को दर्शाता है, इसलिए 1000×1000 का ट्रांसपेरेंट GIF सिर्फ़ 1,743 बाइट का होता है।

क्या यह और छोटा हो सकता है?

हाँ, अगर आप वे हिस्से हटा दें जिनके बिना भी डिकोडर काम चला लेते हैं। हमने हर वैरिएंट को तीन ब्राउज़र इंजन और Pillow में खोला और दर्ज किया कि उन्होंने क्या ड्रॉ किया।

साइज़वैरिएंटChromiumFirefoxWebKitPillow
43इस पेज की स्टैंडर्ड फ़ाइल।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंट
42ट्रेलर बाइट नहीं। डिकोडर वैसे भी डेटा ख़त्म होने पर रुक जाते हैं।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंट
37कोई पैलेट नहीं। फिर भी वैलिड: स्पेसिफ़िकेशन डिकोडर को अपना पैलेट इस्तेमाल करने की छूट देता है, और इंडेक्स 0 वैसे भी ट्रांसपेरेंट है।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंट
36न पैलेट, न ट्रेलर।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंट
35ट्रांसपेरेंसी ब्लॉक नहीं: पिक्सेल पैलेट कलर 0 यानी सफ़ेद रंग में ड्रॉ होता है।सफ़ेदसफ़ेदसफ़ेदसफ़ेद
351987 का फ़ॉर्मेट। इसमें किसी रंग को ट्रांसपेरेंट मार्क करने का कोई तरीक़ा नहीं है।सफ़ेदसफ़ेदसफ़ेदसफ़ेद
34ट्रांसपेरेंसी ब्लॉक है, पर कंप्रेस्ड पिक्सेल नहीं।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटएरर
33वही, पर बिना ट्रेलर के।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटएरर
29न पैलेट, न ट्रांसपेरेंसी। हर इंजन अपना रंग ख़ुद चुनता है।कालासफ़ेदट्रांसपेरेंटकाला
26ऐसी इमेज, जिसमें कोई कंप्रेस्ड डेटा है ही नहीं।ट्रांसपेरेंटट्रांसपेरेंटट्रांसपेरेंटएरर
14सिर्फ़ हेडर, कैनवस साइज़ और ट्रेलर। इसमें कोई इमेज नहीं है।ट्रांसपेरेंटएररट्रांसपेरेंटएरर

जब फ़ाइल को हर जगह चलना ही हो, तो 43 बाइट वाली इस्तेमाल करें। 37 बाइट वाली भी वैलिड GIF है और हमारे जाँचे हर इंजन में ट्रांसपेरेंट दिखी। इससे छोटी फ़ाइलों में आप डिकोडर की नरमी पर निर्भर होते हैं, और 29 बाइट की फ़ाइल दिखाती है कि इंजन आपस में कितने अलग नतीजे देते हैं।

23 सितंबर 2026 को Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0 पर जाँचा गया।

किसी भी साइज़ का बनाएँ

ट्रांसपेरेंट या एक ठोस रंग, 1×1 से 65535×65535 तक। यह आपके ब्राउज़र में ही बनता है; कुछ भी अपलोड नहीं होता।

फ़िल
आम साइज़

1×1 · 43 बाइट

GIF डाउनलोड करें

अपने स्टैक से सर्व करें

173 स्निपेट, चलाने के लिए तैयार। अपना चुनें: हर स्निपेट आपके चुने पाथ पर image/gif रिस्पॉन्स देता है। अगर आपने ऊपर साइज़ या रंग बदला है, तो स्निपेट वही GIF इस्तेमाल करते हैं।

Elixir, Erlang & Gleam

Express JavaScript

इंस्टॉल
npm i express
फ़ाइल
server.mjs
चलाएँ
node server.mjs
import express from 'express';

const GIF = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');

const app = express();

app.get('/pixel.gif', (req, res) => {
  res.set('Cache-Control', 'no-store');
  res.type('gif').send(GIF);
});

app.listen(8080);

हमने यह स्निपेट चलाया और इसके लौटाए बाइट्स की तुलना की। पेज खोलें

इसका इस्तेमाल किसलिए होता है

  • ट्रैकिंग पिक्सेल और बीकन: सर्वर रिक्वेस्ट लॉग करता है और सबसे छोटी वैलिड इमेज से जवाब देता है।
  • lazy-load होने वाली इमेज के प्लेसहोल्डर, ताकि असली सोर्स आने से पहले भी img टैग वैलिड रहे।
  • HTML ईमेल में फ़िक्स्ड साइज़ के स्पेसर, जहाँ CSS सपोर्ट अधूरा है।
  • टेस्ट और मॉक, जिन्हें असली इमेज चाहिए, पर कोई इमेज फ़ाइल साथ रखे बिना।

ट्रैकिंग पिक्सेल उतने भरोसेमंद नहीं, जितने दिखते हैं

Mail Privacy Protection ऑन होने पर Apple Mail रिमोट इमेज को प्रॉक्सी के ज़रिए पहले ही लोड कर लेता है, इसलिए हो सकता है कि कोई “open” किसी इंसान ने किया ही न हो। Gmail भी इमेज अपने प्रॉक्सी से फ़ेच करके कैश करता है। कई क्लाइंट रिमोट इमेज डिफ़ॉल्ट रूप से ब्लॉक करते हैं। पेज एनालिटिक्स के लिए इमेज के बजाय अक्सर navigator.sendBeacon() या 204 No Content रिस्पॉन्स बेहतर रहता है।

सवाल

पिक्सेल होते हुए भी इसे empty क्यों कहते हैं?
GIF में कम से कम एक पिक्सेल होना ज़रूरी है। यह 1×1 है और इसका इकलौता रंग ट्रांसपेरेंट मार्क किया गया है, इसलिए कुछ नहीं दिखता।
क्या 43 बाइट की फ़ाइल वैलिड है?
हाँ। यह GIF89a स्पेसिफ़िकेशन का पूरी तरह पालन करती है, और ऊपर की टेबल का हर इंजन इसे ट्रांसपेरेंट ड्रॉ करता है।
PNG या WebP के बजाय GIF क्यों?
यह सबसे छोटे ट्रांसपेरेंट PNG से भी छोटा है, और पिछले 35 सालों का हर ब्राउज़र, ईमेल क्लाइंट और इमेज लाइब्रेरी इसे पढ़ सकती है।
data URI इस्तेमाल करूँ या फ़ाइल?
data URI एक रिक्वेस्ट बचाता है और प्लेसहोल्डर व CSS के लिए सही है। जब रिक्वेस्ट ही असली मक़सद हो, जैसे ट्रैकिंग पिक्सेल में, तब फ़ाइल या endpoint चाहिए।
कौन-सा Content-Type भेजूँ?
image/gif। अगर हर रिक्वेस्ट का आपके सर्वर तक पहुँचना ज़रूरी है, तो Cache-Control: no-store जोड़ें।