Javascript 过滤十六进制颜色
我有一个不同的十六进制颜色(>6500)的巨大列表,我想删除非常暗的颜色和非常亮的颜色 我该怎么做? 在明亮和黑暗的十六进制颜色代码中是否有我可以用来过滤掉它们的特定特征?我需要把它们转换成整数吗Javascript 过滤十六进制颜色,javascript,html,css,hex,Javascript,Html,Css,Hex,我有一个不同的十六进制颜色(>6500)的巨大列表,我想删除非常暗的颜色和非常亮的颜色 我该怎么做? 在明亮和黑暗的十六进制颜色代码中是否有我可以用来过滤掉它们的特定特征?我需要把它们转换成整数吗 谢谢大家! 这是一种快速而肮脏的方法,可能会: 将十六进制颜色分隔为R/G/B字节 将十六进制字节转换为十进制,将它们相加并除以3,得到平均“亮度”的大致概念 选择一个上限和一个下限,即您希望颜色的亮度在0到255的最大可能范围内,并排除超出这两个限制的任何颜色 例如 #FFBBAA=>FFBBAA=
谢谢大家! 这是一种快速而肮脏的方法,可能会: 将十六进制颜色分隔为R/G/B字节 将十六进制字节转换为十进制,将它们相加并除以3,得到平均“亮度”的大致概念 选择一个上限和一个下限,即您希望颜色的亮度在0到255的最大可能范围内,并排除超出这两个限制的任何颜色 例如 #FFBBAA=>FFBBAA=>(255+187+170)/3=204 如果你决定200是你的“亮度”上限,这个颜色太亮了。你设定的限制完全是主观的,所以由你决定
如果您对直接使用十六进制进行计算感到满意,则可以完全跳过到十进制的转换,并将所有计算保留为十六进制。此函数使用regexp解析字符串值,并将亮度从0(黑色)返回到1(100%白色)
功能十六进制亮度(十六进制){
var regExp=hex.length<6?/^([a-f\d])([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])([a-f\d])$/i;
var result=regExp.exec(十六进制);
如果(结果){
var r=parseInt(“+result[1]+result[2],16),
g=parseInt(“+result[3]+result[4],16),
b=parseInt(“+result[5]+result[6],16),
最大值=数学最大值(r,g,b),
最小值=数学最小值(r,g,b),
l=(最大+最小)/2;
返回l/255;
}
返回null;
}
//试验
var assert=函数(断言,名称){
$(“”).appendTo(document.body).text(名称+(断言?'works':'fails'))
}
断言(hexBrightness('#FFFFFF')==1,“大写”);
assert(hexBrightness('#ffffff')==1,“小写”);
断言(hexBrightness('#fff')==1,'Short');
断言(hexBrightness('#000')==0,'Black');
断言(hexBrightness('invalid')==null,'invalid color');
工作提琴:看看是否所有3组2都是低数字,颜色将是黑色的。如果十六进制颜色代码已经是整数了……我想你要么想过滤颜色,要么想向希特勒(不管是什么意思)报告颜色……所以请更正标题;-)
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');