emptygif
Wika: Filipino

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.

Ang 43-byte na GIF, pinalaki: isang transparent na pixel
0000
0010
0020
I-download ang 1×1.gif

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

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 byteFieldKahulugan
Header Sinasabi nito sa decoder na GIF ito at kung aling bersyon ng format ang aasahan.
47 49 46SignatureAng mga ASCII na letrang “GIF”. Dito nagsisimula ang bawat GIF file.
38 39 61Bersyon“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 00Lapad ng canvas1 px.
01 00Taas ng canvas1 px.
80Mga packed flagApat 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.
00Index ng background colorPalette entry 0. Hindi ito pinapansin ng mga browser at ipinapakita nila kung ano ang nasa likod ng larawan.
00Aspect ratio ng pixelAng 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 FFEntry sa palettePula, berde at asul, tig-iisang byte: #ffffff. Dalawang entry ang pinakamaliit na table na puwedeng magkaroon ang isang GIF.
00 00 00Entry sa palettePula, 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.
21Introducer ng extensionAng 0x21 (“!”) ay nag-aanunsyo ng extension block.
F9Label ng graphic controlSinasabi ng 0xF9 na graphic control extension ang extension na ito.
04Laki ng blockSusunod ang 4 byte ng mga setting.
01Mga packed flagAng pinakamababang bit ang transparency flag. Naka-on ito, kaya ginagamit ang transparent index sa ibaba.
00 00Antala0 hundredths ng isang segundo. Sa mga animation lang ito may epekto.
00Index ng transparent na kulayAng palette entry 0 ay idinodrowing na ganap na transparent.
00Terminator ng blockIsang sub-block na zero ang haba na nagsasara sa block.
Descriptor ng larawan Kung saan nakapuwesto ang larawan sa canvas at gaano ito kalaki.
2CSeparator ng larawanNagsisimula ng larawan ang 0x2C (“,”).
00 00KaliwaNagsisimula ang larawan 0 px mula sa kaliwang gilid ng canvas.
00 00ItaasNagsisimula ang larawan 0 px mula sa itaas na gilid ng canvas.
01 00Lapad ng larawan1 px.
01 00Taas ng larawan1 px.
00Mga packed flagWalang 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.
02Minimum code size ng LZW2, kaya 3 bit ang lapad ng mga compressed code sa simula.
02Laki ng sub-blockSusunod ang 2 byte ng compressed na data.
44 01Mga compressed na pixelMga LZW code na naka-pack mula sa pinakamababang bit pataas. Tingnan sa ibaba kung paano sila dine-decode.
00Terminator ng blockIsang sub-block na zero ang haba na nagsasara sa block.
Trailer Isang byte na nagmamarka ng dulo ng file.
3BTrailerTinatapos 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.

Descriptor ng logical screen 0x80
1May global color table
000Resolution ng kulay
0Naka-sort ang palette ayon sa kahalagahan
000Laki ng table: 2^(n+1) entry
Extension para sa graphic control 0x01
000Nakareserba
000Paraan ng disposal
0Hintayin ang input ng user
1Naka-on ang transparency
Descriptor ng larawan 0x00
0May local color table
0Interlaced
0Naka-sort ang palette ayon sa kahalagahan
00Nakareserba
000Laki ng local table

Paano 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

  1. 001100 = 4Clear: magsimula sa bagong table
  2. 000000 = 0Pixel: entry 0 sa palette
  3. 101101 = 5Dulo ng larawan
  4. 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.

LakiVariantChromiumFirefoxWebKitPillow
43Ang standard na file sa page na ito.TransparentTransparentTransparentTransparent
42Walang trailer byte. Humihinto rin naman ang mga decoder sa dulo ng data.TransparentTransparentTransparentTransparent
37Walang palette talaga. Valid pa rin: pinapayagan ng spec ang mga decoder na gumamit ng sarili nilang palette, at transparent din naman ang index 0.TransparentTransparentTransparentTransparent
36Walang palette at walang trailer.TransparentTransparentTransparentTransparent
35Walang transparency block: idinodrowing ang pixel sa palette color 0, na puti.PutiPutiPutiPuti
35Ang format noong 1987. Wala itong paraan para markahang transparent ang isang kulay.PutiPutiPutiPuti
34May transparency block pero walang compressed na pixel.TransparentTransparentTransparentError
33Pareho nito, pero walang trailer.TransparentTransparentTransparentError
29Walang palette at walang transparency. Ang bawat engine ang pumipili ng sarili nitong kulay.ItimPutiTransparentItim
26Isang larawan na walang kahit anong compressed na data.TransparentTransparentTransparentError
14Header, laki ng canvas at trailer lang. Walang larawan sa loob nito.TransparentErrorTransparentError

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.

Laman
Karaniwang laki

1×1 · 43 byte

I-download ang GIF

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.

Elixir, Erlang & Gleam

Express JavaScript

I-install
npm i express
File
server.mjs
Patakbuhin
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);

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 img tag 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 ng Cache-Control: no-store kung kailangang umabot sa server mo ang bawat request.