Если вы ищете относительную яркость, вы можете воспользоваться быстрой формулой:
Y = 0.2126R + 0.7152G + 0.0722B
Источник: https://en.wikipedia.org/wiki/Relative_luminance
Чтобы иметь возможность напрямую использовать вышеуказанные коэффициенты,вам придется либо нормализовать ваши компоненты RGB до 1. Или сначала разделить на 255.Значение Y, которое вы получите, находится в диапазоне 0-1, поэтому вы, вероятно, можете затем сделать:
const color_is_light = y > 0.5;
Я бы сделал что-то вроде:
const getRandomRgb = () => [
Math.random(),
Math.random(),
Math.random()
];
const getRelativeLuminance = (rgb) =>
0.2126 * rgb[0]
+ 0.7152 * rgb[1]
+ 0.0722 * rgb[2];
const getCssColor = (rgb) => `rgb(${rgb.map((c) => c * 255)}`;
Хотя, там будетбуквально «серая область», где вы не получите достаточного контраста с белым или черным текстом на средне-сером фоне.
Возможно, вы захотите изменить функцию get_random_color
, чтобы она возвращала отдельные компоненты, сделайтевыше, а затем создайте CSS-значение цвета.