javascript中的伪随机颜色生成器

时间:2013-05-28 13:25:04

标签: javascript random colors

从这个问题开始:Random color generator in JavaScript及其第一个答案:

function get_random_color() {
    var letters = '0123456789ABCDEF'.split('');
    var color = '#';
    for (var i = 0; i < 6; i++ ) {
        color += letters[Math.round(Math.random() * 15)];
    }
    return color;
}

我在问:有没有办法避免一定范围的颜色?

说我想避免C0C0C0(白银)和所有类似的阴影..我试图了解这里的颜色是如何工作的:http://www.w3schools.com/tags/ref_colorpicker.asp。我写了C0C0C0并且得到了所有相似的颜色,但显然列表不完整,因为从C0C0C0上下来我们有C6C6C6和ADADAD但我也避免了C0C0C1,它与最后一位的银不同。

我希望自己解释一下。你能以某种方式这样做吗?

谢谢干杯

2 个答案:

答案 0 :(得分:4)

正如有人说同样是模糊的词:)

如果该功能非常重要,您可以尝试使用定义“颜色差异”的CIE LAB颜色模型。 L*a*b model

它的值为:L,a,b

你可以计算ΔE= sqrt((ΔL)^ 2 +(Δa)^ 2 +(Δb)^ 2)

模特说:

0<ΔE<1 - cannot see the difference

1 <ΔE < 2 - the difference can be seen by experienced observer

2 <ΔE < 3,5 - the difference can be seen also by unexperienced observer

3,5 <ΔE < 5 - the difference is distinct

5 < ΔE - both colors are totally different

所以你将RGB转换为L * a * b(例如用http://www.easyrgb.com/index.php?X=MATH)并看看它是否是“不同”的颜色

我从未这样做过,这只是想法:)

答案 1 :(得分:1)

function get_random_color() {
    var color = new Array;

    do {
      for (var i = 0; i < 3; i++ ) {
        color[i] = Math.round(Math.random() * 255);
      }
    } while (close_to_gray(color));

    // Reformat the r, g, b binaries to #XXXXXX here, call it 'color_s'
    return color_s;
}

function close_to_gray(color) {
    var spread = 1;

    for ( var i = 0; i < 3; i++ ) {
      for ( var j = i+1; j < 3; j++ )
        if ( abs(color[i] - color[j]) > spread )
          return false;
    }

    return true;
}

这样的事情。您可以根据自己的喜好使用spread值。 :)