Javascript 如何根据亮度和对比度调整给定颜色,并相应地使其变暗/变亮?

Javascript 如何根据亮度和对比度调整给定颜色,并相应地使其变暗/变亮?,javascript,colors,logarithm,color-theory,Javascript,Colors,Logarithm,Color Theory,我已经在这方面工作了几天,但我很难想象自己到底在做什么,所以我将从头开始 我基本上是在尝试创建一个算法,当鼠标悬停时,该算法将调整按钮的背景色-如果背景色开始时是浅的,我想使其更暗,如果按钮开始时是暗的,我想使其更亮 我正在使用,这会让事情变得更简单 我的目标是只使用lightize方法,因为我可以将负数传递给该方法以使颜色更暗。这也允许我避免使用这样的if条件: if (Color(prev).isLight()) { const value = Math.pow(

我已经在这方面工作了几天,但我很难想象自己到底在做什么,所以我将从头开始

我基本上是在尝试创建一个算法,当鼠标悬停时,该算法将调整按钮的背景色-如果背景色开始时是浅的,我想使其更暗,如果按钮开始时是暗的,我想使其更亮

我正在使用,这会让事情变得更简单

我的目标是只使用
lightize
方法,因为我可以将负数传递给该方法以使颜色更暗。这也允许我避免使用这样的if条件:

      if (Color(prev).isLight()) {
        const value = Math.pow(0.03, Color(prev).luminosity() - 0.1);
        const scale = Math.min(0.15, value);

        return Color(prev).darken(scale).hex();

      } else {
        const value = Math.pow(20000, 0.02 - Color(prev).luminosity());
        const scale = Math.min(2.5, value);

        return Color(prev).lighten(scale).hex();
      }
通过反复试验和一个
if
条件,我能够得到一些“有效”的东西,如上图所示,但它并不优雅,也不清楚到底发生了什么,它只是一堆随机的废话,碰巧达到了我想要的东西

从一些基本样本开始作为控制测量,我可以看到,为了调整颜色“白色”(亮度值为1),我可以应用
变亮(-0.15)
来改变颜色一个很明显的量。同样,在颜色“黑色”(亮度值为0)上,我可以应用
light(2.5)
将颜色更改为一个明显的差异

因此,如果我只使用输入颜色的亮度值,我可以找到一些方法根据这个比例来修改它,但是为了得到最好的结果,我还需要考虑颜色的饱和度。两种颜色可以具有相同的亮度值,但如果对它们应用相同数量的
亮度
,其中一种颜色在视觉上会比另一种颜色更亮,如果其饱和度不同

因此,我需要提出一种算法,将颜色的两个维度(亮度和饱和度)考虑在内,并返回一个介于
-0.15
2.5
(粗略估计)之间的数字,然后我可以将其应用于
变亮
方法以适当调整颜色(比例应为对数而不是线性-光度为0的颜色可能需要增加2.5的亮度,但光度为0.2的颜色似乎只需要增加约0.2的亮度)

我对数学和算法很糟糕,希望有人能帮助我!使用彩色NPM软件包,我有一些有用的测量:

      const saturation = Color(prev).hsl().color[1];
      const luminosity = Color(prev).luminosity();
      const contrast = Color(prev).contrast(Color('white'));
我认为饱和度加上亮度就足够了,但是对比度测量也可能有用

提前谢谢