我有一個不同的十六進制顏色(> 6500)的巨大列表,我想刪除非常暗的顏色和非常明亮的顏色。過濾器十六進制顏色
我該怎麼做? 在明亮和黑暗的十六進制顏色代碼中,我可以用它來過濾它們嗎?我是否需要將它們轉換爲整數..?
謝謝!
我有一個不同的十六進制顏色(> 6500)的巨大列表,我想刪除非常暗的顏色和非常明亮的顏色。過濾器十六進制顏色
我該怎麼做? 在明亮和黑暗的十六進制顏色代碼中,我可以用它來過濾它們嗎?我是否需要將它們轉換爲整數..?
謝謝!
這是可能做一個快速和骯髒方法:
獨立的十六進制顏色轉換爲R/G/B字節。
將十六進制字節轉換爲十進制數,將它們加在一起除以3得到平均「亮度」的粗略想法。
選擇您希望顏色在0到255的最大可能範圍內的亮度的上限和下限,並排除任何超出這兩個限制的顏色。
E.G.
#FFBBAA => FF BB AA =>(255 + 187 + 170)/ 3 = 204
如果決定200的 「亮度」 的上限,這種顏色過於鮮豔。你設定的限制完全是主觀的,這取決於你。
如果您對以十六進制直接進行計算感到滿意,則可以將轉換完全跳過到十進制並將所有計算保留爲十六進制。
此函數使用正則表達式來解析字符串值並將亮度從0(黑色)返回到1(100%白色)。
function hexBrightness(hex) {
var regExp = hex.length < 6 ? /^#(([a-f\d]))(([a-f\d]))(([a-f\d]))$/i : /^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])([a-f\d])([a-f\d])$/i;
var result = regExp.exec(hex);
if (result) {
var r = parseInt("" + result[1] + result[2], 16),
g = parseInt("" + result[3] + result[4], 16),
b = parseInt("" + result[5] + result[6], 16),
max = Math.max(r, g, b),
min = Math.min(r, g, b),
l = (max + min)/2;
return l/255;
}
return null;
}
// Test
var assert = function (assertion, name) {
$("<p/>").appendTo(document.body).text(name + (assertion ? ' works' : ' fails'))
}
assert(hexBrightness('#FFFFFF') == 1, 'Uppercase');
assert(hexBrightness('#ffffff') == 1, 'Lowercase');
assert(hexBrightness('#fff') == 1, 'Short');
assert(hexBrightness('#000') == 0, 'Black');
assert(hexBrightness('invalid') == null, 'Invalid color');
見http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color – 2013-03-26 15:30:24
如果所有3組的2號低,顏色會變暗 – gaynorvader 2013-03-26 15:31:33
您可以[將RGB轉換爲HSL](http://stackoverflow.com/questions/2348597/why-doesnt-this-javascript-rgb-to-hsl-code-work) – jantimon 2013-03-26 15:31:46