同一张截图,压之前是正常的灰白界面,压完再打开,白色偏蓝、灰色偏紫,蓝色按钮反而更艳。不是压缩算法算错了,多半是颜色配置在中途掉了。截图工具在广色域显示器上抓图时,会附一段色域说明;压缩只搬像素不搬说明,看图软件就按默认的sRGB去猜,整张图朝一个方向偏。截图压缩后颜色发紫,问题出在配置。

像素值本身没有颜色含义,配上色域说明才知道代表什么。广色域范围比sRGB大,同一个"饱和蓝"的数值,在广色域里对应的实际颜色更艳。
抓图时工具会把当时的色域一并写进文件。软件读到配置就按配置解释,颜色是对的;配置丢了只能按sRGB猜,画面整体偏,艳的更艳、淡的更淡。
JPG的颜色配置存在APP2段,PNG存在iCCP块,都是一小段附加数据。压缩工具为了缩体积,常把这类"不影响解码"的信息一起清掉,元数据、拍摄信息、颜色配置都在清理范围。
清掉之后像素一个没变,解释方式变了,文件看起来什么都没动却变了色。
另一条路也常见:工具做了转换,把广色域值换算到sRGB,但没做完整映射,超出范围的部分被截断,高饱和区出现色块和断层。
第一步,压之前先看文件属性里的颜色配置。Windows上右键看属性里的详细信息,Mac上看预览的检查器,能看到写的是sRGB还是别的色域。
第二步,写的不是sRGB就先别压。打开JPG图片压缩,选择尺寸保持「原始尺寸」,压缩等级留默认的70,压一份副本。

第三步,原图和副本并排打开,在同一块屏上比。两块屏对比没意义,显示器本身的色域不同,差别分不清是文件还是屏。
第四步,确认偏色再定路线。只是发出去看,偏一点可以接受;要进文档、交付、印刷,就得先转色域再压缩,顺序不能反。
第五步,转色域走图片格式转换,输出选JPG,转换会把颜色换算到sRGB并写入配置,再拿转换后的文件去压。
第六步,压完再看一次属性,确认配置还在。不在,说明这一档顺手清掉了,换一个保留元数据的处理方式。
一是广色域显示器上抓的图,配置写的不是sRGB,丢了就必偏;二是大面积纯白和浅灰的界面截图,白点一移整片背景都能看出来;三是饱和度高的设计稿截图,蓝紫和洋红最先跳出来。
深色界面、照片类截图、灰阶为主的图,偏一点不容易发现,但一样在偏。
截图压缩后颜色发紫,是压缩工具的问题吗?
是链路问题。压缩清掉了颜色配置,软件按默认色域解释,偏差就出现了。像素没坏,坏的是那段说明。
截图压缩后颜色发紫,为什么只有部分截图会偏?
取决于显示器色域和工具写入的配置。本来就是sRGB的截图,配置丢了也几乎看不出差别。
压完怎么把颜色调回去?
不用调。找到原始截图,先转成sRGB再压,颜色就对了。对着已偏的图调色,只会越调越远。
截图压缩后颜色发紫,本质是颜色配置在压缩时被清掉了。动手前先看文件写的是哪个色域,不是sRGB就先转换再压缩,压完复查一次配置。