利用JS进行rgb与16位色值之间的转换

前两天工作之中遇到了个小问题,后台希望将色值传递的时候以十六位的形式传递,但是因为不同浏览器之间的差异性,导致传递的色值有时是rgb形式的,因此在参考了网上的代码之后改了一个方法用以转换。

首先是转换的思路,rgb是以三原色进行表述的,将其中的三个数字分别转换为两位16进制的数字后相拼接,之后在前面加上#便成为了16位的表述方法。

如何提取三原色中的三个数字,方法不止一种,我采用的是以match进行全局查找,通过正则获取连续的数字。

而10进制与16进制的转换则是利用了数组查询的方式,先将10进制的数字与16相除,将商与余数分别进行数组查询,然后进行拼接。

具体的代码如下:

function RGBToHex(rgb){ 

   var regexp = /[0-9]{0,3}/g;  

   var re = rgb.match(regexp);//利用正则表达式去掉多余的部分,将rgb中的数字提取

   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 < re.length; i++) {

        var r = null, c = re[i], l = c; 

        var hexAr = [];

        while (c > 16){  

              r = c % 16;  

              c = (c / 16) >> 0; 

              hexAr.push(hex[r]);  

         } hexAr.push(hex[c]);

         if(l < 16&&l != ""){        

             hexAr.push(0)

         }

       hexColor += hexAr.reverse().join(''); 

    }  

   //alert(hexColor)  

   return hexColor;  

} 

代码并不复杂,希望能够给新手一点帮助,大家共同学习成长~

你可能感兴趣的:(js)