跳转到内容

色彩管理与 ICC

复制本页

ICC 配置文件描述像素值应当如何解释,它本身不是又一张图像。丢掉、忽略或套错配置文件时,文件仍然可以解码、缩放并重新编码,画面却可能已经偏离来源。

常见的来源差异包括:

  • 无标记的 RGB,被各入口按 sRGB 或按原始通道直接处理。
  • 嵌入 ICC 的 RGB,需要先决定是保留、转换成目标空间,还是在导出时剥离。
  • CMYK,通道含义和 RGB 不同;把它当成三通道 RGB 会得到错误颜色。
  • Display P3 等宽色域,在 sRGB 屏幕或编码器里可能被裁切,文件却仍然“有效”。

libvips 用 colourspace 和 icc_transform 一类操作表达这些转换。binding 可能把它包进导入选项、导出选项,或要求调用方显式调用。包装层的默认值必须按该 binding 的文档核对,不能从函数能够返回推断转换已经发生。

  • 输出能打开,尺寸和通道数也符合预期,但配置文件在导出时被去掉了。
  • CMYK 输入被解码成某个 RGB,调用方没有记录源配置和目标配置。
  • 缩略图路径为了速度跳过色彩转换,而全尺寸路径没有跳过,两套结果因此不同。
  • 一个入口链接的 libvips 带 LittleCMS,另一个构建没有,同样的调用名不会做同样的事。

这些情况都需要输入里真实存在的配置文件,以及导出后重新读回的配置文件名称或“确实没有配置文件”这一事实。当前样本做不到这一点。

已执行的 JPEG 是普通的 3 通道照片,不能用来证明 CMYK、P3 或 ICC 往返。在有可公开再分发的配置文件样本之前:

  • 不给出 “转换到 sRGB 后颜色正确” 的结论;
  • 不比较四个 binding 的色彩像素;
  • 不把 Alpha 页里的透明图形当作色彩管理样例。

颜色异常的排查入口是色彩偏移。透明度是另一条线,见 Bands、Alpha 与透明度。