在之前的一篇文章《将16进制的颜色转为rgb颜色》中,曾经写过将16进制的颜色转换为rgb颜色。

  当然了,今天再看,还是有很多可以优化的地方,所以对之前的代码重构了一遍,并且同时写了一个反向转换(也就是将rgb颜色值转换为字符串形式的16进制的颜色值)函数。

  16进制转换rgb:

    function transferColorToRgb(color) {
if (typeof color !== 'string' && !(color instanceof String)) return console.error("请输入16进制字符串形式的颜色值");
color = color.charAt(0) === '#' ? color.substring(1) : color;
if (color.length !== 6 && color.length !== 3) return console.error("请输入正确的颜色值")
if (color.length === 3) {
color = color.replace(/(\w)(\w)(\w)/, '$1$1$2$2$3$3')
}
var reg = /\w{2}/g;
var colors = color.match(reg);
for (var i = 0; i < colors.length; i++) {
colors[i] = parseInt(colors[i], 16).toString();
}
return 'rgb(' + colors.join() + ')';
}

  调用时,参数形式可以为带“#”号,也可以不带,实际颜色值可以为3位,也可以为6位,如: "#ffffff"、"#fff"、"ffffff"、"fff"。

  其中涉及到了利用正则表达式对3位16进制的颜色值转换为6位的数值。

color.replace(/(\w)(\w)(\w)/, '$1$1$2$2$3$3')

  rgb颜色值转为为16进制的颜色值:

    function transferRgbToStr(color) {
if (typeof color !== 'string' && !(color instanceof String) || !~color.indexOf('rgb')) return console.error("请输入rgb形式的颜色值");
color = color.replace(/\s+/g, '');
var index = color.indexOf('(') + 1;
//注意: String 的slice方法,slice方法参数为负数时,即为倒数
// substring 方法参数为负数时,全都认为是0
var colors = color.slice(index, -1).split(',').slice(0, 3);
for (var i = 0; i < colors.length; i++) {
if (parseInt(colors[i], 10) > 255 || parseInt(colors[i], 10) < 0)
return console.error("颜色值范围在0到255之间,请注意输入值!")
colors[i] = parseInt(colors[i], 10).toString(16);
if (colors[i].length === 1) {
colors[i] = "0" + colors[i]
}
}
return colors.join("");
}

  调用时,参数形式可以为带“rgb()”形式的,也可以为"rgba()"形式的数据,如: rgb(122,23,1) 、rgba(123,23,12,0.5)。

  需要注意的是:

var colors = color.slice(index, -1).split(',').slice(0, 3);

  这一句代码当中,有两个slice方法,一个是字符串方法,一个是数组方法,尽管他们的用法一样,仍然需要谨慎。

  还涉及到了String方法中的substring和slice方法使用上的区别,主要是参数为负数时,两者不同的处理方式。slice当做倒数,也就是从后往前数,而sunstring则完全认作是0。请在不同的场景下正确使用两个方法。  

  

十六进制颜色值和rgb颜色值互相转换的更多相关文章

  1. JavaScript随机生成颜色以及十六进制颜色 与RGB颜色值的相互转换

    /** * 随机生成颜色 * @return 随机生成的十六进制颜色 */ function randomColor(){ var colorStr=Math.floor(Math.random()* ...

  2. javascript 十六进制与RGB颜色值的相互转换

    http://www.zhangxinxu.com/wordpress/?p=646 http://www.zhangxinxu.com/wordpress/?p=646 -------------- ...

  3. RGB颜色值与十六进制颜色码转换工具

    RGB颜色值转换成十六进制颜色码:      十六进制颜色码转换成RGB颜色值:     颜色码对照表 颜色 英文代码 形象描述 十六进制 RGB LightPink 浅粉红 #FFB6C1 255, ...

  4. JavaScript16进制颜色值和rgb的转换

    //十六进制颜色值域RGB格式颜色值之间的相互转换//十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; /*RGB颜色转换为1 ...

  5. jquery获取css颜色值返回RGB应用

    我来给大家介绍一下在jquery获取css颜色值返回RGB方法,希望此文章对各位同学会有所帮助哦.   代码如下:  代码如下 复制代码 a, a:link, a:visited { color:#4 ...

  6. PHP将CMYK颜色值和RGB颜色相互转换的例子

    PHP将CMYK颜色值和RGB颜色相互转换的例子 function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r ...

  7. php获取图片RGB颜色值的例子

    php获取图片RGB颜色值的例子 很多图片站点都会根据用户上传的图片检索出图片的主要颜色值,然后在通过颜色搜索相关的图片. 之前按照网上的方法将图片缩放(或者马赛克)然后遍历每个像素点,然后统计处RG ...

  8. ARGB,RGB颜色值表示

    转载请注明出处:http://blog.csdn.net/wei_chong_chong/article/details/50831493 今天自己定义一个控件.设置背景颜色时犯难了 如今就来总结一下 ...

  9. 使用python获得N个区分度较高的RGB颜色值

    获得任意N个区分度最高的RGB颜色值是一个经典的问题,之前在做一些可视化的东西时需要解决这个问题.首先去网上找了一些方法,未果,于是想自己来搞,心里的想法是,先给出一个距离函数用来度量两个RGB颜色值 ...

随机推荐

  1. [SCOI2005]繁忙的都市

    emm...就是个最小生成树板子...我还能说啥... 为啥我早出生个十多年.../(ㄒoㄒ)/~~ 五六年也好啊.../(ㄒoㄒ)/~~ 呆码: #include<iostream> # ...

  2. Kerberos主从配置文档

    Kerberos主从配置文档   1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...

  3. qssp2017 source

    ftp://ftp.gfz-potsdam.de/pub/home/turk/wang

  4. Python基础02_基本数据类型_以及while

    基本数据类型: 字符串: 字符串可以相加, 表示连接; 可以将字符串乘以某个数,表示将此字符串复制多少次. 数: 数的加减乘除取余等. 需要注意的是两个乘号**和两个除号/ / python2中的除法 ...

  5. react native 开发报错

    1:oc对象名是RCTPoctalk 2:js中导入原生方法 3:报错:对象没有定义 出现这样的问题可能是react native 不允许使用“RCT”开头的前缀 4:解决办法:“RCT_EXPORT ...

  6. scrapy中crawlspide中callback和follow函数的作用及使用方法

    Rule(LinkExtractor(allow=r'i/tems'),callback='parse_item',follow=True)  当前代码的含义就是将当前页面及按照allow=r'i/t ...

  7. 剑指Offer 49. 把字符串转换成整数 (字符串)

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  8. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 解决办法

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因有可能是因为修改了m ...

  9. Xcodebuild ipa shell

    命令行下打包iOS App工程: #!/bin/sh # # How To Build ? #http://www.jianshu.com/p/3f43370437d2 #http://www.jia ...

  10. ubuntu16.04下 sublime text输入中文

    1.git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2.cd sublime-text-imfix && ./s ...