前一阵子,我在做Google 静态地图生成器这个小网页程序时,遇到一个拾色器的问题:输入框的背景颜色随输入框内部 HEX 值得变化而变化,同时必须保证文字颜色与背景颜色保持较高的对比度,否则在同深或同浅的情况下就会造成辨识不清。想到这儿,我就开始在百度和 Google 上搜寻,以期找到一个算法实现上面的功能,然而怎么变换关键字,都找不出有用的条目,直到最后迫不得己,找到一个具有该功能的网页,扒代码,看后醍醐灌顶,原来如此。

我们从小学的自然课上开始,就一直被教导,纸上的一切色彩都是由红、黄、蓝三种基色构成的(加色原理),后来又知道了电视机的显像管是由红、绿、蓝三种基色构成的(减色原理),直到接触计算机,所见到的游戏、软件、HTML 代码,无一例外,调色时都是 RGB(xx,xx,xx),然而 RGB 是一种将亮度,色度混合表现的色彩模式,很难将亮度单独剥离出来计算。直到看了那段代码才恍然大悟,只要将 RGB 转换为 HSL 即可!这样就把亮度剥离成一个值,只要设置一个合理的亮度阈值,大于阈值显示黑色文字,小于阈值就显示白色文字,看似不可能完成的算法已经变成了判断变量与给定值大小的问题,这他喵的幼儿园的小朋友都会做啊。回过神来,想了想,Photoshop 的默认调色盘不就是 HSL 模式吗?打开了无数次 Photoshop,用了无数次的 HSL 调色盘,也没能打破在我大脑里根深蒂固的 RGB 模式。好吧,我也承认我看 Photoshop 的书不仔细,对 HSL 色彩空间的理解远差于 RGB 和 CMYK,Lab 模式更是一塌糊涂,亟待充电。

惯性思维是什么呢?是人们对某种熟悉事物的习惯想法,是建立在个人经验之上的思维方式。人总是习惯性懒惰的遵循过去的思路思考问题,造成思考事情时有盲点,且缺少创新或改变的可能。人又难以察觉惯性思维的形成和出现,因为这是一个缓慢而又坚定的过程,知识和阅历越多越丰富,惯性思维的可能性往往也越大,也更难跳出。

我从小就被周围的人说有想法、爱创新(这个真不是自夸),然而随着人变老,感觉自己的想法正在逐渐的枯竭,因为我一直用常用的方式思考,用常用的行为方式处事,久而久之,惯性思维的负面影响也越来越大。其实这也并不可怕,做事、面对问题时,要不时停下来思考一下,是否又跳入固有思路了,及时反思、调整,避免陷入而不自知,多点新意,才能让生活变得更有情趣…

 

╮(╯▽╰)╭,从我写下这个标题时,我就知道写出来的东西将不可避免的变成一个高考阅卷超不过 15 分的四流不入流议论文,这就是所谓的惯性思维吧?但是要我把此文写成既抒情又叙事还要讲事理的现代诗更是板儿逼不可能的事儿,所谓的创新还是需要一定能力的…

附:

RGB:是通过对红 (R)、绿 (G)、蓝 (B) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。

HSL:是通过对色调 (H)、饱和度 (S)、亮度 (L) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。

RGB 模式转换为 HSL 模式的代码:

//RGB 转 HSL 的 Javascript 代码,原理同样适用于 C,Java 等。
RGBToHSL = function (rgb) {
     var min, max, delta, h, s, l;
     var r = rgb[0], g = rgb[1], b = rgb[2];
     min = Math.min(r, Math.min(g, b));
     max = Math.max(r, Math.max(g, b));
     delta = max - min;
     l = (min + max) / 2;
     s = 0;
     if (l > 0 && l < 1) {
       s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
     }
     h = 0;
     if (delta > 0) {
       if (max == r && max != g) h += (g - b) / delta;
       if (max == g && max != b) h += (2 + (b - r) / delta);
       if (max == b && max != r) h += (4 + (r - g) / delta);
       h /= 6;
     }
     return [h, s, l];
   };
// 根据 L 判断文本是用黑色还是白色:
color: hsl[2] > 0.5 ? '#000' : '#fff'