跳到主要内容

压质量

最后更新于:

压质量(已解决)

问题

奇怪,这些图片都是avif格式了,怎么还是体积好大呀??

回答

@cusor auto模型回答,记录于2026年7月21日

这很正常,转成 AVIF ≠ 一定很小

你们现在的转换逻辑大致是:

1export function buildConvertFops(opts) {
2  const { bucket, avifKey, webpKey, maxEdge, alsoWebp } = opts;
3  const resize = maxEdge && maxEdge > 0 ? `/thumbnail/${maxEdge}x${maxEdge}>` : '';
4  const avifSave = urlsafeBase64Encode(`${bucket}:${avifKey}`);
5  const fops = [`imageMogr2${resize}/format/avif|saveas/${avifSave}`];

也就是说:

  1. 只改了格式/format/avif),没有压质量(没传 /quality/...
  2. 最长边最多缩到 2560pxCONVERT_MAX_EDGE 默认 2560)
  3. 人像、皮肤、头发这类细节多的照片,即使用 AVIF,在约 2K 分辨率下也很容易到 1–4MB

所以你标红的那些 2–3MB 的人像,和左上角那张只有 50KB 的图差很多,多半是源图分辨率/内容复杂度不同,不是“没转成 AVIF”。

如果想明显变小,可以:

  • CONVERT_MAX_EDGE 降到 19201600
  • 在转换参数里加上质量,例如 /quality/40 或更低

需要的话我可以直接帮你改转换参数,让新上传的 AVIF 更小。

提问1

帮我直接改转换参数,我需要次图床能实现:

01.将图片格式转换成.avif格式

02.同时,图片质量必须要小,但不能影响其画质;

请优化。


回答1

已优化转码参数,部署后新上传会生效。

🟢改动要点

参数之前现在作用
最长边25601920分辨率更合适,体积明显下降
AVIF 质量未设置(七牛默认 50)40 强制quality/40!体积更小,观感仍接近无损
WebP 质量未设置75 强制勾选「同时产出 WebP」时一致压缩

实际 fop 形如:

1imageMogr2/thumbnail/1920x1920>/quality/40!/format/avif

人像类图预计可从 2–3MB 降到大约几百 KB(视内容而定)。

🟢可调环境变量

  • CONVERT_MAX_EDGE(默认 1920
  • CONVERT_QUALITY(默认 40
  • CONVERT_WEBP_QUALITY(默认 75

若觉得略糊可把 CONVERT_QUALITY 调到 4550;若还想更小可降到 35

注意: 已上传的大图不会自动变小;需重新上传,或在后台对保留了原图的条目点「重试」转码。部署后再试一张即可验证效果。

提问2

奇怪,这2张图片下载到本地后图片质量怎么变小了(只有149KB,37.7KB)?但是图床上显示却有好几兆呢(3.65MB, 3.48MB)?

回答2

这不是图片“变小了”,而是图床上显示的体积是错的

🟢原因

你看到的实际是什么
本地下载 149KB / 37.7KB真实的 AVIF 文件大小(已经压好了)
图床显示 3.65MB / 3.48MB上传时原图的大小(转码前记进去的)

上传时把 size 写成了原图体积,转成 AVIF 后没有回写真实大小,所以界面一直显示原图的几兆。

🟢已修复

转码成功后会 stat 七牛上的 AVIF,把真实 fsize 写回;列表同步时也会用对象真实大小校正旧数据。

部署后点一下后台的刷新/同步七牛索引,那两张图的显示就会变成和本地差不多的 KB 级。需要的话我可以帮你提交并推送这次修复。

最新文章

文档导航