实现RGB与Hex相互转换
时间:2011-04-08 来源:Matin
Rgb采用的是10进制的方法,而hex是16进制;2者相互转换的原理就是利用进制的相互转换;现在CSS3中可以采用Rgba模式,现在只有少量的浏览器支持rgba;jQuery里面没有实现这个工具,mooTools里面有,关于10进制和16进制之间的转换方法和原理,这里不详细介绍,大伙可以自己找点资料读下;
先是HextoRgb:
hexToRgb:function(hexStr,opacity,plainArr){ var hex=/^(?:#)?([\dA-Fa-f]{6})$/,getMatch,splitHex=/(?:[\dA-Fa-f]){2}/g,i=0; if(hexStr.length===3||hexStr.length===4){hexStr=hexStr.replace(/([\dA-Fa-f])/g,"$1$1");} if(getMatch=hex.exec(hexStr)){ getMatch=getMatch[1].match(splitHex); getMatch=this.map(getMatch,this.base,function(value,base){ var len=value.length,curValue=[],intHex,result; if(len!==3){return;}; for(;i<len;i++){ intHex=this.toParseInt.call(this,value[i],base); if(!isNaN(intHex)){ curValue[curValue.length]=intHex; } } if(opacity<=1&&opacity>=0){curValue.push(opacity)}; result=!plainArr?curValue:(opacity<=1&&opacity>=0)?"rgba("+curValue+")":"rgb("+curValue+")"; return result; }); }; return getMatch; }hexToRgb使用方法:
var testHtoR=tranHR.hexToRgb("#fff",0.6,false);
var testHtoR1=tranHR.hexToRgb("fff",false);
var testHtoR2=tranHR.hexToRgb("#FFFFFF",0.6,false);
第二个参数决定返回rgba还是rgb格式的;
第三个参数表示是否返回纯数组还是格式化的字符串;
然后RgbtoHex:
RgbToHex:function(rgb,plainStr){ var getMatch,x,i=0; var sure=rgb.replace(/(rgba|rgb)?([\(\)])?/g,""); if(getMatch=sure.match(/(?:\d{1,3}(\.\d+)?)/g)){ if(getMatch.length>3){x=getMatch.pop();} fixR=this.map(fixR,this.base,function(value,base){ var len=value.length,curValue=[],intRgb,result; if(len!==3){return;}; for(;i<len;i++){ intRgb=(+value[i]).toString(this.base); if(intRgb.length<2){ //不足位数的用0补位; intRgb="0"+intRgb; } curValue[curValue.length]=intRgb; } return result=curValue; }); }; return getMatch=(plainStr?getMatch.join(""):"#"+getMatch.join("")).toUpperCase(); },RgbToHex使用方法:
var testHtoR=tranHR.RgbToHex("rgba(255,210,203,0.6)",false);
var testHtoR1=tranHR.RgbToHex("203,52,16",false);
var testHtoR2=tranHR.RgbToHex("rgb(45,96,255)",true);
第二个参数表示是否返回带'#'或者不带;
最后是上面2个方法要使用到的一些方法:
var tranHR={ base:16, toString:Object.prototype.toString, map:function(array,base,callback){ var len=array.length||0,i=0,arr="",value=[]; if(this.toString.call(array).toLowerCase().indexOf("array")>-1){ value=callback.call(this,array,base); } return value; }, toParseInt:function(value,base){ return parseInt(value,base); }
最后,介绍一种快速把RGB转换为HEX的方法:
function rgb2hex(r,g,b){
return '#'+(1<<24|r<<16|g<<8|b).toString(16).substring(1);
}
相关阅读 更多 +