JS HEX十六进制与RGB颜色转换实现代码
核心思路
JavaScript颜色转换的核心就是进制间的转换。RGB格式其实就是十进制表示法,所以,十六进制颜色与RGB颜色的转换就是十六进制与十进制之间的转换。
数学计算方法
通常在数学上进行转换时,10进制转化为16进制时,只需要将的三原色数值除以16,第一位是商,第二位是余数。超过9的用字母表示,10对应A,11对应B,12对应C,13对应D,14对应E,15对应F。
例如:
RGB(169,245,8)R:169/16=10余9,而10对应A,即 A9G:245/16=15余5, 而15对应F,即 F5B:8/16=0余8,即08所以RGB(169,245,8)=#A9F508
16进制转10进制则做乘法,RGB的数值是16乘以HEX的第一位加上HEX的第二位,数字10以下的RGB和HEX都是相同的,但需要在前面补0成两位数,10对应A,11对应B,12对应C,13对应D,14对应E,15对应F。
例如:
#A9F508=RGB(16*10+9,16*15+5,16*0+8)=RGB(169,245,8)
javascript自带转换方法
十六进制转换为十进制相对容易些,核心代码如下示例:
parseInt("0xFF")
其结果就是255,”0x”就表明当前是16进制,由于parseInt
后面无参数,默认就是转换为10进制了。
十进制转换为16进制,核心代码如下:
var num=255; num.toString(16);
其结果是FF
。”16″表示数值转换为16进制字符串。
RGB转换为Hex实现代码
String.prototype.RGB2Hex = function(){
var _this = this;
// 如果是rgb颜色表示
if (/^(rgb|RGB)/.test(_this)) {
var rgb = _this.split(',');
var r = parseInt(rgb[0].split('(')[1]);
var g = parseInt(rgb[1]);
var b = parseInt(rgb[2].split(')')[0]);
return "#" + r.toString(16) + g.toString(16) + b.toString(16);
}else{
throw new Error("不是RGB颜色")
}
}
Hex转换为RGB实现代码
String.prototype.colorRgb = function(){
var sColor = this.toLowerCase();
//十六进制颜色值的正则表达式
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 如果是16进制颜色
if (sColor && reg.test(sColor)) {
//如果为#333这样的形式
if (sColor.length === 4) {
var sColorNew = "#";
for (var i=1; i<4; i+=1) {
sColorNew += sColor.slice(i, i+1).concat(sColor.slice(i, i+1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i=1; i<7; i+=2) {
sColorChange.push(parseInt("0x"+sColor.slice(i, i+2)));
}
return "RGB(" + sColorChange.join(",") + ")";
}
return sColor;
};