javascript - 获取 HSL 值,给定 x、y 和色调

标签 javascript colors

给定一个看起来像这样的颜色选择器:

enter image description here

我正在尝试根据光标的 x 和 y 位置加上右侧 slider 的色调来计算 HSL 值。我的数学能力很弱,虽然我有很接近,但试图捕获一个非常浅的全强度颜色很麻烦,(它最终变得太灰)。这是我正在使用的当前功能:

getHSL = function(h, x, y) {
  var hsl, hue, lightness, saturation;
  hue = parseInt(h, 10);
  if (hue === 360) {
    hue = 0;
  }
  saturation = x;
  lightness = (50 * (1 - (x / 100)) + 50) * (1 - (y / 100));
  hue = Math.round(clamp(hue, 0, 360));
  saturation = Math.round(clamp(saturation, 0, 100));
  lightness = Math.round(clamp(lightness, 0, 100));
  hsl = {
    hue: hue,
    saturation: saturation,
    lightness: lightness
  };
  return hsl;
};

这是错误的做法吗?结果实际上非常接近正确,但与非常浅的全强度颜色有点偏差。

最佳答案

看起来您的颜色选择器是用 HSV(色调/饱和度/值)坐标表示的。

维基百科对此有一篇不错的文章,您可以根据那里提供的信息计算出转换公式。

或者,在 Google 上快速搜索返回,例如,此页面包含可用于将 HSV 转换为 HSL 的公式:http://codeitdown.com/hsl-hsb-hsv-color/ .假设您的 xy 都在 0 到 100 之间运行,则计算应为:

hsv_value = 1 - (y / 100);
hsv_saturation = x / 100;
lightness = (hsv_value / 2) * (2 - hsv_saturation);
saturation = (hsv_value * hsv_saturation) / (1 - Math.abs(2 * lightness - 1));

这会返回 [0,1] 范围内的 saturationlightness。另外,为什么要clamp您的xy 坐标?

关于javascript - 获取 HSL 值,给定 x、y 和色调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520909/

相关文章:

javascript - 检测 facebook 用户是否在没有弹出窗口的情况下登录

javascript - JS - localeCompare 未按预期工作

c# - 一旦触发器被触发,如何改变整个对象的颜色?

objective-c - 在 Objective C 中将 HSB 颜色转换为 RGB

Eclipse 的颜色主题问题

javascript - 颜色 (h,s,b) 从 360 到 0、从 0 到 (-360) 以及从 (-360) 到 (-720) 等等

javascript - 在同一窗口和同一选项卡中打开 URL

javascript - AngularJS Angular.js :12520 SyntaxError: Unexpected token ILLEGAL affiliate window

javascript - 为什么当我删除搜索字段中的输入太快时,结果不会消失? (Javascript)

r - 将自定义颜色渐变映射到 POSIXct 值