我需要计算两个十六进制颜色值之间的差异,因此输出是一个百分比值.我放弃的第一件事是将十六进制值转换为十进制值,因为第一个的权重会比最后一个高得多.
I need to compute the difference between two hex color values so the output is a percentage value. The first thing I discarted was converting the hex value into decimal, as the first one will have much higher weight than the last.
第二个选项是计算每个 RGB 值之间的差异,然后将它们全部相加.但是,0, 0, 0 和 30, 30, 30 之间的差异远小于 0, 0, 0 和90, 0, 0.
The second option is to compute the difference between each of the RGB values and then add them all. However, the difference between 0, 0, 0 and 30, 30, 30 is much lower than the one between 0, 0, 0 and 90, 0, 0.
这个问题 建议使用 YUV,但我不知道如何使用它来建立区别.
This question recommends using YUV, but I can't figure out how to use it to establish the difference.
另外,另一个问题有一个很好的公式来计算差异并输出一个 RGB 值,但它并不完全存在.
Also, this other question has a nice formula to compute the difference and output a RGB value, but it's not quite there.
推荐答案只需计算一个 欧几里得距离:
var c1 = [0, 0, 0], c2 = [30, 30, 30], c3 = [90, 0, 0], distance = function(v1, v2){ var i, d = 0; for (i = 0; i < v1.length; i++) { d += (v1[i] - v2[i])*(v1[i] - v2[i]); } return Math.sqrt(d); }; console.log( distance(c1, c2), distance(c1, c3), distance(c2, c3) ); //will give you 51.96152422706632 90 73.48469228349535