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محفوظ (reserved)
000ڈسپوزل طریقہ
0یوزر اِن پٹ کا انتظار
1شفافیت آن
امیج ڈسکرپٹر 0x00
0لوکل کلر ٹیبل موجود ہے
0انٹرلیسڈ
0پیلیٹ اہمیت کے لحاظ سے ترتیب شدہ
00محفوظ (reserved)
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 کی سپورٹ ادھوری ہے۔
  • ٹیسٹس اور mocks جنہیں تصویر کی فائل ساتھ رکھے بغیر اصلی تصویر درکار ہو۔

ٹریکنگ پکسلز اتنے قابلِ اعتماد نہیں جتنے لگتے ہیں

جب Mail Privacy Protection آن ہو تو Apple Mail ریموٹ تصاویر پراکسی کے ذریعے پہلے سے لوڈ کر لیتا ہے، اس لیے ممکن ہے کوئی “اوپن” کسی انسان نے کیا ہی نہ ہو۔ Gmail بھی تصاویر اپنی پراکسی سے لاتا اور کیش کرتا ہے۔ کئی کلائنٹس ریموٹ تصاویر ڈیفالٹ طور پر بلاک کرتے ہیں۔ صفحے کے اینالیٹکس کے لیے navigator.sendBeacon() یا 204 No Content رسپانس اکثر تصویر سے بہتر رہتا ہے۔

سوالات

جب اس میں پکسل ہے تو اسے خالی کیوں کہتے ہیں؟
GIF میں کم از کم ایک پکسل ہونا ضروری ہے۔ یہ فائل 1×1 کی ہے اور اس کا واحد رنگ شفاف قرار دیا گیا ہے، اس لیے کچھ نظر نہیں آتا۔
کیا 43 بائٹ کی فائل درست ہے؟
ہاں۔ یہ GIF89a اسپیسیفکیشن کی مکمل پیروی کرتی ہے، اور اوپر والے ٹیبل کا ہر انجن اسے شفاف دکھاتا ہے۔
PNG یا WebP کے بجائے GIF کیوں؟
یہ کم سے کم شفاف PNG سے بھی چھوٹی ہے، اور پچھلے 35 سال کا ہر براؤزر، ای میل کلائنٹ اور امیج لائبریری اسے پڑھ سکتی ہے۔
data URI استعمال کروں یا فائل؟
data URI ایک درخواست بچاتا ہے اور پلیس ہولڈرز اور CSS کے لیے موزوں ہے۔ جب درخواست بذاتِ خود مقصد ہو، جیسے ٹریکنگ پکسلز میں، تو فائل یا اینڈ پوائنٹ درکار ہوتا ہے۔
کون سا Content-Type بھیجوں؟
image/gif۔ اگر ہر درخواست کا آپ کے سرور تک پہنچنا ضروری ہو تو Cache-Control: no-store شامل کریں۔