寻找深色/浅色

时间:2015-02-24 03:08:13

标签: javascript jquery html css colors

我正在尝试找到正确的颜色。例如,如果我有深绿色,那么我需要浅绿色,或者如果我有浅绿色,那么我需要深绿色。我有一个代码告诉我颜色是暗还是亮。

function calcBrightness(red,green,blue) {
    return Math.sqrt(
        red * red * .299 +
        green * green * .587 +
        blue * blue * .114);          
}

var brightness = calcBrightness(red, green, blue);
var foreColor = (brightness < 130) ? "light" : "green";

我能够检测颜色是暗还是浅,但如果foreColor值为绿色,如果结果为浅色或浅色,我怎么能得到深色?

3 个答案:

答案 0 :(得分:3)

将RGB颜色转换为HSL(色调,饱和度,亮度)使问题变得更加容易。

您可以通过更改HSL中的L值轻松调整颜色的亮度。

该算法可用here

(来自问题Javascript convert HSB/HSV color to RGB accurately

答案 1 :(得分:3)

从技术上讲,在HSL色彩空间中做亮/暗实际上更好。

为了省去一些麻烦,那里有一些很棒的javascript库,有各种颜色操作,比如TinyColor

你没有真正定义颜色的“浅色”和“暗色”,但这是一个使用TinyColor汇总的快速示例:http://jsfiddle.net/cm00kb04/1/

实际上这是在做:

function findTextColor(backgroundColor) {
    var c = tinycolor(backgroundColor);
    return c.isDark() ? c.lighten(50) : c.darken(50);
}

你可以做各种程度的闪电/变暗,以及在其他操作中找到mostReadable()颜色。

导致最佳结果的将取决于上下文:例如,如果这是处理任何可能的颜色,如果有必须使用的主题,等等。

答案 2 :(得分:1)

根据您的描述,我认为需要从RGB到HSL(色调,饱和度,亮度)的色彩空间转换,更改亮度值以满足您的需要,然后将新颜色转换回RGB。你可以找到代码here 维基百科对HSL and HSV/HSB color spaces及其与RGB色彩空间的关系提供了很好的解释