微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我已经为此工作了几天,但我很难在心理上想象我真正想做的事情,所以我会从头开始。

我基本上是在尝试创建一种算法,该算法将在悬停时调整按钮的背景颜色 - 如果背景颜色一开始很亮,我想让它变暗,如果按钮一开始很暗,我想要使其更轻。

我正在使用 Color NPM package,这会让事情变得更容易。

我的目标是只使用 lighten 方法,因为我可以向该方法传递一个负数以使颜色变暗。这也让我可以避免使用像这样的 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),我可以应用 lighten(-0.15) 来改变颜色一个很好的显着量.同样,在颜色“黑色”(亮度值为 0)上,我可以应用 lighten(2.5) 将颜色更改为一个很好的明显差异。

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

所以我需要想出一个算法来考虑颜色的两个维度(亮度和饱和度)并返回一个介于 -0.152.5(粗略估计)之间的数字,我然后可以应用到 lighten 方法来适当调整颜色(刻度应该是对数而不是线性 - 亮度为 0 的颜色可能需要增加 2.5 的亮度,但亮度为 0.2 的颜色似乎只需要将亮度增加 0.2 左右)。

我的数学和算法很差,希望有人能帮助我!使用 Color NPM 包,我有一些有用的测量:

      const saturation = Color(prev).hsl().color[1];
      const luminosity = Color(prev).luminosity();
      const contrast = Color(prev).contrast(Color('white'));

我认为饱和度和亮度结合起来就足够了,但 contrast 测量也可能有帮助。

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。