从十六进制值中检测类似的颜色

alf*_*sob 5 javascript colors

有没有人知道采用两个十六进制颜色值并返回某种索引来说明颜色有多相似的方法?例如,两种黄色可能会返回更高的指数,即它们比灰色和黄色更相似?

(我使用javascript,但猜这样的东西将是一个独立于语言的公式/算法)

sp0*_*00m 15

这可能是一个算法:

function hexColorDelta(hex1, hex2) {
    // get red/green/blue int values of hex1
    var r1 = parseInt(hex1.substring(0, 2), 16);
    var g1 = parseInt(hex1.substring(2, 4), 16);
    var b1 = parseInt(hex1.substring(4, 6), 16);
    // get red/green/blue int values of hex2
    var r2 = parseInt(hex2.substring(0, 2), 16);
    var g2 = parseInt(hex2.substring(2, 4), 16);
    var b2 = parseInt(hex2.substring(4, 6), 16);
    // calculate differences between reds, greens and blues
    var r = 255 - Math.abs(r1 - r2);
    var g = 255 - Math.abs(g1 - g2);
    var b = 255 - Math.abs(b1 - b2);
    // limit differences between 0 and 1
    r /= 255;
    g /= 255;
    b /= 255;
    // 0 means opposit colors, 1 means same colors
    return (r + g + b) / 3;
}
Run Code Online (Sandbox Code Playgroud)

> FIDDLE