0

最近我开始探索fabric.js。我想通过从颜色选择器中选择颜色来更改图像的颜色。

我从这个例子开始。探索 fabric.js 的文档,我推断(我可能错了)fabric 使用 HSL 颜色模型。问题在我搜索的任何地方,色调范围在 0 到 360 度之间,但织物中的HueRotation 过滤器期望值在 -1 到 1 之间。为了解决这个问题,我计算sin了色调以使其介于 -1 和1 但这会一起改变颜色。

如果有人指出我所缺少的,那就太好了。我正在使用此代码将 HEX 转换为 HSL。唯一的区别是我计算色调的罪孽,Math.sin(h * Math.PI/180)使其进入 -1 到 1 的范围。

4

1 回答 1

0

如果这个库需要一个等价于 [-180º, 180º] 或 [-π, π] 的归一化范围,你不能用正弦或余弦来解决它。对于不同的角度(sin(45) == sin(135)),这两个函数可以给出相同的结果,而这些角度代表不同的色调(黄色和柠檬绿)。

您可以先将输入转换为 [-180º, 180º] 范围:

hue = hue % 360; //handle inputs greater than 360 degrees
let displacedHue = (hue > 180) ? hue - 360 : hue

然后将其标准化为 [-1, 1]:

let normalizedHue = displacedHue/180
于 2020-02-17T12:52:08.520 回答