【发布时间】:2010-11-21 23:50:13
【问题描述】:
有什么公式可以让十六进制颜色值更亮吗?
【问题讨论】:
标签: javascript css colors hex
有什么公式可以让十六进制颜色值更亮吗?
【问题讨论】:
标签: javascript css colors hex
您可以转换为 HSV(使用来自维基百科 here 的公式)然后增加 V值,然后再转换回来,使用同一页面下方的公式。
【讨论】:
http://www.rapidtables.com/convert/color/rgb-to-hsv.htm。逆变器也在那里。请记住 - 这是Value,HSV 增加的第三部分。对我来说,第一个似乎很自然。
标准答案是转换为以亮度为轴的不同颜色空间,然后直接操纵该值。我不喜欢这个答案,因为它没有告诉你当你超过色彩空间域时你会得到什么。
如果更亮意味着更强烈,您可以将每个 R、G、B 值乘以相同的值,其中该值 > 1。例如,要使其更亮 20%,请将每个值乘以 1.2。
如果任何结果值大于 255,则您已超出 RGB 色域的限制。在这种情况下,最好的办法可能是使颜色更接近白色,因此它更轻但不那么饱和或强烈。让我们以 (50,192,240) 的起始 RGB 为例,您想让它变亮 20%。结果是 (60,230,288) - 红色和绿色在范围内,但是蓝色太亮并且溢出了。取多余的,平均分配给其他颜色——288-255是33,所以红色和绿色加16.5;四舍五入的结果为 (77,247,255)。
【讨论】:
好吧,因为颜色只是 r/g/b 的 3 个字节,您可以做的是将每个字节转换为 int (0-255) 并将每个字节增加相同的任意数字。最后将每个字节转换回十六进制。示例:
从颜色开始:#224466
转换为整数,即 r = 34、g = 68 和 b = 102
增加任意数字(比如 60),您会得到 r = 94、g = 128 和 b = 162
转换回十六进制给你:#5E80A2
请注意,上限为 255(白色),下限为 0(黑色)
编辑: 正如 Mark 指出的那样,这有一个缺陷。它可以通过附加规则来修复:如果初始值为 0,则不要更改它;)
【讨论】: