javascript中的伪随机颜色生成器

Pseudo random colours generator in javascript

本文关键字:颜色 随机 javascript      更新时间:2023-09-26

从这个问题开始: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,它只在最后一位与银色不同。

我希望我已经解释清楚了。你能做到吗?

谢谢欢呼

就像有人说的一样是模糊的词:)

如果这个功能真的很重要,你可以尝试使用CIE LAB颜色模型来定义"色差"。L * a * b模型

取值:L, a, b

可以计算ΔE = sqrt((ΔL) ^ 2 +(Δ)^ 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)and看看是否有"不同"的颜色

我从来没有这样做过,这只是一个想法:)

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的值。:)