十六进制颜色值和rgb颜色值互相转换
在之前的一篇文章《将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颜色值互相转换的更多相关文章
- JavaScript随机生成颜色以及十六进制颜色 与RGB颜色值的相互转换
/** * 随机生成颜色 * @return 随机生成的十六进制颜色 */ function randomColor(){ var colorStr=Math.floor(Math.random()* ...
- javascript 十六进制与RGB颜色值的相互转换
http://www.zhangxinxu.com/wordpress/?p=646 http://www.zhangxinxu.com/wordpress/?p=646 -------------- ...
- RGB颜色值与十六进制颜色码转换工具
RGB颜色值转换成十六进制颜色码: 十六进制颜色码转换成RGB颜色值: 颜色码对照表 颜色 英文代码 形象描述 十六进制 RGB LightPink 浅粉红 #FFB6C1 255, ...
- JavaScript16进制颜色值和rgb的转换
//十六进制颜色值域RGB格式颜色值之间的相互转换//十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; /*RGB颜色转换为1 ...
- jquery获取css颜色值返回RGB应用
我来给大家介绍一下在jquery获取css颜色值返回RGB方法,希望此文章对各位同学会有所帮助哦. 代码如下: 代码如下 复制代码 a, a:link, a:visited { color:#4 ...
- PHP将CMYK颜色值和RGB颜色相互转换的例子
PHP将CMYK颜色值和RGB颜色相互转换的例子 function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r ...
- php获取图片RGB颜色值的例子
php获取图片RGB颜色值的例子 很多图片站点都会根据用户上传的图片检索出图片的主要颜色值,然后在通过颜色搜索相关的图片. 之前按照网上的方法将图片缩放(或者马赛克)然后遍历每个像素点,然后统计处RG ...
- ARGB,RGB颜色值表示
转载请注明出处:http://blog.csdn.net/wei_chong_chong/article/details/50831493 今天自己定义一个控件.设置背景颜色时犯难了 如今就来总结一下 ...
- 使用python获得N个区分度较高的RGB颜色值
获得任意N个区分度最高的RGB颜色值是一个经典的问题,之前在做一些可视化的东西时需要解决这个问题.首先去网上找了一些方法,未果,于是想自己来搞,心里的想法是,先给出一个距离函数用来度量两个RGB颜色值 ...
随机推荐
- C/C++三目运算符
三目运算符,又称条件运算符,是计算机语言(C,C++,Java等)的重要组成部分.它是唯一有3个操作数的运算符,所以有时又称为三元运算符.一般来说,三目运算符的结合性是右结合的. 对于条件表达式b ? ...
- Alpha 冲刺 (10/10)
Alpha 冲刺 (10/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.和愈明.韫月一起对接 2 ...
- 3、调试AngularJs
1.获取Angular元素: angular.element(document.querySelector('html')); a.ele.scope() 提取它的$scope对象 b.ele.co ...
- ubuntu1604使用之旅——启动ssh系列
---恢复内容开始--- 1.安装ssh的client和server: sudo apt-get install openssh-server openssh-client 2.然后就要安装key: ...
- Java语法基础学习DaySeventeen(多线程续)
一.线程的特点 1.线程的分类 java中的线程分为两类:守护线程和用户线程.唯一的区别是判断JVM何时离开. 守护线程是用来服务用户线程的,通过在start()方法前调用Thread.setDaem ...
- ceph压力测试结果总结
万兆网速的ceph分布式存储单虚拟机下的带宽和iops测试结果: 带宽: 写:700-850MB 读:800-900MB iops: 写:15000-20000 读:45000-55000
- Spring中的@Bean注解、@Configuration注解、@Value
1.首先是注册bean类:@Component.@Responsitory.@Controller.@Service.Configuration这些注解是把要实例化的对象装化成一个bean,放到Ioc ...
- 配置mysql主从步骤
在公司开发中,有时候为了缓解数据库压力,会把读写分开为两个数据库来操作,读为一个数据库,写为一个数据库,然后两个数据库做同步,这样能明显降低数据库的压力,下面给大家介绍如何进行mysql主从数据库配置 ...
- 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法
转载:http://www.cnblogs.com/wang-meng/p/8887436.html 1,申请邮箱 地址为:http://mdu.edu.rs/ 邮箱的前缀可以改成自己喜欢的字符 ...
- HBuilder设置沉浸式状态栏显示效果
1:在[manifest.json]文件中,在[plus-->distribute--> apple]下加上[ "UIReserveStatusbarOffset":f ...