我有一个json响应,返回一个具有不同车辆的对象。每个产品都有一个十六进制值作为与车辆颜色相关的属性:
[ { "name":"Ford", "hexCode": "4B1A1F"},
{ "name":"BMW", "hexCode": "FFFFFF"},
{ "name":"Fiat", "hexCode":"000000"}
]
我想要做的是能够从十六进制代码中确定哪一种颜色最黑,因为并非所有制造商都会使用#000000作为黑色。
这可以通过某种方式或正则表达式或JS吗?
答案 0 :(得分:2)
因为并非所有制造商都会将#000000用于黑色。
一旦你定义了darkest
对你真正意味着什么,事情会变得更容易。您的源数据不准确这一事实乍一看没有任何帮助,但仍然可以根据您的需要使用它。因为你真正关心的是亮度,而不是颜色本身,它应该值得convert the value of provided color to gray-scale拍摄,然后选择最接近0x00
的那个作为最暗的一个。
答案 1 :(得分:0)
data.reindex( pd.MultiIndex.from_product( data.index.levels ) )
Data
A 6 eggs NaN
spam NaN
7 eggs NaN
spam NaN
8 eggs 0.938516
spam 0.487062
9 eggs 0.958066
spam 0.786476
B 6 eggs NaN
spam NaN
7 eggs NaN
spam NaN
8 eggs NaN
spam 0.674202
9 eggs NaN
spam 0.576285
并找到L值的最小值。
HSL是一种颜色方案,可以通过色调,饱和度和亮度来定义颜色,因此您可以客观地衡量“黑暗”和“黑暗”的颜色。你的颜色是。
答案 2 :(得分:0)
您需要比较以十六进制给出的RGB颜色的亮度(Y)值以找到最低值。公式是;
Y = 0.299R + 0.587G + 0.114B
所以你可以这样做;
function getY(hexValue){
return hexValue.match(/[0-9a-fA-F]{2}/g)
.map(h => parseInt("0x"+h))
.reduce((r,c,i) => (r[3] += r[i]*c, r),[0.299,0.587,0.114,0])[3];
}
var data = [ { "name":"Ford", "hexCode": "4B1A1F"},
{ "name":"BMW", "hexCode": "FFFFFF"},
{ "name":"Fiat", "hexCode":"000000"}
],
result = data.map(d => Object.assign({},d, {Y: getY(d.hexCode)}))
.reduce((p,c) => p.Y <= c.Y ? p : c);
console.log(result);