如何解决如何根据亮度和对比度调整给定颜色,并相应地使颜色变暗/变亮?
我已经为此工作了几天,但我很难在心理上想象我真正想做的事情,所以我会从头开始。
我基本上是在尝试创建一种算法,该算法将在悬停时调整按钮的背景颜色 - 如果背景颜色一开始很亮,我想让它变暗,如果按钮一开始很暗,我想要使其更轻。
我正在使用 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.15
和 2.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 举报,一经查实,本站将立刻删除。