(1 << 24) + red * (1 << 16) + green * (1 << 8) + blue;
let testColor = "rgb(20, 20, 20)";
const rgbToHex = (color) => {
let arr = color.split(',');
let r = +arr[0].split('(')[1];
let g = +arr[1];
let b = +arr[2].split(')')[0];
let value = (1 << 24) + r * (1 << 16) + g * (1 << 8) + b;
value = value.toString(16);
return '#' + value.slice(1);
};
console.log(rgbToHex(testColor)); // #141414
console.log(rgbToHex('rgb(255, 255, 255)')) // #fffff
function RGB2Hex(rgb){
var re = rgb.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",");//利用正则表达式去掉多余的部分
var hexColor = "#";
var hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
for (var i = 0; i < 3; i++) {
var r = null;
var c = re[i];
var hexAr = [];
while (c > 16) {
r = c % 16;
c = (c / 16) >> 0;
hexAr.push(hex[r]);
}
hexAr.push(hex[c]);
hexColor += hexAr.reverse().join('');
}
return hexColor;
}
var co = "rgb(208, 204, 255)";
console.log(RGB2Hex(co));
js进制转换
Number.parseInt(string , radix)
这个是把字符串(只能由字母和数字组成),这个只能是由低进制转高进制,如二进制转八进制,但是八进制不能转二进制,radix表示进制,取值2~36。
Number.parseInt('010',8); //8
Number.parseInt('20',2); //NaN
Number.parseInt('0x16',16); // 22
Number.toString(radix)
这个函数只能将十进制数字转换为任意进制的字符串形式,同样,radix表示进制,取值2~36。
(10).toString(2); //"1010"转2进制
(10).toString(16); //"a" 转16进制
(1000).toString(36); //"rs" 转36进制
//10进制转为16进制
(10).toString(16) // =>"a"
//8进制转为16进制
(012).toString(16) // =>"a"
//16进制转为10进制
(0x16).toString(10) // =>"22"
//16进制转为8进制
(0x16).toString(8) // =>"26"
//10进制转为2进制 //=>
(1111).toString(2) // => "10001010111"
//8进制转为2进制 //=>
(01111).toString(2) //=>"1001001001"
//16进制转为2进制 //=>
(0x16).toString(2) // => "10110"
"#e6f7ff",
"#bae7ff",
"#91d5ff",
"#69c0ff",
"#40a9ff",
"#1890ff",
"#096dd9",
"#0050b3",
"#003a8c",
"#002766",
Ant Design 色板生成算法演进之路
https://zhuanlan.zhihu.com/p/32422584
antd 色彩
https://ant.design/docs/spec/colors-cn
Ant Design Colors
https://www.npmjs.com/package/@ant-design/colors