Как изменить контрастность цвета на заданное число по шкале от 1 и до 21?

Удалось найти формулы, которые помогают вычислить контрастность в диапазоне от 1 и до 21 между двумя цветами, но появилась несколько иная задача. Есть ли формула, которая поможет изменить контрастность на заданное число? К примеру, имеется цвет текста, который в контрастности с цветом фона на 3 единицы из 21 и нужно изменить цвет таким образом, чтобы 3 стала, например, 4.5

// Вот так мы получаем яркость цвета
function getLuminance(rgb) {
    rgb = rgb.map((val) => {
        val /= 255;

        return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;
    });

    return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));
}

// А эта функция получает контрастность между двумя цветами
function getContrastRatio(foreground, background) {
    const lumA = getLuminance(foreground);
    const lumB = getLuminance(background);

    return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);
}

А теперь нужно каким-то образом научиться изменять контрастность у цветов и при этом сохраняя оттенок (то-есть, он может становиться или светлее, если цвет фона темный или темнее, если цвет фона светлый)


Ответы (0 шт):