十六进制代码差异

时间:2013-07-19 19:22:21

标签: javascript colors less

是否可以计算两个十六进制代码之间的差异?我一直在寻找几个小时,我开始认为这是不可能的。

实施例: 颜色#1:#c60f13 颜色#2:#970b0e 差异:25% Darker

哦,是的,我遇到了一个Javascript计算器,但它没有用。

谢谢你们!

4 个答案:

答案 0 :(得分:1)

将它们分成(3)个2字节组,分别对每个组进行数学运算并将其应用于组所代表的颜色(红色/绿色/蓝色)。

C6 - 97 = red diff
0F - 0B = green diff
13 - 03 = blue diff

答案 1 :(得分:1)

HEX数字和HEX RGB颜色不相等。 然而它们都是数字,RGB值的HEX表示包含3个独立的组件:红色,绿色和蓝色,打包为3x8bit组件,如#RRGGBB。这样我们就可以将它们存储为一个整数。

首先,您需要以这种方式解压各个组件:

r = (HEX >> 16) & 0xFF
g = (HEX >> 8)  & 0xFF
b =  HEX        & 0xFF

现在您可以执行计算

_r = abs(r1 - r2)
_g = abs(g1 - g2)
_b = abs(b1 - b2)

然后重新包装它们:

HEX = _r<<16 | _g<<8 | _b

答案 2 :(得分:1)

我假设您想要产生差异的颜色值。另外,因为您使用标记对其进行了标记,我将假设您正在使用less css preprocessor,如果是,则它已经具有此功能:difference()。所以就是这样:

difference(#c60f13, #970b0e);

产生这个:

#2f0405

答案 3 :(得分:0)

您可以直接将它们减去十六进制值。

  0xc60f13
- 0x970b0e
----------
= 0x2F0405

如果你先将它们分组,你会得到相同的结果:

  c6   0f   13
 -97  -0b  -0e
 -------------
 =2F  =04  =05

所以首先没有必要这样做。

在JavaScript中,您可以这样计算:

var val1 = 0xc60f13;
var val2 = 0x970b0e;
var diff = (val1 - val2) & 0xffffff;

console.log(diff.toString(16));

结果:

2f0405