RGB(A)与Hex互相转换的方法学习。
RGB 转 Hex
从RGB转换到Hex,只需要改变对数据的进行进制转换就行。我们通过toString(16)
对红绿蓝三个通道的值进行转换,然后对转换后位数小于等于1的在前面添加一个0
,最后前面加一个#
将字符串加起来就行了。
1 | function RGBToHEX(r,g,b){ |
rgb字符串转Hex
除了将每个通道的值单独传入外,我们也可以将所有色值当作一个参数传入进行转换。只需要对前面的代码进行一点小小的改动就行。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17function RGBToHEX(rgb) {
let sep = rgb.indexOf(',') > -1 ? "," : ' '
rgb = rgb.substring(4).split(')')[0].split(sep)
let r = (+rgb[0]).toString(16)
let g = (+rgb[1]).toString(16)
let b = (+rgb[2]).toString(16)
if (r.length === 1) {
r = '0' + r;
}
if (g.length === 1) {
g = '0' + g
}
if (b.length === 1) {
b = '0' + b
}
return '#' + r + g + b
}
RGBA转Hex
将RGBA转换成Hex和rgb的转法基本相同。对于透明度a,因为它的范围是从0到1,因此我们可以通过这个参数乘以255得到想要的值,然后转换成Hex。
1 | function RGBAToHexA(r,g,b,a) { |
同前面将rgb参数一次性传入进行转换一样,我们也可以将rgba参数一次性传入,然后进行转换。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21function RGBAToHexA(rgba) {
let sep = rgba.indexOf(",") > -1 ? "," : " ";
rgba = rgba.substr(5).split(")")[0].split(sep);
let r = (+rgba[0]).toString(16)
let g = (+rgba[1]).toString(16)
let b = (+rgba[2]).toString(16)
let a = Math.round(+rgba[3] * 255).toString(16);
if (r.length == 1){
r = "0" + r;
}
if (g.length == 1) {
g = "0" + g;
}
if (b.length == 1) {
b = "0" + b;
}
if (a.length == 1) {
a = "0" + a;
}
return "#" + r + g + b + a;
}
Hex转rgb
我们知道rgb的色值除了#
号外,通常长度是3位或者6位,在任何情况下,我们都可以通过在数据前加“0x”的形式来转换成Hex。如果长度是3位的,我们可以通过对每个通道连续转换两次的形式来实现转换。如果长度是6位的,那我们将前两位转换为r,中间两位转换为g,最后两位转换为b。获取到rgb转换的最终数据后,我们通过在前面增加一个+
的形式,强制将他们转换成数字,这将产生我们需要的转换数据。
1 | function hexToRGB (h) { |
Hex 转换为rgba
Hex转rgba和转rgb有点类似,我们只需要检测出出了#
外的第四位或者第七八位位alpha
值,然后处以255就可以了。为了获取精确度比较高但又不是很长的小数,我们使用toFixed(3)
。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19function hexAToRGBA(h) {
let r = 0, g = 0, b = 0, a = 1;
if (h.length == 5) {
r = "0x" + h[1] + h[1];
g = "0x" + h[2] + h[2];
b = "0x" + h[3] + h[3];
a = "0x" + h[4] + h[4];
} else if (h.length == 9) {
r = "0x" + h[1] + h[2];
g = "0x" + h[3] + h[4];
b = "0x" + h[5] + h[6];
a = "0x" + h[7] + h[8];
}
a = +(a / 255).toFixed(3);
return "rgba(" + +r + "," + +g + "," + +b + "," + a + ")";
}
基于上面的方法,我做了一个在线转换工具,有兴趣的可以点击啊Hex(16进制颜色)与rgb(a)相互转换工具这里看一下。也可以复制这个链接查看https://www.91yqz.com/hex2rgb