最小的透明 GIF 只有 43 字节。
这就是它的全部。点选任意字节查看它的作用,然后复制文件、下载、外链,或用你自己的代码来提供它。

每个字节的作用
GIF 由一系列块组成。这个文件有七个块,本页的每种颜色都对应其中一个。选择一个字节或块即可查看说明。 数值以小端序存储:低字节在前,所以 01 00 表示 1。
| 字节 | 字段 | 含义 |
|---|---|---|
| 文件头 告诉解码器这是一个 GIF,以及应按哪个格式版本来解析。 | ||
| 47 49 46 | 签名 | ASCII 字母“GIF”。每个 GIF 文件都以它们开头。 |
| 38 39 61 | 版本 | “89a”。透明需要 89a;87a 没有图形控制扩展。 |
| 逻辑屏幕描述符 画布的尺寸,以及颜色表的设置方式。 | ||
| 01 00 | 画布宽度 | 1 像素。 |
| 01 00 | 画布高度 | 1 像素。 |
| 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 像素处开始。 |
| 00 00 | 上偏移 | 图像从距画布上边缘 0 像素处开始。 |
| 01 00 | 图像宽度 | 1 像素。 |
| 01 00 | 图像高度 | 1 像素。 |
| 00 | 打包标志位 | 没有局部颜色表,非隔行。图像使用全局调色板。 |
| 图像数据 像素数据,经 LZW 压缩,并拆分成每个最多 255 字节的子块。 | ||
| 02 | LZW 最小码长 | 2,因此压缩码从 3 位宽开始。 |
| 02 | 子块大小 | 后面跟着 2 字节的压缩数据。 |
| 44 01 | 压缩像素 | 从最低位开始打包的 LZW 码。下方展示了它们如何解码。 |
| 00 | 块终止符 | 一个长度为零的子块,用来结束该块。 |
| 文件尾 标记文件结束的一个字节。 | ||
| 3B | 文件尾 | 0x3B(“;”)结束文件。 |
打包字节的内部
这三个字节各自存储了几项小设置。第 7 位在最左边。
0x800x010x00两个字节如何容纳一个像素
最小码长为 2 时,解码器读取 3 位的码。码 4 清空码表,码 5 结束图像,码 0 到 3 对应调色板项。字节 44 01 从最低位开始读取:
0x44 010001000x01 00000001
- 001100 = 4清除:从全新的码表开始
- 000000 = 0像素:调色板第 0 项
- 101101 = 5图像结束
- 0000000 未使用的填充位
更大的图像也用同样的技巧:每个新码代表比上一个多一个像素的连续像素,所以 1000×1000 的透明 GIF 只需 1,743 字节。
还能更小吗?
可以,只要去掉解码器能容忍缺失的部分。我们把每个变体交给三个浏览器引擎和 Pillow,并记录它们画出的结果。
| 大小 | 变体 | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | 本页的标准文件。 | 透明 | 透明 | 透明 | 透明 |
| 42 | 没有文件尾字节。解码器反正会在数据结束处停止。 | 透明 | 透明 | 透明 | 透明 |
| 37 | 完全没有调色板。仍然合法:规范允许解码器使用自己的调色板,而且索引 0 本来就是透明的。 | 透明 | 透明 | 透明 | 透明 |
| 36 | 没有调色板,也没有文件尾。 | 透明 | 透明 | 透明 | 透明 |
| 35 | 没有透明块:像素以调色板颜色 0(白色)绘制。 | 白色 | 白色 | 白色 | 白色 |
| 35 | 1987 年的格式。它无法把颜色标记为透明。 | 白色 | 白色 | 白色 | 白色 |
| 34 | 有透明块,但没有压缩像素。 | 透明 | 透明 | 透明 | 错误 |
| 33 | 同上,但去掉了文件尾。 | 透明 | 透明 | 透明 | 错误 |
| 29 | 没有调色板,也没有透明设置。每个引擎自行选择颜色。 | 黑色 | 白色 | 透明 | 黑色 |
| 26 | 一个完全没有压缩数据的图像。 | 透明 | 透明 | 透明 | 错误 |
| 14 | 只有文件头、画布大小和文件尾,其中没有图像。 | 透明 | 错误 | 透明 | 错误 |
需要在所有环境下都能用时,请用 43 字节。37 字节仍是合法的 GIF,并且在我们测试的每个引擎中都显示为透明。再小就得依赖解码器的宽容度了,29 字节的文件就展示了各引擎之间的分歧。
于 2026年9月23日 使用 Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0 测试。
同一个像素,换成其他格式
我们为每种格式做出了能做到的最小透明 1×1 文件,并交给同样的四个引擎。展开一行即可查看它的字节,颜色与承担相同作用的 GIF 块一致。
| 大小 | 文件 | data URI | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|---|
| 28 | WebP 同上,但去掉了两个填充字节。WebKit 会拒绝小于 30 字节的 WebP 文件。52 49 46 46 14 00 00 00 57 45 42 50 56 50 38 4c 08 00 00 00 2f 00 00 00 10 88 88 08
| 63 | 透明 | 透明 | 错误 | 透明 |
| 30 | WebP 无损 VP8L。每个前缀码只含一个符号,所以像素不占任何位,文件大小在 16384×16384 以内都保持不变。52 49 46 46 16 00 00 00 57 45 42 50 56 50 38 4c 0a 00 00 00 2f 00 00 00 10 88 88 08 00 00
| 63 | 透明 | 透明 | 透明 | 透明 |
| 43 | GIF 本页顶部的 43 字节 GIF。47 49 46 38 39 61 01 00 01 00 80 00 00 ff ff ff 00 00 00 21 f9 04 01 00 00 00 00 2c 00 00 00 00 01 00 01 00 00 02 02 44 01 00 3b
| 82 | 透明 | 透明 | 透明 | 透明 |
| 58 | BMP 经典的 40 字节文件头没有 alpha 掩码,所以第四个字节被忽略,像素在所有引擎中都是黑色。42 4d 3a 00 00 00 00 00 00 00 36 00 00 00 28 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 00 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 102 | 黑色 | 黑色 | 黑色 | 黑色 |
| 62 | SVG 只带宽度和高度的空 | 85 | 透明 | 透明 | 透明 | 错误 |
| 67 | PNG 带 alpha 的真彩色。唯一一条全零扫描线是手工压缩的,比 zlib 最高压缩设置还短 1 字节。89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 01 00 00 00 01 08 06 00 00 00 1f 15 c4 89 00 00 00 0a 49 44 41 54 78 01 63 00 01 00 00 05 00 01 36 d0 88 dd 00 00 00 00 49 45 4e 44 ae 42 60 82
| 114 | 透明 | 透明 | 透明 | 透明 |
| 70 | ICO 包含一张 32 位位图及其 1 位 AND 掩码的网站图标。00 00 01 00 01 00 01 01 00 00 01 00 20 00 30 00 00 00 16 00 00 00 28 00 00 00 01 00 00 00 02 00 00 00 01 00 20 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00
| 121 | 透明 | 透明 | 透明 | 透明 |
| 74 | BMP 带 alpha 掩码的 56 字节文件头。WebKit 无法加载。42 4d 4a 00 00 00 00 00 00 00 46 00 00 00 38 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 00 00 00 00
| 122 | 透明 | 透明 | 错误 | 透明 |
| 89 | ICO 包含那张 67 字节 PNG 的网站图标。00 00 01 00 01 00 01 01 00 00 01 00 20 00 43 00 00 00 16 00 00 00 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 01 00 00 00 01 08 06 00 00 00 1f 15 c4 89 00 00 00 0a 49 44 41 54 78 01 63 00 01 00 00 05 00 01 36 d0 88 dd 00 00 00 00 49 45 4e 44 ae 42 60 82
| 145 | 透明 | 透明 | 透明 | 透明 |
| 126 | BMP V4 文件头。WebKit 忽略其 alpha 掩码并绘制为黑色。42 4d 7e 00 00 00 00 00 00 00 7a 00 00 00 6c 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 42 47 52 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 190 | 透明 | 透明 | 黑色 | 透明 |
| 142 | BMP V5 文件头,在 WebKit 中结果相同。42 4d 8e 00 00 00 00 00 00 00 8a 00 00 00 7c 00 00 00 01 00 00 00 01 00 00 00 01 00 20 00 03 00 00 00 04 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 ff 00 00 00 00 00 00 ff 42 47 52 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
| 214 | 透明 | 透明 | 黑色 | 透明 |
| 437 | AVIF 同上,但使用 4:0:0 色度抽样,去掉了颜色平面。00 00 00 1c 66 74 79 70 61 76 69 66 00 00 00 00 61 76 69 66 6d 69 66 31 6d 69 61 66 00 00 01 6a 6d 65 74 61 00 00 00 00 00 00 00 21 68 64 6c 72 00 00 00 00 00 00 00 00 70 69 63 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 70 69 74 6d 00 00 00 00 00 01 00 00 00 2c 69 6c 6f 63 00 00 00 00 44 00 00 02 00 01 00 00 00 01 00 00 01 a0 00 00 00 15 00 02 00 00 00 01 00 00 01 8e 00 00 00 12 00 00 00 42 69 69 6e 66 00 00 00 00 00 02 00 00 00 1a 69 6e 66 65 02 00 00 00 00 01 00 00 61 76 30 31 43 6f 6c 6f 72 00 00 00 00 1a 69 6e 66 65 02 00 00 00 00 02 00 00 61 76 30 31 41 6c 70 68 61 00 00 00 00 1a 69 72 65 66 00 00 00 00 00 00 00 0e 61 75 78 6c 00 02 00 01 00 01 00 00 00 a7 69 70 72 70 00 00 00 81 69 70 63 6f 00 00 00 14 69 73 70 65 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 0e 70 69 78 69 00 00 00 00 01 08 00 00 00 0c 61 76 31 43 81 00 1c 00 00 00 00 13 63 6f 6c 72 6e 63 6c 78 00 01 00 0d 00 06 80 00 00 00 38 61 75 78 43 00 00 00 00 75 72 6e 3a 6d 70 65 67 3a 6d 70 65 67 42 3a 63 69 63 70 3a 73 79 73 74 65 6d 73 3a 61 75 78 69 6c 69 61 72 79 3a 61 6c 70 68 61 00 00 00 00 1e 69 70 6d 61 00 00 00 00 00 00 00 02 00 01 04 01 02 83 04 00 02 04 01 02 83 05 00 00 00 2f 6d 64 61 74 12 00 0a 04 18 00 06 15 32 08 10 00 00 18 e1 42 72 10 12 00 0a 07 18 00 06 18 08 68 35 32 08 10 00 00 18 e1 42 72 10
| 607 | 透明 | 透明 | 透明 | 透明 |
| 471 | AVIF libavif 在 quality 100 下的输出:一张用于颜色、一张用于 alpha 的 AV1 图像,装在 ISO BMFF 盒子中。00 00 00 20 66 74 79 70 61 76 69 66 00 00 00 00 61 76 69 66 6d 69 66 31 6d 69 61 66 4d 41 31 42 00 00 01 86 6d 65 74 61 00 00 00 00 00 00 00 21 68 64 6c 72 00 00 00 00 00 00 00 00 70 69 63 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 70 69 74 6d 00 00 00 00 00 01 00 00 00 2c 69 6c 6f 63 00 00 00 00 44 00 00 02 00 01 00 00 00 01 00 00 01 c0 00 00 00 17 00 02 00 00 00 01 00 00 01 ae 00 00 00 12 00 00 00 42 69 69 6e 66 00 00 00 00 00 02 00 00 00 1a 69 6e 66 65 02 00 00 00 00 01 00 00 61 76 30 31 43 6f 6c 6f 72 00 00 00 00 1a 69 6e 66 65 02 00 00 00 00 02 00 00 61 76 30 31 41 6c 70 68 61 00 00 00 00 1a 69 72 65 66 00 00 00 00 00 00 00 0e 61 75 78 6c 00 02 00 01 00 01 00 00 00 c3 69 70 72 70 00 00 00 9d 69 70 63 6f 00 00 00 14 69 73 70 65 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 10 70 69 78 69 00 00 00 00 03 08 08 08 00 00 00 0c 61 76 31 43 81 00 0c 00 00 00 00 13 63 6f 6c 72 6e 63 6c 78 00 01 00 0d 00 06 80 00 00 00 0e 70 69 78 69 00 00 00 00 01 08 00 00 00 0c 61 76 31 43 81 00 1c 00 00 00 00 38 61 75 78 43 00 00 00 00 75 72 6e 3a 6d 70 65 67 3a 6d 70 65 67 42 3a 63 69 63 70 3a 73 79 73 74 65 6d 73 3a 61 75 78 69 6c 69 61 72 79 3a 61 6c 70 68 61 00 00 00 00 1e 69 70 6d 61 00 00 00 00 00 00 00 02 00 01 04 01 02 83 04 00 02 04 01 05 86 07 00 00 00 31 6d 64 61 74 12 00 0a 04 18 00 06 15 32 08 10 00 00 18 e1 42 72 10 12 00 0a 08 18 00 06 08 08 68 34 20 32 09 10 00 00 00 07 c8 24 c6 62
| 651 | 透明 | 透明 | 透明 | 透明 |
- 签名
- 尺寸
- 调色板
- 透明
- 容器
- 像素
- 结尾
- 元数据
- 填充
在四个引擎中都显示为透明的最小文件是 WebP,大小 30 字节,比 GIF 少 13 字节。
data URI 的长度(字符数):SVG 为 URL 编码的文本,其余为 base64。 于 2026年9月24日 使用 Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0 测试。AVIF 由 libavif 1.4.1 生成。
生成任意尺寸
透明或纯色,从 1×1 到 65535×65535。在你的浏览器中生成,不会上传任何内容。
直接外链
可以在任何网站、邮件或应用中直接链接这些文件。它们由 Cloudflare 边缘节点提供,缓存时间长,并对所有来源开放 CORS。
- 43 字节文件
https://emptygif.com/1x1.gif - 任意尺寸,透明
https://emptygif.com/px/300x250.gif - 任意尺寸,纯色
https://emptygif.com/px/300x250/ff5a1f.gif - PNG、WebP 或 SVG 同样可用
https://emptygif.com/px/300x250.webp - 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 像素。如果流量很大,请下载文件并自行托管。
在你的技术栈中提供它
191 个可直接运行的代码片段。选一个适合你的:每个都会在你指定的路径返回 image/gif 响应。如果你在上面修改了尺寸或颜色,代码片段会使用那个 GIF。
JavaScript & TypeScript
- Next.js (App Router)
- Hono
- Bun.serve
- Elysia
- Deno.serve
- SvelteKit
- Nuxt (Nitro server route)
- Astro
- React Router (framework mode, ex-Remix)
- TanStack Start
- SolidStart
- Hono on Bun
- Hono on Deno
- srvx (universal fetch server)
- Qwik City
- RedwoodSDK
- Angular SSR (Express server.ts)
- Fresh
- Oak
- Encore.ts
- NestJS
- Fastify
- Express
- Node.js standard library (node:http)
- Koa
- hapi
- AdonisJS
Edge & serverless
- Cloudflare Workers
- Cloudflare Workers (Rust, workers-rs)
- Cloudflare Pages Functions
- Spin (Rust, WASI HTTP component)
- 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
Go
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);
我们运行了此代码片段,并比对了它返回的字节。 打开页面
用途
- 跟踪像素和信标:服务器记录请求,并以最小的合法图像作为响应。
- 懒加载图片的占位图,让
img标签在真实图片地址到位之前就是合法的。 - HTML 邮件中的固定尺寸间隔图,因为邮件里的 CSS 支持参差不齐。
- 需要真实图片、又不想附带图片文件的测试和 mock。
跟踪像素没有看起来那么可靠
开启“邮件隐私保护”后,Apple Mail 会通过代理预加载远程图片,所以一次“打开”可能根本不是真人。Gmail 也会通过自己的代理获取并缓存图片。许多客户端默认屏蔽远程图片。做页面分析时,navigator.sendBeacon() 或 204 No Content 响应通常比图片更合适。
常见问题
- 明明有一个像素,为什么叫“空”?
- GIF 至少要有一个像素。这个是 1×1,唯一的颜色被标记为透明,所以什么都不显示。
- 这个 43 字节的文件合法吗?
- 合法。它完全遵循 GIF89a 规范,上表中的每个引擎都把它绘制为透明。
- 为什么用 GIF,而不是 PNG 或 WebP?
- 它比最小的透明 PNG 还小,而且过去 35 年里的所有浏览器、邮件客户端和图像库都能读取它。
- 应该用 data URI 还是文件?
- data URI 能省掉一次请求,适合占位图和 CSS。如果请求本身才是目的(比如跟踪像素),就需要文件或接口。
- 应该发送哪个 Content-Type?
image/gif。如果每个请求都必须到达你的服务器,再加上Cache-Control: no-store。