सर्वात लहान ट्रान्सपरंट GIF 43 बाइटचा असतो.
संपूर्ण फाइल एवढीच आहे. कोणताही बाइट निवडा आणि तो काय करतो ते पाहा, मग फाइल कॉपी करा, डाउनलोड करा, हॉटलिंक करा किंवा तुमच्या स्वतःच्या कोडमधून सर्व्ह करा.

प्रत्येक बाइट काय करतो
GIF म्हणजे ब्लॉक्सचा एक क्रम. यात सात ब्लॉक्स आहेत, आणि या पेजवरचा प्रत्येक रंग त्यापैकी एका ब्लॉकचा आहे. वाचण्यासाठी एखादा बाइट किंवा ब्लॉक निवडा. संख्या little-endian पद्धतीने स्टोअर होतात: लो बाइट आधी येतो, म्हणून 01 00 म्हणजे 1.
| बाइट | फील्ड | अर्थ |
|---|---|---|
| हेडर डिकोडरला सांगतो की हा GIF आहे आणि फॉरमॅटचे कोणते व्हर्जन अपेक्षित आहे. | ||
| 47 49 46 | सिग्नेचर | ASCII अक्षरे “GIF”. प्रत्येक GIF फाइल यांनीच सुरू होते. |
| 38 39 61 | व्हर्जन | “89a”. ट्रान्सपरन्सीसाठी 89a आवश्यक आहे; 87a मध्ये ग्राफिक कंट्रोल एक्स्टेंशन नसतो. |
| लॉजिकल स्क्रीन डिस्क्रिप्टर कॅनव्हासचा साइज आणि त्याच्या कलर टेबलची रचना. | ||
| 01 00 | कॅनव्हासची रुंदी | १ px. |
| 01 00 | कॅनव्हासची उंची | १ px. |
| 80 | पॅक्ड फ्लॅग्ज | एका बाइटमध्ये चार सेटिंग्ज बसवल्या आहेत. सर्वात वरचा बिट सांगतो की पुढे ग्लोबल कलर टेबल आहे; शेवटचे तीन बिट त्याचा साइज सांगतात. |
| 00 | बॅकग्राउंड कलर इंडेक्स | पॅलेट एंट्री ०. ब्राउझर याकडे दुर्लक्ष करतात आणि इमेजच्या मागे जे आहे तेच दाखवतात. |
| 00 | पिक्सेल आस्पेक्ट रेशो | 0 म्हणजे चौरस पिक्सेल, कोणतेही करेक्शन नाही. |
| ग्लोबल कलर टेबल पॅलेट. पिक्सेलमध्ये रंग नव्हे, तर या यादीतील इंडेक्स स्टोअर होतो. | ||
| FF FF FF | पॅलेट एंट्री | लाल, हिरवा आणि निळा, प्रत्येकी एक बाइट: #ffffff. दोन एंट्रीचे टेबल हे GIF मध्ये शक्य असलेले सर्वात लहान टेबल आहे. |
| 00 00 00 | पॅलेट एंट्री | लाल, हिरवा आणि निळा, प्रत्येकी एक बाइट: #000000. दोन एंट्रीचे टेबल हे GIF मध्ये शक्य असलेले सर्वात लहान टेबल आहे. |
| ग्राफिक कंट्रोल एक्स्टेंशन GIF89a मध्ये जोडलेला ऐच्छिक ब्लॉक. इथे तो पॅलेट एंट्री 0 ट्रान्सपरंट करतो. | ||
| 21 | एक्स्टेंशन इंट्रोड्यूसर | 0x21 (“!”) पुढे एक्स्टेंशन ब्लॉक असल्याचे सांगतो. |
| F9 | ग्राफिक कंट्रोल लेबल | 0xF9 सांगतो की हे एक्स्टेंशन ग्राफिक कंट्रोल एक्स्टेंशन आहे. |
| 04 | ब्लॉक साइज | पुढे ४ बाइटच्या सेटिंग्ज आहेत. |
| 01 | पॅक्ड फ्लॅग्ज | सर्वात खालचा बिट ट्रान्सपरन्सी फ्लॅग आहे. तो ऑन आहे, म्हणून खाली दिलेला ट्रान्सपरंट इंडेक्स वापरला जातो. |
| 00 00 | डिले | सेकंदाचे ० शतांश भाग. हे फक्त ॲनिमेशनसाठी महत्त्वाचे असते. |
| 00 | ट्रान्सपरंट कलर इंडेक्स | पॅलेट एंट्री ० पूर्णपणे ट्रान्सपरंट ड्रॉ होते. |
| 00 | ब्लॉक टर्मिनेटर | शून्य लांबीचा सब-ब्लॉक, जो ब्लॉक बंद करतो. |
| इमेज डिस्क्रिप्टर इमेज कॅनव्हासवर कुठे आहे आणि किती मोठी आहे. | ||
| 2C | इमेज सेपरेटर | 0x2C (“,”) पासून इमेज सुरू होते. |
| 00 00 | लेफ्ट | इमेज कॅनव्हासच्या डाव्या कडेपासून ० px वर सुरू होते. |
| 00 00 | टॉप | इमेज कॅनव्हासच्या वरच्या कडेपासून ० px वर सुरू होते. |
| 01 00 | इमेजची रुंदी | १ px. |
| 01 00 | इमेजची उंची | १ px. |
| 00 | पॅक्ड फ्लॅग्ज | लोकल कलर टेबल नाही, इंटरलेस्ड नाही. इमेज ग्लोबल पॅलेट वापरते. |
| इमेज डेटा पिक्सेल, LZW ने कॉम्प्रेस करून जास्तीत जास्त 255 बाइटच्या सब-ब्लॉक्समध्ये विभागलेले. | ||
| 02 | LZW मिनिमम कोड साइज | २, म्हणून कॉम्प्रेस्ड कोड सुरुवातीला ३ बिट रुंद असतात. |
| 02 | सब-ब्लॉक साइज | पुढे २ बाइट कॉम्प्रेस्ड डेटा आहे. |
| 44 01 | कॉम्प्रेस्ड पिक्सेल | सर्वात खालच्या बिटपासून वर पॅक केलेले LZW कोड. ते कसे डिकोड होतात ते खाली पाहा. |
| 00 | ब्लॉक टर्मिनेटर | शून्य लांबीचा सब-ब्लॉक, जो ब्लॉक बंद करतो. |
| ट्रेलर फाइलचा शेवट दाखवणारा एक बाइट. | ||
| 3B | ट्रेलर | 0x3B (“;”) फाइल संपवतो. |
पॅक्ड बाइट्सच्या आत
तीन बाइट असे आहेत की प्रत्येकात अनेक छोट्या सेटिंग्ज आहेत. बिट 7 सर्वात डावीकडे आहे.
0x800x010x00दोन बाइटमध्ये एक पिक्सेल कसा बसतो
मिनिमम कोड साइज 2 असताना डिकोडर 3-बिट कोड वाचतो. कोड 4 टेबल क्लिअर करतो, कोड 5 इमेज संपवतो, आणि कोड 0 ते 3 पॅलेट एंट्री आहेत. बाइट 44 01 सर्वात खालच्या बिटपासून वर वाचले जातात:
0x44 010001000x01 00000001
- 001100 = 4क्लिअर: नवीन टेबलने सुरुवात
- 000000 = 0पिक्सेल: पॅलेट एंट्री ०
- 101101 = 5इमेजचा शेवट
- 0000000 न वापरलेले पॅडिंग बिट
मोठ्या इमेजमध्येही हीच युक्ती वापरली जाते: प्रत्येक नवीन कोड आधीच्या कोडपेक्षा एक पिक्सेल लांब रन दर्शवतो, म्हणून 1000×1000 चा ट्रान्सपरंट GIF फक्त १,७४३ बाइटचा होतो.
तो आणखी लहान होऊ शकतो का?
हो, जर तुम्ही असे भाग काढून टाकले जे नसले तरी डिकोडर चालवून घेतात. आम्ही प्रत्येक व्हेरिएंट तीन ब्राउझर इंजिन आणि Pillow मध्ये उघडला आणि त्यांनी काय ड्रॉ केले ते नोंदवले.
| साइज | व्हेरिएंट | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| ४३ | या पेजवरची स्टँडर्ड फाइल. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट |
| ४२ | ट्रेलर बाइट नाही. डिकोडर तसेही डेटा संपल्यावर थांबतात. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट |
| ३७ | पॅलेट अजिबात नाही. तरीही वैध: स्पेसिफिकेशन डिकोडरला स्वतःचे पॅलेट वापरण्याची मुभा देते, आणि इंडेक्स 0 तसाही ट्रान्सपरंट आहे. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट |
| ३६ | पॅलेटही नाही आणि ट्रेलरही नाही. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट |
| ३५ | ट्रान्सपरन्सी ब्लॉक नाही: पिक्सेल पॅलेट कलर 0 म्हणजे पांढऱ्या रंगात ड्रॉ होतो. | पांढरा | पांढरा | पांढरा | पांढरा |
| ३५ | 1987 चा फॉरमॅट. यात एखादा रंग ट्रान्सपरंट म्हणून मार्क करण्याचा कोणताही मार्ग नाही. | पांढरा | पांढरा | पांढरा | पांढरा |
| ३४ | ट्रान्सपरन्सी ब्लॉक आहे, पण कॉम्प्रेस्ड पिक्सेल नाहीत. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | एरर |
| ३३ | तेच, पण ट्रेलरशिवाय. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | एरर |
| २९ | पॅलेटही नाही आणि ट्रान्सपरन्सीही नाही. प्रत्येक इंजिन स्वतःचा रंग निवडते. | काळा | पांढरा | ट्रान्सपरंट | काळा |
| २६ | अशी इमेज, जिच्यात कॉम्प्रेस्ड डेटाच नाही. | ट्रान्सपरंट | ट्रान्सपरंट | ट्रान्सपरंट | एरर |
| १४ | फक्त हेडर, कॅनव्हास साइज आणि ट्रेलर. यात कोणतीही इमेज नाही. | ट्रान्सपरंट | एरर | ट्रान्सपरंट | एरर |
फाइल सगळीकडे चालणे आवश्यक असेल तर 43 बाइटची फाइल वापरा. 37 बाइटची फाइलही वैध GIF आहे आणि आम्ही तपासलेल्या प्रत्येक इंजिनमध्ये ट्रान्सपरंट दिसली. त्याहून लहान फाइल्समध्ये तुम्ही डिकोडरच्या सैलपणावर अवलंबून असता, आणि 29 बाइटची फाइल दाखवते की इंजिन्सचे निकाल एकमेकांशी कसे जुळत नाहीत.
२३ सप्टेंबर, २०२६ रोजी Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0 वर तपासले.
कोणत्याही साइजचा बनवा
ट्रान्सपरंट किंवा एकाच रंगाने भरलेला, 1×1 पासून 65535×65535 पर्यंत. तो तुमच्या ब्राउझरमध्येच तयार होतो; काहीही अपलोड होत नाही.
हॉटलिंक करा
कोणत्याही साइट, ईमेल किंवा ॲपमधून या फाइल्सना थेट लिंक करा. त्या Cloudflare च्या edge वरून दीर्घ कॅश कालावधीसह सर्व्ह होतात, आणि CORS सर्वांसाठी खुले आहे.
- 43 बाइटची फाइल
https://emptygif.com/1x1.gif - कोणताही साइज, ट्रान्सपरंट
https://emptygif.com/px/300x250.gif - कोणताही साइज, एकच रंग
https://emptygif.com/px/300x250/ff5a1f.gif - JSON API: साइज, base64 आणि data URI
https://emptygif.com/api/gif?w=300&h=250 - सर्व स्निपेट JSON मध्ये
https://emptygif.com/snippets.json - AI एजंट्ससाठी सारांश
https://emptygif.com/llms.txt
रिस्पॉन्स हेडर
HTTP/2 200
content-type: image/gif
content-length: 43
cache-control: public, max-age=31536000, immutable
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
timing-allow-origin: *उदाहरण
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
जनरेट केलेले साइज प्रत्येक बाजूला 4096 px पर्यंत असतात. तुमच्याकडे जास्त ट्रॅफिक असेल तर कृपया फाइल डाउनलोड करून स्वतः होस्ट करा.
तुमच्या स्टॅकमधून सर्व्ह करा
चालवायला तयार १७३ स्निपेट. तुमचा निवडा: प्रत्येक स्निपेट तुम्ही निवडलेल्या पाथवर image/gif रिस्पॉन्स देतो. तुम्ही वर साइज किंवा रंग बदलला असेल, तर स्निपेट तोच GIF वापरतात.
JavaScript & TypeScript
Edge & serverless
- Cloudflare Workers
- Cloudflare Workers (Rust, workers-rs)
- Cloudflare Pages Functions
- Deno Deploy (deno serve)
- Vercel Functions
- Netlify Functions
- Netlify Edge Functions
- AWS Lambda (Node.js)
- AWS Lambda (Python)
- AWS Lambda (Go)
- AWS Lambda (Rust, lambda_http)
- AWS Lambda@Edge (CloudFront)
- Google Cloud Run functions (Node.js)
- Google Cloud Run functions (Python)
- Firebase Cloud Functions + Hosting
- Azure Functions (Node.js v4 model)
- Fastly Compute (JavaScript)
Python
JVM
PHP
Elixir, Erlang & Gleam
Functional languages
C, C++ & systems languages
Swift, Dart & other languages
Web servers & proxies
Command line & one-liners
Express JavaScript
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जोडा.