1

有没有办法,给定两种颜色(我们称它们为第一种颜色和第二种颜色)来确定第二种颜色必须更改为什么颜色才能获得 4.5 的对比度?换句话说,为了获得 4.5 的对比度,我们需要将第二种颜色移动多少?亮度和比例代码如下:

亮度代码:

function getLuminance (rgb){

    for (var i =0; i<rgb.length; i++) {
        if (rgb[i] <= 0.03928) {
            rgb[i] = rgb[i] / 12.92;    
        } else {
            rgb[i] = Math.pow( ((rgb[i]+0.055)/1.055), 2.4 );
        }
    }
    var l = (0.2126 * rgb[0]) + (0.7152 * rgb[1]) + (0.0722 * rgb[2]);
    return l;
};

比率代码:

var ratio = 1;
var l1 = getLuminance([first_color_red.value/255, first_color_green.value/255, first_color_blue.value/255]);
var l2 = getLuminance([second_color_red.value/255, second_color_green.value/255, second_color_blue.value/255]);

if (l1 >= l2) {
    ratio = (l1 + .05) / (l2 + .05);
} else {
    ratio = (l2 + .05) / (l1 + .05);
}

我面临的问题是亮度计算 - 仅基于一个比率,似乎无法计算出 R、G 和 B 值,因为它们将是三个未知数(取决于每种颜色的路径需要 - 它是否大于 0.03928...)。

我们可以通过考虑颜色亮度和色差计算来添加更多约束,如下所示:

颜色亮度代码: brightnessDifference的阈值是大于等于125。

fY=((first_color_r.value * 299) + (first_color_g.value * 587) + (first_color_b.value * 114)) / 1000;
sY=((second_color_r.value * 299) + (second_color_g.value * 587) + (second_color_b.value * 114)) / 1000;
brightnessDifference = Math.abs(fY-sY);

色差码: colorDifference的阈值是大于等于500。

colorDifference = (Math.max (second_color_r.value, first_color_r.value) - Math.min (second_color_r.value, first_color_r.value)) +
                        (Math.max (second_color_g.value, first_color_g.value) - Math.min (second_color_g.value, first_color_g.value)) +
                        (Math.max (second_color_b.value, first_color_b.value) - Math.min (second_color_b.value, first_color_b.value));

我已阅读以下帖子:如何以编程方式选择良好的对比度 RGB 颜色?

然而,计算补色可能并不总能解决问题!它甚至可能不会导致 4.5 的对比度......关于如何实现这一点的任何想法?

4

0 回答 0