JS-011-颜色进制转换(RGB转16进制;16进制转RGB)

  在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制;16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#000080,#FA08FA)转换时总是提示颜色非法,看了一下 js 源码,发现其进制转换的方法是错误的。找了一下度娘和谷大爷,最终写了一个颜色转换的小方法,源码如下所示:

  

String.prototype.colorHex2Rgb = function(){
    var reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
    var sColor = this.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 "RGB(" + sColorChange.join(",") + ")";
    }else{
        return sColor;
    }
};

String.prototype.colorRgb2Hex = function(){
    var reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
    var that = this;

    if(/^(rgb|RGB)/.test(that)){
        var aColor = that.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",");
        var strHex = "#";

        for(var i=0; i<aColor.length; i++){
            var hex = Number(aColor[i]).toString(16);

            if(hex === "0"){
                hex += hex;
            }

            strHex += hex;
        }

        if(strHex.length !== 7){
            strHex = that;
        }

        return strHex.toUpperCase();
    }else if(reg.test(that)){
        var aNum = that.replace(/#/,"").split("");

        if(aNum.length === 6){
            return that;
        }else if(aNum.length === 3){
            var numHex = "#";

            for(var i=0; i<aNum.length; i+=1){
                numHex += (aNum[i]+aNum[i]);
            }

            return numHex.toUpperCase();
        }
    }else{
        return that.toUpperCase();
    }
};

  使用示例:

"#000080".colorHex2Rgb()     ----> RGB(0,0,128)
"#FA0080".colorHex2Rgb()     ----> RGB(250,0,128)
"#888".colorHex2Rgb()          ----> RGB(136,136,136)
"#888888".colorHex2Rgb()     ----> RGB(136,136,136)

"RGB(128,128,128)".colorRgb2Hex()   ---->  #808080
"RGB(255,128,128)".colorRgb2Hex()   ---->  #FF8080
"RGB(128,0,255)".colorRgb2Hex()       ---->  #8000FF

至此, JS-011-颜色进制转换(RGB转16进制;16进制转RGB) 顺利完结,希望此文能够给初学 JavaScript 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

时间: 2024-08-02 07:03:37

JS-011-颜色进制转换(RGB转16进制;16进制转RGB)的相关文章

PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到. 可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有点要注意下,2.8.16进制转换时,使用的是系统的自己的函数. 所以,不管怎么高精度转换值可能大于2147483646. 另外, 32进制低精转换,最大值:2147483646: 32进制高精转换,最大值:77309411327: 64进制高精转换,最大值:133143986175. jinzhi.ph

10进制转换成2、8、16进制の转换器

目前只能实现简单的功能 1 #include <stdio.h> 2 #include <limits.h> 3 #include <math.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <ctype.h> 7 int size; 8 char string[CHAR_BIT * sizeof(int) + 1]; 9 void change_to_16(void

【进制转换】codevs 1474 十进制转m进制

1 #include<cstdio> 2 using namespace std; 3 int n,m,res,a[101],en; 4 int main() 5 { 6 scanf("%d%d",&n,&m); 7 while(n) 8 { 9 a[++en]=n%m; 10 n/=m; 11 } 12 for(int i=en;i>0;i--) 13 { 14 if(a[i]<10) printf("%d",a[i]);

js进制转换

1 var n = 17; 2 var n2 = n.toString(2); 3 var n8 = "0" + n.toString(8); 4 var n16 = "0x" + n.toString(16); 5 console.info(n2); //二进制转换 6 console.info(n8); //8进制转换 7 console.info(n16); //16进制转换 8 console.info(parseInt(n2, 2)); //二进制转换 9

js中进制转换

利用javascript进行进制转换的方法 今天在做网站时用到了进制的转换,于是在网上搜索,发现可以直接利用javascript的toString()方法和parseInt()方法进行十进制和其他进制之间的转换,这里对他们的用法进行一下整理. toString()方法:将十进制数转换成其他进制数 parseInt()方法:将其他进制数转换成十进制数 <script language="javascript" type="text/javascript">

进制转换转换以及原码反码和补码

一.进制转换 1.数制和码制 常用数制表示法 十进制 二进制 八进制 十六进制 8421BCD码 0 0 0 0 0000 1 1 1 1 0001 2 10 2 2 0010 3 11 3 3 0011 4 100 4 4 0100 5 101 5 5 0101 6 110 6 6 0110 7 111 7 7 0111 8 1000 10 8 1000 9 1001 11 9 1001 10 1010 12 A 0001 0000 11 1011 13 B 0001 0001 12 1100

进制进制进制~转换

从刚学计算机器就对进制转换有着莫名的反感,2进制 8进制 10进制 16进制各种转换. 下面就说下逻辑地址转换成物理地址的求法吧 首先,用户输入一个16进制的数字cin>>hex>>logic_add;   hex的意思是告诉计算机输入的数是以16进制方式输入的 这个时候你要是输出cout<<logic_add;  你会发现输出的是把这个16进制的数转换为10进制以后输出的结果 cout<<hext<<logic_add;这样输出的才是16进制.

c语言之进制转换(栈实现)

从上两篇博客中我们可以知道,栈具有后进先出的特性,而进制转换的打印输出刚好与计算过程相反,满足栈这后进先出的特性, 所以可以用栈很快的实现进制转换,下面是用栈实现进制转换的c函数 void conversion (SqStack *pstack,unsigned int N, const unsigned int d){ if( pstack == NULL)//当传入参数为指针,必须判空 exit(-1); int mod ;//保存mod = N %d while( N != 0){ mod

进制转换--Java实现

题目详情 我们通常用的十进制数包含0-9十个数字.假设有一种进制系统包含3种数字,从低到高分别为"oF8",那么从1到9分别表示为F, 8, Fo, FF, F8, 8o, 8F, 88, Foo.给定一种进制的数和两种进制的数字表,请把它从第一种进制转换为第二种进制. 输入格式: 第一行是T表示测测试数据组数.(0<T<=200). 以后T行,每行有3个部分: number number_table1 number_table2 其中number_table1和numbe

java中的进制转换

进制转换 首先是十进制转化为其他进制,如二进制,八进制,十六进制: 它们在java中都有专门的函数可供调用: 如:十进制转化为二进制时调用toBinaryString(); 十进制转化为八进制时调用toOctalString(); 十进制转化为十六进制时调用toHexString(); 代码实现: // 进制转化 public class Main_2 { public static void main(String[] args) { Integer a=new Integer(20); //