Do what you do

利用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;  
} 

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

posted @ 2012-07-03 16:22  key yao  阅读(10203)  评论(0编辑  收藏  举报
学会做事 学会做人