Сравнение цветового контраста для выбора окончательных цветов

У меня есть текст с фоном, и цвет фона может измениться на любой.

Итак, мне нужно найти способ понять, будет ли мой текст читаемым или нет, текст должен измениться на черный (например, желтый фон) или белый (темно-синий фон), если контраст недостаточно хорош.

Итак, есть ли способ сделать это? Что бы вы использовали, чтобы это работало?

Спасибо!


person Artemix    schedule 03.08.2011    source источник
comment
Попробуйте этот инструмент цветового контраста: available-colors.com   -  person Misha Moroshko    schedule 14.09.2015


Ответы (1)


Попробуйте преобразовать свой цвет в пространство HSB и проверьте свойство яркости (от 0 до 100, 0 - темный).

Изменить: версия AS3 hex2Hsb

public static function hex2Hsb(hex : Number) : Object {
    var rgb : Object = {r:(hex >> 16) & 0xFF, g:(hex >> 8) & 0xFF, b:hex & 0xFF};

    var hsb : Object = new Object();
    hsb["b"] = Math.max(rgb["r"], rgb["g"], rgb["b"]);
    var min : Number = Math.min(rgb["r"], rgb["g"], rgb["b"]);
    hsb["s"] = (hsb["b"] <= 0) ? 0 : Math.round(100 * (hsb["b"] - min) / hsb["b"]);
    hsb["b"] = Math.round((hsb["b"] / 255) * 100);

    hsb["h"] = 0;
    if ((rgb["r"] == rgb["g"]) && (rgb["g"] == rgb["b"])) {
    hsb["h"] = 0;
    } else if (rgb["r"] >= rgb["g"] && rgb["g"] >= rgb["b"]) {
    hsb["h"] = 60 * (rgb["g"] - rgb["b"]) / (rgb["r"] - rgb["b"]);
    } else if (rgb["g"] >= rgb["r"] && rgb["r"] >= rgb["b"]) {
    hsb["h"] = 60 + 60 * (rgb["g"] - rgb["r"]) / (rgb["g"] - rgb["b"]);
    } else if (rgb["g"] >= rgb["b"] && rgb["b"] >= rgb["r"]) {
    hsb["h"] = 120 + 60 * (rgb["b"] - rgb["r"]) / (rgb["g"] - rgb["r"]);
    } else if (rgb["b"] >= rgb["g"] && rgb["g"] >= rgb["r"]) {
    hsb["h"] = 180 + 60 * (rgb["b"] - rgb["g"]) / (rgb["b"] - rgb["r"]);
    } else if (rgb["b"] >= rgb["r"] && rgb["r"] >= rgb["g"]) {
    hsb["h"] = 240 + 60 * (rgb["r"] - rgb["g"]) / (rgb["b"] - rgb["g"]);
    } else if (rgb["r"] >= rgb["b"] && rgb["b"] >= rgb["g"]) {
    hsb["h"] = 300 + 60 * (rgb["r"] - rgb["b"]) / (rgb["r"] - rgb["g"]);
    } else {
    hsb["h"] = 0;
    }
    hsb["h"] = Math.round(hsb["h"]);

    return hsb;
}

Применение:

var hsb : Number = ColorUtils.hex2Hsb(_textField.textColor);
_textField.backgroundColor = hsb["b"] > 50 ? 0 : 0xFFFFFF;
person Kaken Bok    schedule 03.08.2011
comment
Я не понимаю, что за свойство яркости у этого объекта? - person Artemix; 03.08.2011
comment
добавлено приложение hex2hsb. - person Kaken Bok; 03.08.2011