从这个问题开始: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,它与最后一位的银不同。
我希望自己解释一下。你能以某种方式这样做吗?
谢谢干杯
答案 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
值。 :)