2014-03-27 31 views
5

有谁知道采用两个十六进制颜色值并返回某种索引来表示颜色相似程度的方法吗?例如两个黄色的阴影可能会返回一个更高的索引,即他们比说灰色和黄色更类似?从十六进制值中检测相似的颜色

(即时通讯使用JavaScript,但想这样的事情会是一个独立于语言的公式/算法)

+0

可能重复[基于RGB值(或可能是HSV)检查颜色相似度的算法](http://stackoverflow.com/questions/5392061/algorithm-to-check-similarity-of-colors-based-on-rgb-values-or -maybe-hsv) – Chris

+0

看起来很有前途,谢谢chris – alfonsob

回答

12

这里可能是一个算法入手:的

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; 
} 

> FIDDLE

+0

对我有用@spOOm,谢谢 – alfonsob

+0

完美,正是我需要的!谢谢 :) – Kehza