GIF 压缩会损失画质吗?10 张动图压到 500KB、256KB、100KB 实测
简短回答
会有损失,但多数情况下比你想的小。我们把 10 张 GIF 压到 500KB:按聊天里常见的 240 像素显示,压缩后和原图的画质相似度(SSIM)在 0.924–0.992 之间,平均 0.961,肉眼基本看不出区别;压到 100KB 时降到 0.752–0.950,照片类会明显变糊。只做无损优化几乎省不了多少(0%–11%);真正让 GIF 变小的是缩小尺寸;在我们对比的 8 张图上,抽帧都比缩尺寸损失更多画质。
主要发现
- 无损优化只能省 0%–11%:多数 GIF 本身已经压得比较紧。
- 压到 500KB,按 240 像素显示的平均 SSIM 为 0.961;256KB 为 0.931;100KB 为 0.851。
- 512 像素宽的 GIF 压到 500KB 后,宽度缩到 219–381 像素,多数接近聊天表情常用的 240 像素。
- 同样压到 500KB,“缩尺寸”的平均 SSIM 为 0.960,“抽一半帧”为 0.882,“只留 1/3 帧”为 0.841。
- 屏幕录制、产品图和卡通最好压;草地、风景这类细节多的照片和多张照片轮播最难压。
- 测试中发现减少颜色会让照片里的深色变成黑点,我们已经改用更好的取色方法,修复后才完成本文的全部测试。
我们怎么测的
- 素材:10 张不同类型的 GIF,涵盖照片、卡通、插画、海报、屏幕录制、视频转 GIF、多图轮播和 240 像素的小表情(见下表)。全部来自表情厨房自己的工具和示例,没有使用他人作品。
- 工具:表情厨房 GIF 压缩的“压到指定大小”模式,引擎是 gifsicle 1.96.4(编译成 WebAssembly 在浏览器里运行),和网页上用户用到的是同一套代码。
- 目标:500KB(微信表情)、256KB(Discord 表情)和 100KB;原图已经小于目标的不测。另外每张都单独测一次无损优化。
- 画质:用 SSIM(结构相似度,1 表示和原图完全一致)逐帧对比,按播放时间对齐,抽帧后屏幕上显示的是哪一帧就比哪一帧。分两种看法:缩到 240 像素(聊天里看到的大小)和放回原尺寸。
- 设备:Apple M5 Pro MacBook 上的 Chrome,耗时是单次“压到指定大小”从开始到出结果的时间。
测试素材
| 素材 | 类型 | 尺寸 | 帧数 | 原始大小 | 无损优化后 |
|---|---|---|---|---|---|
| 示例吉祥物 | 3D 卡通 | 512×512 | 48 | 2.7 MB | 2.6 MB (−2%) |
| 柯基 | 宠物照片 | 512×512 | 32 | 2.2 MB | 2.2 MB (−0%) |
| 草原上的牛 | 风景照片 | 512×512 | 48 | 2.3 MB | 2.3 MB (−1%) |
| 水彩湖景 | 插画 | 512×512 | 32 | 1.9 MB | 1.9 MB (−0%) |
| 机器人海报 | 海报(文字 + 图形) | 512×512 | 32 | 1.7 MB | 1.7 MB (−0%) |
| 奶茶 | 产品图 | 512×512 | 32 | 900 KB | 879 KB (−2%) |
| 视频转 GIF | 视频转 GIF(15 帧/秒) | 480×480 | 86 | 4.7 MB | 4.5 MB (−5%) |
| 网页屏幕录制 | 屏幕录制 | 800×500 | 51 | 1.3 MB | 1.1 MB (−11%) |
| 多图轮播 | 多张照片轮播 | 360×360 | 16 | 607 KB | 607 KB (−0%) |
| 240px 小表情 | 微信尺寸表情 | 240×240 | 16 | 307 KB | 307 KB (−0%) |
测试结果:压到 500KB、256KB、100KB
每格依次是:压缩后的宽度、文件大小,以及按 240 像素显示时的 SSIM。SSIM 0.95 以上基本看不出差别,0.90 左右仔细看能发现变软,0.85 以下能明显看出变糊。
| 素材 | 500KB | 256KB | 100KB |
|---|---|---|---|
| 示例吉祥物 | 234×234 · 494 KBSSIM 0.972 | 153×153 · 255 KBSSIM 0.948 | 79×79 · 93 KBSSIM 0.880 |
| 柯基 | 219×219 · 469 KBSSIM 0.961 | 153×153 · 238 KBSSIM 0.909 | 93×93 · 94 KBSSIM 0.773 |
| 草原上的牛 | 223×223 · 477 KBSSIM 0.924 | 155×155 · 230 KBSSIM 0.868 | 96×96 · 87 KBSSIM 0.757 |
| 水彩湖景 | 243×243 · 470 KBSSIM 0.949 | 169×169 · 235 KBSSIM 0.910 | 103×103 · 90 KBSSIM 0.823 |
| 机器人海报 | 278×278 · 459 KBSSIM 0.966 | 195×195 · 243 KBSSIM 0.939 | 116×116 · 93 KBSSIM 0.841 |
| 奶茶 | 381×381 · 485 KBSSIM 0.985 | 255×255 · 247 KBSSIM 0.977 | 150×150 · 98 KBSSIM 0.950 |
| 视频转 GIF | 155×155 · 469 KBSSIM 0.967 | 105×105 · 249 KBSSIM 0.935 | 61×61 · 95 KBSSIM 0.851 |
| 网页屏幕录制 | 475×297 · 488 KBSSIM 0.992 | 299×187 · 237 KBSSIM 0.979 | 162×101 · 96 KBSSIM 0.936 |
| 多图轮播 | 237×237 · 456 KBSSIM 0.933 | 170×170 · 248 KBSSIM 0.862 | 102×102 · 98 KBSSIM 0.752 |
| 240px 小表情 | 原图已小于目标 | 228×228 · 245 KBSSIM 0.977 | 128×128 · 97 KBSSIM 0.946 |
看图对比
同一时刻的画面,按约 360 像素宽显示;下方是放回原尺寸后的局部放大(每个像素放大 2 倍)。

