Mac & Windows 色彩管理差异

原文来自这位日本专家的网页…
液晶ディスプレイとカラーマネージメント

那个网页很详尽的叙述 Windows 和 Mac OS X 的色彩管理能力
文章一开始,有 3 张相同的照片,内嵌不同的 ICC 描述档
(ICC = International Color Consortium = 国际色彩协会)

用 IE8 或更旧的 IE 版本看是这样

改用 Safari(IE9 以后)的浏览器则变成这样

上面这个例子在说明浏览器支援 ICC 的差异。IE 看到的三张图片颜色都不一样,其实三张颜色都是错的。Safari 显示出来的图片,三张颜色一致且完全正确。
如果你贴的照片,在别人萤幕上看起来很糟,别怀疑,这就是浏览器的错。

不了解何谓 ICC 描述的人,请看下面这个简单的比喻:

有三个人分别叙述自己手中笔的长度

  • 第一个说 14 cm
  • 第二个说 0.46 ft
  • 第三个说 5.5 inch

若听者不懂长度单位,会以为笔有 14, 0.46, 5.5 三种长度
但是懂得换算单位的人,就知道这三个人的笔其实都一样长


物体本身反射出来的光,用相机拍摄下来,从类比讯号转成数位资料储存。
电脑读取图片,再从数位资料转换成类比讯号,透过萤幕显示出来给人看。
一张照片,中间其实经过许多处理和转换,才能重现眼前。

不同的硬件都有不同的色彩特性
用相机拍摄照片时,相机本身会把自己的捕色能力记录成 ICC 嵌入图片。
工厂制造萤幕,也会把萤幕的显色能力记录在驱动程式的 ICC 中。

电脑从图片档读取 ICC,再根据显示器的 ICC,把相机感应到的色彩转换成萤幕对应的发色,
最后再经过 gamma 校正,才能显示图片原本的颜色
ImageDisplay_CMS_Workflow

Mac OS X 对 ICC 支援度完整,任何一个程式都可以透过系统 ColorSync 转换成正确的颜色
ImageDisplay_MacSafari

Windows 本身不支援读取档案 ICC,无法管理萤幕色彩,也没有 gamma 校正能力。(管理设备的部份从 Vista 开始内建)
若软件本身支援 ICC(像 Photoshop),会是这种情形
ImageDisplay_WinApp

若是直接使用 IE 这种内建程式,就变成这样(IE9.0 开始加入 ICC 支援)
ImageDisplay_WinIE

所以 Windows 只有在使用 Photoshop 这类支援 ICC 的程式,安装输出设备管理程式,对输出装置校色,并搭配 Adobe Gamma 之类的校正工具时,才能达到与 Mac OS X 相等的色彩显示能力。

例子:同一张图片,用不同版本 Windows 不同程式打开,颜色都不一样 CMS_Comp_Win_mini

同样的图片,在 Mac OS X 上,用不同软件开启,色彩完全一致
CMS_Comp_Mac_mini

这个例子反应出系统读取档案 ICC 描述的能力。Windows 默认使用 sRGB 色域,无法解读其它色域的内容,就造成不同程式显色上的问题。就如最初例子中,不懂得换算单位的结果。Mac OS X 内建 ColorSync API 做一切色域转换,任何程式皆能透过此 API 来转换正确的色彩。

接着,利用播放动画,来测量 OS 对不同的硬件支援程度(笔电萤幕是 40% NTSC,外接萤幕是 90% NTSC 广色域)

用 Windows 播放时,色彩表现差不多就是 40% 跟 90% 的差别
MovieColor1_WindowsVista_mini
MovieColor2_WindowsVista_mini

用 Mac OS X 播放时,两者颜色相当接近
MovieColor1_MacOSX_mini
MovieColor2_MacOSX_mini

这个例子在说明,Windows 输出画面时,仅依自己标准输出,无法正确对应萤幕 ICC 来修改显卡 LUT。所以萤幕的好坏,会让画面差距极大。而 Mac OS X 会针对不同等级的萤幕,自动做最适化输出。好萤幕有最漂亮的画面;等级低的萤幕,也能显示出还不错的效果。
所以常常有人会觉得,明明是同一颗萤幕,好像接上 Mac 后画面就变漂亮了。没错,这不是错觉,真的就是这样。


为什么会有这种差异?

麦金塔这个系统在早期开发时,就已经加入了所见即所得(WYSIWYG)的想法,1982 年开发出高性能的 QuickDraw 绘图引擎,可处理萤幕和驱动打印机输出。随着 MacOS 的发展过程中,也开发出 TrueType, PostScript 这类字型,就是希望萤幕上看到的,跟印刷输出是完全一样的东西。简单的说,Mac 一开始就把萤幕当成一张纸来看待。而在 Windows 发展过程中,并没有这种想法。微软虽然有功能类似 QuickDraw 的 GDI,但是效能不彰,一直到 1995 年 DirectDraw (包含在 DirectX 之内)出现,才算实现了 WYSIWYG。

