同一张图存法不同差多少:我把手机壁纸和站上 15 张配图都压了一遍

经验 2026-10-16 20:05 · 22 次阅读 ·图片压缩,WebP,JPEG,实测,Pillow

同一张图不同存法的体积对比

先说结论:同一张手机壁纸,换个存法体积能从 674.9 KB 掉到 122.9 KB;要是按「最高质量」重存一遍,反而涨到 775.7 KB。我站上 15 张配图整体从 2260.7 KB 变成 575.6 KB,是原来的四分之一,图上的字机器还读得一字不差。

背景:一包壁纸发得慢

前几天我给手机找了 9 张壁纸,尺寸都是 1080×2340,正好贴手机屏。单张 675 KB 上下,9 张打包出去 6 MB 多,往外发要等一会儿。

同一时候我站上有 15 张配图,都是我自己做的卡片图,带中文和数字,合计 2260.7 KB。

两件事其实是同一个问题:压到多小,图上还能看清。我没去翻教程,直接在本机用 Python 的图片库(Pillow 10.2.0)跑了一遍,原图只读不动。

实测一:同一张壁纸,九种存法

拿「壁纸-01.jpg」(1080×2340,674.9 KB)当样本,同一份画面用不同方式重新存:

存法 体积 相对原图
JPEG 质量 95 775.7 KB 114.9%
JPEG 质量 85 420.6 KB 62.3%
JPEG 质量 75 311.7 KB 46.2%
JPEG 质量 60 200.8 KB 29.8%
JPEG 质量 40 134.4 KB 19.9%
WebP 质量 85 311.7 KB 46.2%
WebP 质量 75 164.7 KB 24.4%
WebP 质量 60 122.9 KB 18.2%
PNG(无损) 3156.0 KB 467.6%

表里有四处值得记住。

质量调高不一定好。质量 95 存出来 775.7 KB,比原图还大 100.8 KB。原图本身已经被压过一次,再按最高质量重存,等于把压缩留下的痕迹又描一遍,体积涨了,清晰度不涨。

PNG 装照片是自找麻烦。3156.0 KB,是原图的 4.7 倍。PNG 的强项是色块和文字这种边界干净的画;照片每个点颜色都不一样,它就存不动。

WebP 更划算。体积一样时,WebP 挂的质量档更高:表里 311.7 KB 出现两次,一次是 JPEG 质量 75,一次是 WebP 质量 85。

渐进式是白捡的。JPEG 质量 85 加上「渐进式+优化」两个开关,从 420.6 KB 降到 390.5 KB,省 30.1 KB,质量参数一个没动。

实测二:站上那 15 张卡片图

带文字的截图,情况和照片不一样。我把它们全部按 WebP 质量 85 重存:

文件 PNG WebP 质量 85
fig_apk-build-without-gradle.png 248.6 KB 62.9 KB
fig_android-ui-test-on-server.png 204.2 KB 50.9 KB
fig_excel-number-precision-trap.png 191.2 KB 49.1 KB
fig_sitemap-indexnow-get-indexed.png 191.6 KB 47.1 KB
fig_sqlite-chinese-fulltext-search.png 194.3 KB 53.1 KB
15 张合计 2260.7 KB 575.6 KB

合计是原来的 25.5%,省下 1685.0 KB。

只看体积不够,还得看糊没糊。同一张卡片(1200×881,191.6 KB)分别重存,再逐点跟原图比差,差越小越接近原图:

存法 体积 平均每点差 最大单点差
JPEG 质量 90 107.0 KB 0.759 73
JPEG 质量 85 90.8 KB 0.863 78
JPEG 质量 75 71.6 KB 1.022 95
WebP 质量 85 47.1 KB 0.794 79
WebP 质量 75 35.9 KB 0.952 83

WebP 质量 85 的体积是 JPEG 质量 85 的一半,差还更小。这一档我定成默认。

实测三:压到多小,字才读不清

把那张卡片一路往下压:

质量档 JPEG WebP
50 55.0 KB 29.5 KB
35 47.1 KB 25.2 KB
25 41.1 KB 22.3 KB
15 34.1 KB 19.6 KB

每一档我都丢给一个能看图的模型(qwen3-vl-plus),让它把图里的字念出来,只查 10 个关键数字(410、404、200、1.99、30、5081、63、32、202、422)念对没有。八个档位全部 10 个全对,最小的 19.6 KB 那档也没标「看不清」。

这里得说句老实话:机器读对,不等于人眼看着舒服,也可能它是靠上下文猜的。所以我没把默认压到最低那一档,停在 WebP 质量 85——体积已经是四分之一,余量留给人眼。

顺手在本机 Chrome(154.0.8037.57)里打开压出来的 .webp,宽高照样是 1200×881,页面里的画布也能导出 WebP,显示这一环不用操心。

结论与踩坑

  • 换存法比调质量划算:15 张卡片图存成 WebP 质量 85,2260.7 KB 变 575.6 KB,剩 25.5%。
  • 原图别按最高质量重存:674.9 KB 的壁纸用 JPEG 质量 95 存,涨到 775.7 KB。
  • 改后缀名没用:把 .jpg 复制成 .png,体积一个字节没变(还是 674.9 KB),Python 和系统命令都还认出它是 JPEG。要变小只能重新存一次。
  • 反复压最亏:同一张图连存 4 次质量 60,四次体积都是 200.8 KB,但每次内容都不同(校验值每次都变),跟原图的差别慢慢累积(最大差 53 涨到 55,相邻两次之间差 8~11)。体积这个数字看不出画质已经掉了。
  • 照片别用 PNG(674.9 KB 变 3156.0 KB);带文字的截图别用超低质量 JPEG。
  • 以后我就两条命令:
from PIL import Image
im = Image.open('原图.jpg').convert('RGB')
im.save('卡片图.webp', 'WEBP', quality=85)   # 卡片图、要发给别人的图
im.save('照片.jpg', 'JPEG', quality=85, progressive=True, optimize=True)

继续看

全部 →