你导出一张照片,看起来没问题。你上传它,在网站上颜色变得平淡。或者反过来:你手机的截图在别人笔记本上显得刺眼地过饱和。中间没有任何编辑。像素一个都没变。
变的是解读方式,而要理解为什么,只需要一个概念。
一个像素存的是像 255, 0, 0 这样的东西。很容易把它读成“红色”,但它不是。它的意思是这个系统能产生的最红——而那实际上有多红,完全取决于你说的是哪个系统。
色彩空间就是那个把这些数字变成真实颜色的定义。它精确指定最大值对应到哪个物理上的红、绿、蓝。换一个色彩空间,255, 0, 0 就变成另一个红色——即使文件里没有一个位移动过。
整个问题就在这里。同样的数字,对照两个不同的定义去读,产生两张不同的图。
sRGB 在 1996 年标准化,是照那个年代的屏幕能做到的事建立的。它是最小公分母,至今仍是网页的默认假设。它能重现的颜色范围——它的色域——不大,而这正是它安全的原因:此后几乎每一台显示器都能完整显示它。
Display P3 是现在多数手机、笔记本和电视使用的较宽空间。它涵盖的颜色比 sRGB 多约 25%,多出来的主要在饱和的红色和绿色。一场鲜艳的夕阳或一片深绿的叶子,有些颜色存在于 P3 而在 sRGB 里根本无法表示——它们会被截回最接近的 sRGB 颜色,而那更黯淡。
所以 P3 比较好,在“能描述更多”这个意义上。那和“对某个文件来说是正确选择”不是同一件事。
每一张图都可以带一个叫 ICC profile 的小标签,说明它的数字属于哪个色彩空间。色彩管理不过就是读那个标签、然后据此调整显示的做法。
失败只有一种形状,但有两个方向:
P3 数据、没有 profile、被当成 sRGB 显示。软件看到饱和的数字,拿较窄的定义去解读。出来的一切都过于鲜艳——皮肤像晒伤、红色发光、绿色绿到像有辐射。这是远远最常见的版本,也是人们说一张图“在网上看起来怪怪的”时通常指的那个。
sRGB 数据被误读成 P3。相反:一切看起来褪色、带点灰。
两种情况里图都是完好的。坏掉的只有那个标签——不是没了就是错了。
这一点值得单独警告,因为人们是出于正当理由照做的,然后解释不了结果。
为网页优化图片经常包括移除元数据——相机设置、GPS、时间戳——来省字节。那是好建议。但ICC profile 也是元数据,而一个设置成“全部剥除”的工具会把它跟其他东西一起带走。
文件小了几 KB,颜色坏了,而且如果你工作的那台机器的显示器刚好符合那个假设,在你这边是看不出来的。剥元数据时把色彩 profile 留着。它很小,而且它是唯一会改变图片外观的那一部分。
图像软件提供两个听起来很像、做的事却相反的操作。把它们搞混,就是颜色被永久破坏的方式。
转换到某个色彩空间:软件重新计算每一个像素,好让你看到的颜色尽可能维持原样。数字变了;外观保住了。这几乎永远是你要的。
指定某个色彩空间:数字原封不动,换的是标签。外观会偏移,因为同样的数字现在代表别的意思。
指定只在一种情况下有用:当一个文件弄丢了它的 profile,而你知道它本来应该是什么,指定正确的那个就还原了真相。误用的时候——对一张 P3 的图“指定 sRGB”而不是“转换成 sRGB”——它会把错的颜色烤进去。
你可能正在产出 P3 图片而从没选过。iPhone 的照片和截图默认就是 P3。拍宽色域配置文件的现代相机也是。近期硬件上的屏幕录像和设计软件往往也是。
这就是为什么这个问题会在从没碰过色彩设置的人身上凭空出现:拍摄端变宽了,交付端还停在 sRGB,而唯一撑住这件事的,是一个中间某个工具可能悄悄丢掉的标签。