原图 · 2.2 MB

469 KB · SSIM 0.961

238 KB · SSIM 0.909

94 KB · SSIM 0.773
原尺寸局部放大

原图

500 KB

100 KB

原图 · 2.7 MB

494 KB · SSIM 0.972

255 KB · SSIM 0.948

93 KB · SSIM 0.880
原尺寸局部放大

原图

500 KB

100 KB

原图 · 1.3 MB

488 KB · SSIM 0.992

237 KB · SSIM 0.979

96 KB · SSIM 0.936
原尺寸局部放大

原图

500 KB

100 KB

原图 · 1.9 MB

470 KB · SSIM 0.949

235 KB · SSIM 0.910

90 KB · SSIM 0.823
原尺寸局部放大

原图

500 KB

100 KB
缩尺寸、抽帧、硬压,哪种画质最好?
为了确认压缩顺序选得对不对,我们把 8 张素材都用几种不同的方式压到 500KB,看哪种保住的画质最多。
| 方式 | 做法 | 平均 SSIM(240 像素) | 最差一张 |
|---|---|---|---|
| 缩尺寸(我们的做法) | 128 色 + 中等有损,再按比例缩小尺寸 | 0.960 | 0.928 |
| 缩得更多、压得更轻 | 256 色 + 轻度有损,尺寸缩得更小 | 0.957 | 0.925 |
| 压得更狠、缩得更少 | 64 色 + 强有损,尺寸缩得少一些 | 0.958 | 0.925 |
| 抽一半帧 | 每 2 帧留 1 帧,总时长不变,尺寸缩得少 | 0.882 | 0.720 |
| 只留 1/3 帧 | 每 3 帧留 1 帧,总时长不变,尺寸缩得更少 | 0.841 | 0.660 |
| 保持原尺寸硬压 | 32 色 + 最强有损,不缩尺寸 | 0.964(超过 500KB) | 0.936 |
“保持原尺寸硬压”一张都没能压到 500KB 以内(再怎么压也在 500KB 以上),表里的 SSIM 是在更大的文件上测的,只作参考。
结论:要压到指定大小,先缩尺寸最划算;抽帧既省不了太多,又让动作变卡,排在最后。几种缩尺寸的组合之间差别不大。
测试中发现并修复的问题
最早一轮测试里,减少颜色这一步用的是 gifsicle 默认的取色方法,会把照片里的深绿、深棕直接映射成黑色,草地和狗身上出现零星黑点。改用 blend-diversity(混合取色)后黑点消失,9 张素材压到 500KB 的平均 SSIM 从 0.953 提到 0.962,输出尺寸基本不变。表情厨房的 GIF 压缩已在 2026-10-26 更新,本文所有数据都是修复后的结果。另外,个别已经压得很紧的 GIF 做无损优化后会比原来还大一点,现在遇到这种情况会直接保留原图。
表情厨房“压到指定大小”的顺序
- 无损优化:只重新整理文件,画面一个像素都不变。够了就停。
- 256 色 + 轻度有损:几乎看不出变化。够了就停。
- 128 色(混合取色)+ 中等有损,再按目标大小算出缩放比例,缩小宽高。
- 如果要缩到一半以下,并且抽帧后每秒还能有 8 帧以上,才隔一帧抽掉一帧(总时长不变),把省下的空间留给尺寸。
- 压到目标以内后,如果还有明显余量,再试一次稍大的尺寸,选不超过目标、尺寸最大的结果。
实用建议
- 要发微信表情(500KB、240×240)
- 直接选“微信表情 500 KB”。我们测试的 GIF 压到 500KB 后在聊天尺寸下都看不出明显差别。
- 要做 Discord 表情(256KB)
- 选“Discord 256 KB”。照片类 GIF 会变软,卡通和截图基本不受影响。
- 一定要压到 100KB
- 先把 GIF 裁短,或者换成背景简单的画面。照片和风景在 100KB 下损失明显。
- 必须保留原尺寸
- GIF 很难做到,大尺寸动图建议转成 MP4,体积通常只有 GIF 的几分之一。
GIF 转 MP4:保留原尺寸,体积通常只有 GIF 的几分之一。
测试的局限
- 素材只有 10 张,而且大多来自我们自己的工具,生成时已经做过优化,所以无损优化省得少;其他软件导出的 GIF 可能省得更多。
- SSIM 衡量的是结构相似度,对颜色变化和动作是否流畅不够敏感,最终还是要用眼睛看。
- 耗时取决于设备性能,手机上通常会慢一些。
每张素材、每个目标的尺寸、大小、SSIM 和耗时都可以下载: 下载 CSV
常见问题
- 压缩 GIF 会损失画质吗?
- 无损优化不会,但通常只能省 0%–11%。要大幅压缩就会有损失,主要表现为尺寸变小、颜色变少、轻微颗粒感。我们的测试中,压到 500KB 后按聊天尺寸看的平均 SSIM 为 0.961。
- GIF 压到 500KB 会糊吗?
- 按 240 像素左右的聊天尺寸看基本不会,测试中最低的一张 SSIM 也有 0.924。但 512 像素的 GIF 压到 500KB 后宽度只剩 219–381 像素,放大看会变软。
- 压缩 GIF 是缩尺寸好还是抽帧好?
- 缩尺寸更好。同样压到 500KB,缩尺寸的平均 SSIM 为 0.960,抽一半帧只有 0.882,而且抽帧会让动作变卡。
- 为什么压缩后出现黑点?
- 通常是减少颜色时取色算法把深色映射成了黑色。表情厨房已改用混合取色(blend-diversity),可以避免这个问题。
- 什么样的 GIF 最好压缩?
- 背景简单、颜色少的 GIF 最好压,比如屏幕录制、产品图和卡通;本次测试里压到 100KB 后画质保留最好的是奶茶、240px 小表情、网页屏幕录制。最难压的是多图轮播、草原上的牛、柯基。
- 压缩 GIF 需要上传文件吗?
- 用表情厨房不需要。压缩在浏览器里完成,文件不会离开你的设备。
用同一套方法压缩你的 GIF
免费、不上传、无水印,可以压到任意指定大小,并排对比画质后再下载。
打开 GIF 压缩