每个颜色表示为十六进制代码中的元组.要确定近距离匹配,您需要分别减去每个RGB组件.
例:
Color 1: #112233 Color 2: #122334 Color 3: #000000 Difference between color1 and color2: R=1,G=1 B=1 = 0x3 Difference between color3 and color1: R=11,G=22,B=33 = 0x66 So color 1 and color 2 are closer than 1 and 3.
编辑
那么你想要最接近的命名颜色?使用每种颜色的十六进制值创建一个数组,然后循环并返回名称.这样的东西
function getColor($rgb) { // these are not the actual rgb values $colors = array(BLUE =>0xFFEEBB,RED => 0x103ABD,GREEN => 0x123456); $largestDiff = 0; $closestColor = ""; foreach ($colors as $name => $rgbColor) { if (colorDiff($rgbColor,$rgb) > $largestDiff) { $largestDiff = colorDiff($rgbColor,$rgb); $closestColor = $name; } } return $closestColor; } function colorDiff($rgb1,$rgb2) { // do the math on each tuple // Could use bitwise operates more efficiently but just do strings for Now. $red1 = hexdec(substr($rgb1,2)); $green1 = hexdec(substr($rgb1,2,2)); $blue1 = hexdec(substr($rgb1,4,2)); $red2 = hexdec(substr($rgb2,2)); $green2 = hexdec(substr($rgb2,2)); $blue2 = hexdec(substr($rgb2,2)); return abs($red1 - $red2) + abs($green1 - $green2) + abs($blue1 - $blue2) ; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。