以应用软件来比喻,就是 Windows 属于文字编辑器,而 Mac 是排版程式。
Windows 着重在文字内容(类似现今的 HTML),而 Mac 重视整个版面的呈现。
又如呈现老人与海的一张照片,Windows 觉得画面中有老人、有鱼、也有海就足够了,Mac 还希望色调要能表现出老人的沧桑、鱼的凶猛、海的深邃感。大概就是这样的差别吧。

 

Mac OS X 打从底层就支援 ICC,不管描述的色域有多大,OS 就能吃多大
Carbon, Cocoa 就叠在 ColorSync API 上面,所以任何用 Carbon, Cocoa 写出来的程式,直接就支援 ICC
(当然,也有少数程式并不是用 Carbon/Cocoa 写的,那就残念了)
ColorSync_onOSX

另一个有趣的例子:
这是 Google Chrome 浏览器,版本号 19.0.1084.46
在 Windows 7 上面完全不支援 ICC
chromewin7
在 Mac OS X 上可正确显示 ICC v4 的颜色
chromeosx
其实 Google Chrome 本身并不支援 ICC,程式也不是用 Cocoa 或 Carbon 写的,但仍可使用 MacOS 提供的 ColorSync API 去事后修正图片色彩。(Chrome v22 开始内建支援 ICC profile v2)

透过 ICC 标准,可以让各种色域的所有设备都有一致且正确的颜色
ColorWorkflow_ICCbased

 

而 Microsoft 联合 HP 发展出另一套 sRGB 的标准
看起来十分完美,所有设备都用 sRGB 色域,不用再转换,达到大一统的境界
ColorWorkflow_Windows
这种想法说穿了很单纯,只要全世界的人都讲英文,就不会再发生无法沟通的情况了不是?
但是,真的有这么简单就让全世界的人都讲英文吗?英文单字就足够完全取代全世界任何其它语言吗?我想答案很明显(光是”江湖”这个词,我就不知道怎么翻成英文)

sRGB 色域比 AdobeRGB 小得多,甚至无法完全覆蓋商业印刷的 CMYK 色域,
sRGB 转成 CMYK 时,会在绿色和青色损失较多。

Windows 以压倒性的市占率,罔顾 ICC 标准,迳自走 sRGB 标准(亏 MS 还曾经是 ICC 创始会员之一),结果衍生出许多萤幕上看到 A 色,印出来却是 B 色,甚至拿到别的萤幕上又变成 C 色的问题,这让许多印刷业叫苦连天.
如果你曾经用打印机印图或拿去印刷,结果印出来颜色完全走样,这就是 Windows 的伟业。


文章最后我要说明一下…为什么 sRGB 不适合成为共同标准?主要原因在于色域本身定义就不适合.

  • sRGB 色域的定义,是红、绿、蓝三色光演绎出来的颜色,每色光有 8bit = 256 阶的明暗变化,由此演绎出 16777216 种颜色。简单的说,sRGB 色域实际上就是针对当初的 CRT 萤幕讯号设计的。而现在都有不少新萤幕的显色能力超过 sRGB 了。
  • CMYK 色域是由青、洋红、黄、黑,四种色料去调配(CMY 刚好跟 RGB 是互补色)。印刷品本身不会发光,仅能靠反射光来显色,所以这样的定义最合情合理。换句话说,CMYK 色域最适合也仅适合用在印刷刊物上。
  • 现行最大的色域标准,是模拟人类视觉的感知行为所定义出的 Lab 绝对色域(CIELab),基本上所有其它色域都包含在 Lab 色域之内。一般从 A 色域要转换到 B 色域时,也是先把 A 转成 Lab,再由 Lab 转成 B。

那有人也许会问,为什么不直接用 Lab 色域就好?因为到目前为止,Lab 仅是一个理论上的定义,人类还没有设备可以正确重现 Lab 色域的所有颜色,而且各种现行设备都有自己专用的色域,如萤幕是靠 RGB 三种色光的不同亮度比例来搭配显色,所以直接用 xxRGB 类的色域最适当。并不是无脑用 Lab 就最好。

同样地,各种色域皆有自己适合的用途,用其中一种色域想通吃所有设备和应用,这个想法本身就有问题。
像目前热门的无线网络技术有蓝牙、WiFi、LTE…,每种技术有自己适用的范围。蓝牙是个人短程使用,WiFi 是中距离多人共用,LTE 是长程可支援相对高速移动。用不适合的技术想跨域硬干(ex: WIFLY),不但事倍功半,而且仍会存在不少使用限制。

发表回响 (email & name are necessary)