去年帮表妹弄教师资格证报名的照片,480×640 的证件照,在 Photoshop 里看着好好的,传到报名系统里横过来了,人躺着。她以为是文件太大,又找了某个在线工具压了一遍,结果更糊。我俩折腾到晚上十一点多,最后发现是 EXIF 里一个叫 Orientation 的字段在作怪。这个字段一共 8 个取值,手机竖着拍的时候,传感器其实是横着的,系统只在文件里写一句「显示的时候转 90 度」,图本身根本没转。PS 保存时默认保留这个标签,某些在线工具读、某些不读,于是就出现了「我这边看着是正的,你那边看着是躺着的」。
先说方向,这个坑最常见,也最好解决。Photoshop 里用「文件 > 导出 > 导出为」,或者老一点的「存储为 Web 所用格式」,出来的图会按视觉方向把旋转烘焙进像素,顺手重置 Orientation。命令行更省事:exiftool -Orientation=1 -n -overwrite_original *.jpg,把方向标签直接归位。ImageMagick 用 -auto-orient 也是干这个的。判断方法土但准:把图拖进浏览器新标签页,如果浏览器显示是正的、某个修图软件里是歪的,那基本就是它,别去怀疑镜头。
然后是色彩,这个比方向隐蔽得多,因为它不会让你看见「错误」,只会让你看见「不好看」。sRGB 和 Adobe RGB 的差别,很多人知道有差别,但不知道差在哪一步。你的相机、你的 PS 工作空间可能设的是 Adobe RGB,色彩比 sRGB 宽——Adobe RGB 在 CIE xy 色度图上大概能覆盖 sRGB 的 1.3 到 1.4 倍面积,多出来的部分主要在青绿一带。问题在于微信、微博和大多数浏览器默认按 sRGB 解释像素值,有的平台重新编码时直接把 ICC 配置文件丢掉。一份标着 Adobe RGB 的图被当成 sRGB 显示,结果就是颜色发灰发闷,红不够红,绿也蔫了。所以正确做法是:加工时可以用宽色域,导出前一定要「转换为配置文件」到 sRGB IEC61966-2.1。注意是「转换」不是「指定」——指定只是贴个标签,像素值一动不动,颜色反而更错。
第三个是 DPI,这个坑最冤。很多报名系统、论文投稿系统写着「照片要求 300dpi」,其实它真正要的是像素尺寸,比如 295×413 像素。dpi 是打印概念,一张图躺在硬盘里只有像素,没有物理尺寸,dpi 是等你按某个尺寸打印时才被算出来的。我见过有人在 PS 的「图像大小」里把 72 改成 300,分辨率那栏取消勾选「重新采样」,像素一点没变,图也没变清楚,但文件信息里的 dpi 变成 300 了,系统就放行了。这不叫修图,这叫哄系统。反过来说,如果系统真要尺寸,你该盯的是像素那一栏的数值,不是分辨率。
把这三件事串起来,其实是一个很固定的处理顺序,顺序错了就白干。第一步看方向,把 EXIF 方向烘焙进像素;第二步定色彩,工作空间随你,但导出前统一转到 sRGB;第三步才轮到改尺寸和压缩。很多人反过来,先压到 100KB,再转格式,最后发现颜色不对又重新来一遍——每转一次格式,JPEG 就掉一次质量,转三遍的图和转一遍的图,放大看差别肉眼可见,尤其是天空和大面积渐变的地方会出现明显的色阶断层。
我自己现在基本不用在线工具了,主要是批量时太慢,而且你不知道它背后动了什么。日常一条 ImageMagick 命令搞定:magick input.jpg -auto-orient -profile sRGB.icc -resize 1080x1080> -quality 82 output.jpg。这里 -auto-orient 处理方向,-profile 换成 sRGB,-resize 后面那个大于号表示只缩不放,-quality 82 是我试下来在微博和微信里肉眼基本看不出损失的值,再往下压到 70,天空的渐变就能看到台阶了。批量清元数据用 exiftool -all= -overwrite_original *.jpg,但注意这条会把 ICC 也一起清掉,清完记得重新指定色彩空间,别让图变成没有色彩配置的裸奔状态。
说到底,我越来越觉得「图片加工」这个词被带偏了。市面上九成教程在教调色、磨皮、加滤镜,但真正让人返工的,是这些看不见的元数据。你换了三款 App、两个网站、一个付费软件,问题还在,因为问题根本不在工具上。先把方向、色彩、尺寸这个顺序理清楚,用哪个工具反而没那么重要。表妹那张照片最后我用 exiftool 一条命令修好了,前后十秒,前面那四个小时,全花在试工具上。