图片批量处理后画质变差怎么办?我拿3000张商品图实测了一遍,发现元凶不是缩放

关键词:图像处理,批量修图,JPEG压缩,色度采样,USM锐化

摘要:跑过3200张商品图之后,我把每一步的画质损耗单独测了一遍,结论跟直觉相反:毁掉画质的往往不是缩放,而是默认开启的色度子采样和锐化顺序。附一套可复现的参数。

去年接了朋友一个活,他们公司做家居用品的,天猫店要改版,仓库里积压了大概3200张商品图,供应商发来的,拍摄时间跨度从2016年到2023年,格式乱七八糟,有CR2转的TIFF,有手机拍的HEIC,还有一堆被微信群压缩过七八遍的jpg。我的任务是把它们统一成1200×1200的白底方图。

图片

一开始我想得很简单,PS的批处理动作录一遍,加上“存储为Web所用格式”,一晚上跑完。结果跑完之后我随便点开几张对比原图,人傻了。有几张羊毛地毯的图,边缘出现了一圈半透明的灰边,像被啃过一样;深色胡桃木的柜子,暗部糊成一坨,完全看不出木纹。那之后我花了将近三周,把每一步的损耗都单独测了一遍。结论跟我预想的完全相反:真正吃掉画质的,不是缩放,不是锐化,是JPEG里那个默认打开的色度子采样。

先说JPEG质量参数,85和92的差距没那么大,92和4:4:4的差距才是断崖

大部分人调JPEG质量都是凭感觉滑,85觉得应该够了,100觉得最好。其实这两个数背后的东西完全不是一个维度。JPEG压缩损失分两块:亮度通道(Y)和色度通道(Cb、Cr)。人眼对亮度敏感,对色度不敏感,所以几乎所有编码器默认都会对色度做子采样,也就是4:2:0——每4个像素共用一组色度数据。这一刀砍下去,实际丢弃的颜色信息是75%。

图片

我用同一张4000×3000的胡桃木柜子图做了测试,Photoshop导出,其他参数不变,只改质量:质量85、4:2:0子采样,文件1.83MB;质量92、4:2:0子采样,文件3.21MB;质量92、4:4:4子采样(关闭色度压缩),文件5.94MB;质量100、4:4:4,文件11.2MB。关键点来了,质量85和92的差别,在手机屏幕上你根本看不出来,因为两者的色度都被砍到4:2:0了,颜色过渡的地方——地毯绒毛的渐变、木纹的红棕过渡——一样出现色块。而质量92加上4:4:4,文件只大了不到一倍,色块问题直接消失。

所以我的实际参数是:质量88~92、强制4:4:4、关闭渐进式编码。这三项里,4:4:4是最值钱的那个,也是默认最容易被忽略的那个。它在Lightroom导出面板里藏在“色彩空间/色度采样”的二级菜单里,PS的“存储为Web所用格式”里在“转换为sRGB”旁边那个小箭头里。

图片

还有一个坑得提醒:如果你的原图本来就是4:2:0的jpg,再导出成4:4:4是没用的,颜色信息已经被删掉了,找不回来。这种情况只能重新从RAW或TIFF出图。别问我怎么知道的。

锐化顺序:我用了三年才改过来的一个坏习惯

这个坑比较低级,但好像到现在还有人在踩。我一开始的流程是:原图先做USM锐化,再缩放到1200×1200。结果是大量图片出现白边光晕,深色物体边缘镶了一圈亮边,特别假。原因很简单,USM是按像素半径算的,你在4000px的图上用半径1.0,缩到1200px之后等效半径变成了3.3px,光晕直接被放大三倍。

图片

正确的做法只有一种:先在最终尺寸下缩放,再锐化,而且锐化量要按最终尺寸来定。对于1200×1200的商品图,我现在用的是这个组合——缩放插值选双三次(较平滑),不要选“两次立方(适用于扩大)”,那个会给边缘加锐;如果原图本身发肉,先在原始尺寸下做一次USM,半径0.6、数量80%、阈值4,阈值设4是为了避开噪点被锐化;缩放到1200×1200;在最终尺寸上再做一次USM,半径0.8、数量60%、阈值2。三步加起来有点烦,我用一个PS动作串起来,跑3200张图大概两个半小时。

还有个反直觉的点:阈值比数量重要。阈值设成0的时候,皮肤的毛孔、布料的纹理、天空的噪点全都被强化,看起来特别脏。设成3到5,平坦区域基本不动,只有真正的边缘会被锐化。我之前一直把数量往高了堆,阈值不动,结果越锐越糊,绕了大半年。

色彩和位深:白底图对颜色准确度的要求比一般照片高得多

图片

大部分电商平台的审核规则写的是“sRGB”,但没人告诉你是哪个sRGB。问题在于,如果你在Adobe RGB的工作空间里修图,导出的时候转sRGB,深蓝、深绿和饱和红色会整体变暗、变灰,这叫色域映射,是必然发生的,只是程度问题。我的做法是修图一开始就把工作空间设成sRGB IEC61966-2.1,虽然色域窄,但你看到什么就是什么,不会在导出的时候被“翻译”一次。

位深方面,8位和16位在单个图层上差别不大,但如果你要叠曲线、色阶、可选颜色三层以上,16位的优势就出来了。我之前调一张深色胡桃木的图,8位下调色阶,暗部直接出现一圈一圈的同心圆,也就是色阶断层。切到16位重做,同样的参数,断层没了。代价是文件大两倍,PS处理速度慢大概30%到40%。我的折中是:需要大幅度调色的图(曝光补偿超过1EV,或者饱和度调整超过20%)用16位,其他的8位走完,不折腾。

图片

现在我的完整流程是这样的

跑过这3000多张之后,流程基本定型了:先用ExifTool批量读一遍元数据,把相机型号、原图尺寸、色彩空间整理成CSV,心里有底;原图是RAW或TIFF的走16位流程,是jpg的直接8位,别折腾;统一工作空间为sRGB,统一缩放到1200×1200,插值算法选双三次(较平滑);在最终尺寸上做USM,半径0.8、数量60%、阈值3;导出JPEG,质量90、4:4:4色度采样、嵌入sRGB配置文件、关闭渐进式;最后用ImageMagick批量检查一遍文件大小和尺寸,异常的单张回炉。

这套参数不一定是“最好”的,因为“最好”取决于你的图是什么。但至少它是可复现的,你能知道每一步发生了什么,而不是滑个滑块看运气。如果你也在做批量图片处理,我建议别急着上AI超分或者一键美化那类工具,先花两个小时,拿一张你最熟悉的图,把上面这几个参数挨个单独改一遍,放大到200%对比着看。你对“画质”的理解,可能跟软件的默认设置完全不是一回事。

标签: