43 byte ang pinakamaliit na transparent GIF.
Ito na ang kabuuan nito. Pumili ng kahit anong byte para makita kung ano ang ginagawa nito, saka kopyahin ang file, i-download, i-hotlink, o i-serve mula sa sarili mong code.

Ano ang ginagawa ng bawat byte
Ang GIF ay sunud-sunod na mga block. Pito ang block nito, at bawat kulay sa page na ito ay kabilang sa isa sa mga iyon. Pumili ng byte o block para basahin ito. Naka-store ang mga numero bilang little-endian: nauuna ang low byte, kaya ang 01 00 ay nangangahulugang 1.
| Mga byte | Field | Kahulugan |
|---|---|---|
| Header Sinasabi nito sa decoder na GIF ito at kung aling bersyon ng format ang aasahan. | ||
| 47 49 46 | Signature | Ang mga ASCII na letrang “GIF”. Dito nagsisimula ang bawat GIF file. |
| 38 39 61 | Bersyon | “89a”. Kailangan ang 89a para sa transparency; walang graphic control extension ang 87a. |
| Descriptor ng logical screen Ang laki ng canvas at kung paano naka-set up ang color table nito. | ||
| 01 00 | Lapad ng canvas | 1 px. |
| 01 00 | Taas ng canvas | 1 px. |
| 80 | Mga packed flag | Apat na setting na pinagsiksik sa iisang byte. Sinasabi ng pinakamataas na bit na may kasunod na global color table; ang huling tatlong bit ang nagbibigay ng laki nito. |
| 00 | Index ng background color | Palette entry 0. Hindi ito pinapansin ng mga browser at ipinapakita nila kung ano ang nasa likod ng larawan. |
| 00 | Aspect ratio ng pixel | Ang 0 ay nangangahulugang parisukat ang mga pixel, walang correction. |
| Global na color table Ang palette. Index sa listahang ito ang sine-store ng mga pixel, sa halip na mismong kulay. | ||
| FF FF FF | Entry sa palette | Pula, berde at asul, tig-iisang byte: #ffffff. Dalawang entry ang pinakamaliit na table na puwedeng magkaroon ang isang GIF. |
| 00 00 00 | Entry sa palette | Pula, berde at asul, tig-iisang byte: #000000. Dalawang entry ang pinakamaliit na table na puwedeng magkaroon ang isang GIF. |
| Extension para sa graphic control Opsyonal na block na idinagdag sa GIF89a. Dito, ginagawa nitong transparent ang palette entry 0. | ||
| 21 | Introducer ng extension | Ang 0x21 (“!”) ay nag-aanunsyo ng extension block. |
| F9 | Label ng graphic control | Sinasabi ng 0xF9 na graphic control extension ang extension na ito. |
| 04 | Laki ng block | Susunod ang 4 byte ng mga setting. |
| 01 | Mga packed flag | Ang pinakamababang bit ang transparency flag. Naka-on ito, kaya ginagamit ang transparent index sa ibaba. |
| 00 00 | Antala | 0 hundredths ng isang segundo. Sa mga animation lang ito may epekto. |
| 00 | Index ng transparent na kulay | Ang palette entry 0 ay idinodrowing na ganap na transparent. |
| 00 | Terminator ng block | Isang sub-block na zero ang haba na nagsasara sa block. |
| Descriptor ng larawan Kung saan nakapuwesto ang larawan sa canvas at gaano ito kalaki. | ||
| 2C | Separator ng larawan | Nagsisimula ng larawan ang 0x2C (“,”). |
| 00 00 | Kaliwa | Nagsisimula ang larawan 0 px mula sa kaliwang gilid ng canvas. |
| 00 00 | Itaas | Nagsisimula ang larawan 0 px mula sa itaas na gilid ng canvas. |
| 01 00 | Lapad ng larawan | 1 px. |
| 01 00 | Taas ng larawan | 1 px. |
| 00 | Mga packed flag | Walang local color table, hindi interlaced. Ginagamit ng larawan ang global palette. |
| Data ng larawan Ang mga pixel, naka-compress gamit ang LZW at hinati sa mga sub-block na hanggang 255 byte ang laki. | ||
| 02 | Minimum code size ng LZW | 2, kaya 3 bit ang lapad ng mga compressed code sa simula. |
| 02 | Laki ng sub-block | Susunod ang 2 byte ng compressed na data. |
| 44 01 | Mga compressed na pixel | Mga LZW code na naka-pack mula sa pinakamababang bit pataas. Tingnan sa ibaba kung paano sila dine-decode. |
| 00 | Terminator ng block | Isang sub-block na zero ang haba na nagsasara sa block. |
| Trailer Isang byte na nagmamarka ng dulo ng file. | ||
| 3B | Trailer | Tinatapos ng 0x3B (“;”) ang file. |
Sa loob ng mga packed byte
Bawat isa sa tatlong byte ay nag-iimbak ng ilang maliliit na setting. Ang bit 7 ang nasa pinakakaliwa.
0x800x010x00Paano nagkakasya ang isang pixel sa dalawang byte
Kapag 2 ang minimum code size, 3-bit na code ang binabasa ng decoder. Nililinis ng code 4 ang table, tinatapos ng code 5 ang larawan, at ang mga code 0 hanggang 3 ay mga palette entry. Binabasa ang mga byte na 44 01 mula sa pinakamababang bit pataas:
0x44 010001000x01 00000001
- 001100 = 4Clear: magsimula sa bagong table
- 000000 = 0Pixel: entry 0 sa palette
- 101101 = 5Dulo ng larawan
- 0000000 Mga hindi ginagamit na padding bit
Ganito rin ang ginagawa sa mas malalaking larawan: bawat bagong code ay kumakatawan sa isang run na mas mahaba nang isang pixel kaysa sa nauna, kaya 1,743 byte lang ang isang 1000×1000 na transparent GIF.
Puwede pa bang lumiit?
Oo, kung aalisin mo ang mga bahaging kayang palampasin ng mga decoder. Ipinasa namin ang bawat variant sa tatlong browser engine at sa Pillow, at itinala namin kung ano ang idinrowing nila.
| Laki | Variant | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | Ang standard na file sa page na ito. | Transparent | Transparent | Transparent | Transparent |
| 42 | Walang trailer byte. Humihinto rin naman ang mga decoder sa dulo ng data. | Transparent | Transparent | Transparent | Transparent |
| 37 | Walang palette talaga. Valid pa rin: pinapayagan ng spec ang mga decoder na gumamit ng sarili nilang palette, at transparent din naman ang index 0. | Transparent | Transparent | Transparent | Transparent |
| 36 | Walang palette at walang trailer. | Transparent | Transparent | Transparent | Transparent |
| 35 | Walang transparency block: idinodrowing ang pixel sa palette color 0, na puti. | Puti | Puti | Puti | Puti |
| 35 | Ang format noong 1987. Wala itong paraan para markahang transparent ang isang kulay. | Puti | Puti | Puti | Puti |
| 34 | May transparency block pero walang compressed na pixel. | Transparent | Transparent | Transparent | Error |
| 33 | Pareho nito, pero walang trailer. | Transparent | Transparent | Transparent | Error |
| 29 | Walang palette at walang transparency. Ang bawat engine ang pumipili ng sarili nitong kulay. | Itim | Puti | Transparent | Itim |
| 26 | Isang larawan na walang kahit anong compressed na data. | Transparent | Transparent | Transparent | Error |
| 14 | Header, laki ng canvas at trailer lang. Walang larawan sa loob nito. | Transparent | Error | Transparent | Error |
Gamitin ang 43 byte kapag kailangang gumana ito kahit saan. Valid na GIF pa rin ang 37 byte at transparent ito sa bawat engine na sinubukan namin. Kapag mas maliit pa roon, umaasa ka na sa pagiging maluwag ng decoder, at makikita sa 29-byte na file kung gaano nagkakaiba-iba ang mga engine.
Sinuri noong Setyembre 23, 2026 gamit ang Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.
Gumawa sa kahit anong laki
Transparent o solid na kulay, mula 1×1 hanggang 65535×65535. Sa browser mo ito ginagawa; walang ina-upload.
I-hotlink ito
Mag-link nang direkta sa mga file na ito mula sa kahit anong site, email o app. Sine-serve ang mga ito mula sa edge ng Cloudflare na may mahabang cache lifetime, at bukas ang CORS para sa lahat.
- Ang 43-byte na file
https://emptygif.com/1x1.gif - Kahit anong laki, transparent
https://emptygif.com/px/300x250.gif - Kahit anong laki, solid na kulay
https://emptygif.com/px/300x250/ff5a1f.gif - JSON API: laki, base64 at data URI
https://emptygif.com/api/gif?w=300&h=250 - Lahat ng snippet bilang JSON
https://emptygif.com/snippets.json - Buod para sa mga AI agent
https://emptygif.com/llms.txt
Mga response header
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: *Halimbawa
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Hanggang 4096 px bawat gilid ang mga ginagawang laki. Kung mabigat ang traffic mo, paki-download ang file at i-host ito sa sarili mong server.
I-serve mula sa stack mo
173 na snippet na handa nang patakbuhin. Piliin ang sa iyo: bawat isa ay sumasagot sa path na pinili mo gamit ang image/gif na response. Kung binago mo ang laki o kulay sa itaas, ang GIF na iyon ang gagamitin ng mga snippet.
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);
Pinatakbo namin ang snippet na ito at ikinumpara ang mga byte na ibinalik nito. Buksan ang page
Saan ito ginagamit
- Mga tracking pixel at beacon: nilo-log ng server ang request at sumasagot ito ng pinakamaliit na valid na larawan.
- Mga placeholder para sa mga lazy-loaded na larawan, para valid na ang
imgtag bago dumating ang totoong source. - Mga fixed-size na spacer sa HTML email, kung saan hindi pare-pareho ang suporta sa CSS.
- Mga test at mock na nangangailangan ng totoong larawan nang hindi na nagsasama ng image file.
Hindi kasing-maaasahan ng inaakala ang mga tracking pixel
Pinapa-preload ng Apple Mail ang mga remote image sa pamamagitan ng proxy kapag naka-on ang Mail Privacy Protection, kaya ang isang “open” ay maaaring hindi talaga gawa ng tao. Kinukuha rin ng Gmail ang mga larawan sa sarili nitong proxy at kina-cache ang mga ito. Maraming email client ang nagba-block ng mga remote image bilang default. Para sa page analytics, kadalasang mas angkop ang navigator.sendBeacon() o isang 204 No Content na response kaysa sa larawan.
Mga tanong
- Bakit ito tinatawag na empty kung may pixel naman ito?
- Kailangang may kahit isang pixel ang isang GIF. 1×1 ito at minarkahang transparent ang nag-iisang kulay nito, kaya walang lumalabas.
- Valid ba ang 43-byte na file?
- Oo. Eksaktong sinusunod nito ang GIF89a specification, at transparent itong idinodrowing ng bawat engine sa table sa itaas.
- Bakit GIF at hindi PNG o WebP?
- Mas maliit ito kaysa sa pinakamaliit na transparent PNG, at kaya itong basahin ng bawat browser, email client at image library mula sa nakaraang 35 taon.
- Data URI ba o file ang dapat kong gamitin?
- Nakakatipid ng isang request ang data URI at bagay ito sa mga placeholder at CSS. Kailangan ng file o endpoint kapag ang request mismo ang punto, gaya ng sa mga tracking pixel.
- Anong Content-Type ang dapat kong ipadala?
image/gif. Magdagdag ngCache-Control: no-storekung kailangang umabot sa server mo ang bawat request.