簡體   English   中英

JavaScript中的偽隨機顏色生成器

[英]Pseudo random colours generator in javascript

從這個問題開始: 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 +(Δ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 ),然后查看其是否為“不同”顏色

我從來沒有做過,這只是想法:)

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價值,您的喜好。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM