【发布时间】:2011-01-21 20:37:33
【问题描述】:
我在http://www.mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript 找到了这个 RGB 到 HSL 的脚本。我找不到任何其他小的像样的。问题是这段代码甚至没有真正起作用。有人会知道为什么吗? (我不知道一点颜色数学,但也许它正在返回互补?)
function rgbToHsl(r, g, b){
r /= 255, g /= 255, b /= 255;
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if(max == min){
h = s = 0; // achromatic
}else{
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
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;
}
h /= 6;
}
return [h, s, l];
}
编辑:当我运行 rgbToHsl(126,210,22) 时,它给了我 [ .24, .81, .45 ],这是橙色的 HSL。
【问题讨论】:
-
问题标题和函数名不匹配,您到底在寻找什么 rgb to hsl 或 hsl to rgb?另请显示您使用该功能的代码。
-
什么问题,什么值错了?
-
它看起来对我有用,当我尝试它时,它肯定会返回一个好的 HSL 数组。是什么让你认为它不起作用?如果不清楚,您必须使用表示为 0 到 255 之间的十进制整数的 RGB 值来调用它。
-
你的意思是说.24需要乘以360?我并没有完全意识到这一点 - 我希望它会像那样出现。
-
.24 是比率 24/100。自然地,如果您希望它脱离 360 度,您需要自己进行转换。
标签: javascript colors rgb hsl