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 ઉમેરો.