对于指定的颜色,获得对比度最高的颜色的公式是什么



我编写了一个应用程序,其中需要获得与输入颜色具有大对比度的第二种颜色。因此,两种颜色之间的对比度必须大于或等于7。有人知道一个有效的公式吗?我发现了一些关于这个话题的问题,但没有一个答案对我有效

我问了Bard AI,因为它的anwser不适用于像rgb(127,127,127)这样的灰色,所以我修改了其中一个anwser,它是:

/**
* get contrast color in monochrome
* @param {Array<number>} rgb - rgb channels, 0~255
* @param {number} maxContrast 128~255
* @returns {Array<number>}
*/
function getContrastColor([r, g, b], maxContrast = 192) {
const minContrast = 128;
let y = Math.round(0.299 * r + 0.587 * g + 0.114 * b); // luma
let oy = 255 - y; // opposite
let dy = oy - y; // delta
if (Math.abs(dy) > maxContrast) {
dy = Math.sign(dy) * maxContrast;
oy = y + dy;
} else if (Math.abs(dy) < minContrast) {
dy = Math.sign(dy) * minContrast;
oy = y + dy;
}
return [oy, oy, oy];
}

以及一些测试结果:

getContrastColor([0,0,0]) // [192, 192, 192]
getContrastColor([255,0,0]) // [204, 204, 204]
getContrastColor([127,127,127]) // [255, 255, 255]
getContrastColor([128,128,128]) // [0, 0, 0]
getContrastColor([255,255,0]) // [34, 34, 34]
getContrastColor([255,255,255]) // [63, 63, 63]

您可以根据需要将maxContrast设置为255。

最新更新