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 校正,才能显示图片原本的颜色
Mac OS X 对 ICC 支援度完整,任何一个程式都可以透过系统 ColorSync 转换成正确的颜色
Windows 本身不支援读取档案 ICC,无法管理萤幕色彩,也没有 gamma 校正能力。(管理设备的部份从 Vista 开始内建)
若软件本身支援 ICC(像 Photoshop),会是这种情形
若是直接使用 IE 这种内建程式,就变成这样(IE9.0 开始加入 ICC 支援)
所以 Windows 只有在使用 Photoshop 这类支援 ICC 的程式,安装输出设备管理程式,对输出装置校色,并搭配 Adobe Gamma 之类的校正工具时,才能达到与 Mac OS X 相等的色彩显示能力。
例子:同一张图片,用不同版本 Windows 不同程式打开,颜色都不一样
同样的图片,在 Mac OS X 上,用不同软件开启,色彩完全一致
这个例子反应出系统读取档案 ICC 描述的能力。Windows 默认使用 sRGB 色域,无法解读其它色域的内容,就造成不同程式显色上的问题。就如最初例子中,不懂得换算单位的结果。Mac OS X 内建 ColorSync API 做一切色域转换,任何程式皆能透过此 API 来转换正确的色彩。
接着,利用播放动画,来测量 OS 对不同的硬件支援程度(笔电萤幕是 40% NTSC,外接萤幕是 90% NTSC 广色域)
用 Windows 播放时,色彩表现差不多就是 40% 跟 90% 的差别
用 Mac OS X 播放时,两者颜色相当接近
这个例子在说明,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 写的,那就残念了)
另一个有趣的例子: | |
这是 Google Chrome 浏览器,版本号 19.0.1084.46 | |
在 Windows 7 上面完全不支援 ICC |
在 Mac OS X 上可正确显示 ICC v4 的颜色 |
其实 Google Chrome 本身并不支援 ICC,程式也不是用 Cocoa 或 Carbon 写的,但仍可使用 MacOS 提供的 ColorSync API 去事后修正图片色彩。(Chrome v22 开始内建支援 ICC profile v2) |
透过 ICC 标准,可以让各种色域的所有设备都有一致且正确的颜色
而 Microsoft 联合 HP 发展出另一套 sRGB 的标准
看起来十分完美,所有设备都用 sRGB 色域,不用再转换,达到大一统的境界
这种想法说穿了很单纯,只要全世界的人都讲英文,就不会再发生无法沟通的情况了不是?
但是,真的有这么简单就让全世界的人都讲英文吗?英文单字就足够完全取代全世界任何其它语言吗?我想答案很明显(光是”江湖”这个词,我就不知道怎么翻成英文)
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)