我得到了一些有背景的文字,並且背景顏色可以更改爲任何顏色。因此,如果對比度不夠好,我需要找到一種方法來判斷我的文本是否可讀,如果對比度不夠好,文本應該變爲黑色(例如黃色背景)或白色(深藍色背景) 。比較顏色對比以選擇最終顏色
那麼,有沒有一種方法來做到這一點?,你會用什麼來做到這一點?
謝謝!
我得到了一些有背景的文字,並且背景顏色可以更改爲任何顏色。因此,如果對比度不夠好,我需要找到一種方法來判斷我的文本是否可讀,如果對比度不夠好,文本應該變爲黑色(例如黃色背景)或白色(深藍色背景) 。比較顏色對比以選擇最終顏色
那麼,有沒有一種方法來做到這一點?,你會用什麼來做到這一點?
謝謝!
嘗試將您的顏色轉換爲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;
我不明白,什麼亮度財產那個對象? – Artemix
添加了hex2hsb的應用程序。 –
退房這種顏色對比工具:http://accessible-colors.com –