我有一组颜色,想要找到它们的相对色彩饱和度。请问有人可以用javascript给我提供一个示例吗?非常感谢!
我有一组颜色,想要找到它们的相对色彩饱和度。请问有人可以用javascript给我提供一个示例吗?非常感谢!
// 您可以通过饱和度和亮度来比较颜色 -
function rgbtoHsv(rgb){
var c= rgb.match(/\d+/g),
r= c[0]/255, g= c[1]/255, b= c[2]/255,
max= Math.max(r, g, b), min= Math.min(r, g, b),
h= 0, s= 0, v= max;
if(max!= min){
var d= max-min;
s= d/max;
switch(max){
case r: h= (g-b)/d +(g< b? 6: 0);
break;
case g: h= (b-r)/d + 2;
break;
case b: h= (r-g)/d + 4;
break;
}
}
return [Math.round(h*60), Math.round(s*100), Math.round(v*100)];
}
function sortColors(a, b){
var a1= rgbtoHsv(a), b1= rgbtoHsv(b);
return (b1[1]+b1[2])- (a1[1]+a1[2]);
}
var colors=['rgb(255,0,0)','rgb(150,150,150)','rgb(0,200,100)','rgb(0,255,255)']; // colors.sort(sortColors).join('\n')
以上代码定义了一个包含四个颜色值的数组,使用sort()方法按照规则排序后以换行符连接成字符串返回。/* returned value: (most to least 'colorful')
rgb(255,0,0)
rgb(0,255,255)
rgb(0,200,100)
rgb(150,150,150)
*/
此函数根据RGB值返回饱和度(从0.0到1.0):
function saturation(r,g,b) {
var minVal = Math.min(r, g, b);
var maxVal = Math.max(r, g, b);
var delta = maxVal - minVal;
if (maxVal === 0 ) {
return 0;
} else {
return (delta / maxVal);
}
}
我知道你要求色彩丰富,但这可能是一个不错的起点。 (实际上我不知道区别,感谢指出那个维基百科页面)
var max = ...; var min = ...; return (max - min) / max;
- Šime Vidas