今天做投票系统的界面的时候又遇到了那个问题:用图片表示的部分和纯色部分衔接有问题。我开始还以为是我当时编写的时候就有问题,由于显示器的缘故儿没有发现。今天想解决一下这个问题,找找原因。
我先打开了 GIMP,把用的背景图片打开,取了颜色,发现颜色就是其他部分的颜色。我就奇怪了,从数值上说应该是一样的才对。然后我就取了 Firefox 里面的色,发现 Firefox 里面图片对应位置的颜色被修改了?!
下面是一个关于这一 bug 的演示:

如果你看了觉得看到的是一个完全的纯色的区域,那么说明你没有遇到这一问题。但如果你看到不是一个纯色区域,那么就说明你也遇到了同样的问题……找了一圈,没有发现相关的中文资料,觉得非常无语,难道都没人发现这么严重的问题么……
在英文资料中我倒是找到了些头绪。首先,Mozilla 表示这是一个 Feature 而非一个 Bug!他们声称这是在 Firefox 3.0 中引入了默认的颜色管理 (Color Management) 和颜色矫正 (Color Correction),但默认被禁用,而在 Firefox 3.5 中由于效率的改进将其默认设置改为对于部分图片打开了。根据 Mozilla 官方的资料来看,这无疑是一个很好的进步,因为它使得 Firefox 显示的色彩可以和这一图片反映的真实色彩一致,使得这一图片无论在任何平台或者任何显示、输出设备上得到的颜色都是一样的。可是可是,问题是,如果 Firefox 和 GIMP 上显示的效果不一样,而 Firefox 又是正确的,那么 GIMP 作为可以在大部分场合取代 Photoshop 的图片处理软件的颜面何存呢?所以显然错的是 Firefox……
在官方文档的最后,我们终于找到了,Mozilla 承认这是一个 bug,并且辩称仅仅是因为只支持到了 ICC 第二版,而没有支持到第四版导致的“图片可能偏暗” (This may result in images being too dark.)……Firefox 啊 Firefox,真不是我说你,ICC 第四版早在2001年就发布了,你既然准备支持了还不直接支持到完全,结果搞出这么个莫名其妙的 bug 还好意思说是 Feature……
说的差不多了……最后是解决的办法:对于用户来说,如果遇到这种情况,可以直接在 Firefox 的设置里面调整使之不自作聪明的进行错误的颜色矫正。只要打开 about:config,然后找到 gfx.color_management.mode 一项,将其值修改为 0 并重新启动 Firefox 即可。至于网站制作者,可以通过去除所有可能激活 Firefox 颜色矫正机制的信息来解决,对于 png 图片来说,就是安装 pngcrush 软件,然后对图片运行下面命令:
1 | pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB 输入文件.png 输出文件.png |
这件事呢,不禁让我想起了当年 IE 浏览器(8以下)对于 gamma 值的误读,也是自作聪明地来矫正颜色。这次 Firefox 的做法和当年的 IE 几乎如出一辙,实在是不能不让人感到失望啊。
参考资料:
- ICC color correction in Firefox – MDC
- color correction for images in Firefox 3.5 ✩ Mozilla Hacks
- ICC profile – Wikipedia
- Pixel Acres » Fixing PNG Gamma
最后,来看看你的浏览器和系统是否支持 ICC 标准了?里面还有一个 PDF 文件用于测试你的 PDF 阅读器。根据我的测试,Firefox 3.5(被我调整过设置的)、Chromium 5.0、Opera 10.0 无一支持 ICC,Firefox 3.5(默认设置)倒是可以正常的显示下半部分(ICC version 2),不过 Ubuntu 默认的 PDF 阅读器 Evince 倒是支持的很正常,看来 GNOME 还是很牛X的~
这里有個测试, 可以测试各浏览器对 ICC 标准的支持情况, Chrome 或 Safari 都能完美的支持 ICC v4
http://www.color.org/version4html.xalter
这个测试我在文章最后不是都有写么……
根据我的测试 Chromium 5.0.xxxx for Linux 的 Daily Build 至少是不支持的……
ChromePlus(基于Chromium 4.xxx)也不支持。。。
纯色
纯色 Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8 – Build ID: 20100106054534