是否可以计算两个十六进制代码之间的差异?我一直在寻找几个小时,我开始认为这是不可能的。
实施例:
颜色#1:#c60f13
颜色#2:#970b0e
差异:25% Darker
哦,是的,我遇到了一个Javascript计算器,但它没有用。
谢谢你们!
答案 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标记对其进行了标记,我将假设您正在使用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