我平时写博客、发小红书,需要处理很多图片。之前用某在线压缩工具,把一张5MB的风景照压到500KB,结果发出去粉丝说“糊得像油画”。我一开始以为是压缩率太高,后来发现不是。折腾了好几天,下载了12款工具,包括TinyPNG、Squoosh、ImageOptim、Photoshop、ffmpeg、Sharp、ImageMagick、Caesium、PNGGauntlet、RIOT、JPEGmini、XnConvert。用同一张原图(索尼A7M3拍的,6000x4000,24MP,JPEG,12MB)做测试,发现了一些反常识的东西。
大多数人以为压缩率越低越好,其实关键在三个参数:色度子采样、元数据、以及是否二次编码。色度子采样(Chroma Subsampling)从4:4:4降到4:2:0,人眼几乎看不出区别,但体积能小30%左右。元数据(EXIF、ICC、GPS)能占几百KB,删掉不影响画质。二次编码是指用JPEG保存多次,每次都会损失。我实测:一张12MB的图,用Squoosh,质量80,色度子采样4:2:0,删除元数据,输出1.2MB,几乎看不出差别。但如果质量60,4:2:0,输出400KB,放大到100%看,天空会出现色块,头发边缘有锯齿。所以质量不是越低越好,80是个甜点。
具体怎么设置?如果你用Photoshop:文件->导出->存储为Web所用格式(旧版),选择JPEG,质量80,勾选“转换为sRGB”,取消“嵌入颜色配置文件”,模糊0,杂边无。或者用Squoosh(在线免费),拖入图片,右侧选MozJPEG,质量80,勾选“去除元数据”,色度子采样选4:2:0。如果是PNG截图,用pngquant,命令行:pngquant --quality=65-80 --speed 1 --force --output out.png in.png。如果是批量,用XnConvert,添加动作:调整大小(如果超过2000px),然后JPEG质量85,删除元数据。注意:不要用“智能压缩”那种一键工具,它们往往把质量降到50以下。
不同格式怎么选?WebP在相同质量下比JPEG小25-35%,但兼容性要注意,iOS 14之前不支持,现在基本都支持了。AVIF更小,但编码慢,兼容性差。我的建议:网站用WebP+JPEG回退,社交媒体用JPEG质量85,打印用PNG或TIFF。另外,图片尺寸比压缩率更重要,把6000px缩到2000px,体积直接降到1/9,画质损失远小于高压缩率。我一般先缩尺寸,再选格式,最后调质量。
我觉得很多教程告诉你“压缩到100KB以下”,这是误导。不同用途标准不同:网页banner图,200KB以内就行;文章配图,500KB以内;高清壁纸,2MB以内。不要迷信“无损压缩”,JPEG本身就有损,追求无损就用PNG,但体积大。最后,我现在的流程:Lightroom导出时长边2000px,质量85,sRGB,然后Squoosh转WebP质量80,删除元数据。一套下来,12MB变300KB,发到网上没人说糊。如果你也有压缩模糊的问题,先检查色度子采样和元数据,再调质量,别一上来就拉低质量。