将深色与浅色分开的算法? (例如:#ffffff / 2下的任何东西都是黑暗的?)

时间:2014-06-23 10:13:37

标签: javascript colors

我有一个需要嵌入各种网站的iframe,并根据网站文字颜色应用了2个样式表(浅色和深色)。此时,我以这种方式应用样式表:

  • 如果文字颜色> #ffffff / 2 =>黑色样式表
  • 如果文字颜色< #ffffff / 2 => light stylesheet

但显然这并不总是有效。

所以我需要找到一种更好的算法来将深色和浅色分开。我知道这永远不会100%准确,但至少我需要的东西比我的解决方案更好。

有什么想法吗?

谢谢!


coffeescript代码:

calculateTheme = (hexcol)->
    if (parseInt(hexcol, 16) > 0xffffff/2)
      return "dark"
    else
      return "light"

2 个答案:

答案 0 :(得分:1)

我原本以为问题的一部分在于RGB颜色有3个元素并且可以变暗或变亮,以制作麦克风。

即:#FF0000为红色,但随着值减小,它接近暗红色,#EE0000

同样的原则适用于其他2个组件。我建议构建算法,在其中提取所有3个组件然后进行测试,然后查看它们与00的接近程度。

来源:http://www.rapidtables.com/web/color/RGB_Color.htm

编辑:This article似乎是一个很好的信息来源。

答案 1 :(得分:0)

检查以下代码是否有效

 function getNumberRange(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
 }

 function getRandomHexColor() {
  var result = "0x";
  for (var i = 0; i < 6; i++) {
      result += getNumberRange(0, 15).toString(16);
  }
  return result;
 }

var colorVal = getRandomHexColor();

if (colorVal > 0xffffff / 2) {
  alert(colorVal + " :  is light");
} else {
 alert(colorVal + " : is dark");
}