进行颜色处理时,经常会用到颜色各种表示方法之间的转换。

如颜色阶梯渐变Gradient算法见:js颜色阶梯过渡(均匀渐变)Gradient算法

下面是RGB格式颜色和十六进制(hex)互转代码:

<script>
// 将hex表示方式转换为rgb表示方式(这里返回rgb数组组合)
function colorRgb(sColor){
   var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
   var sColor = sColor.toLowerCase();
   if(sColor && reg.test(sColor)){
	   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 sColorChange;
   }else{
	   return sColor;
   }
};
// 将rgb表示方式转换为hex表示方式
function colorHex(rgb){
   var _this = rgb;
   var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
   if(/^(rgb|RGB)/.test(_this)){
	   var aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",");
	   var strHex = "#";
	   for(var i=0; i<aColor.length; i++){
		   var hex = Number(aColor[i]).toString(16);
		   hex = hex<10 ? 0+''+hex :hex;// 保证每个rgb的值为2位
		   if(hex === "0"){
			   hex += hex;
		   }
		   strHex += hex;
	   }
	   if(strHex.length !== 7){
		   strHex = _this;
	   }
	   return strHex;
   }else if(reg.test(_this)){
	   var aNum = _this.replace(/#/,"").split("");
	   if(aNum.length === 6){
		   return _this;
	   }else if(aNum.length === 3){
		   var numHex = "#";
		   for(var i=0; i<aNum.length; i+=1){
			   numHex += (aNum[i]+aNum[i]);
		   }
		   return numHex;
	   }
   }else{
	   return _this;
   }
}
console.log(colorRgb('#043869'));
console.log(colorHex('rgb(150,01,89)'));
</script>