javascript编写一个将十六进制值转换为颜色的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript编写一个将十六进制值转换为颜色的函数相关的知识,希望对你有一定的参考价值。

以蓝色为例,#0000FF 应该表示成“rgb(0,0,255)”的形式。

function getRGB(hex)
    var rgb=[0,0,0];
    if(/#(..)(..)(..)/g.test(hex))
        rgb=[parseInt(RegExp.$1,16),parseInt(RegExp.$2,16),parseInt(RegExp.$3,16)];
    ;
    return "rgb("+rgb.join(",")+")";

参考技术A "如果输入值不完整,对应的颜色值取0"

这点不可能的, 谁知道你是漏了哪个参数! 参数需要严格对应!(请注意rgba和hsla都是有四个参数的)
以下是约定各变量的范围
R [0, 255]
G [0, 255]
B [0, 255]
A [0, 1]
H [0, 360)
S [0, 1]
L [0, 1]
调用方法
ReturnRGB('rgba(2,255,102,0.3)')

ReturnRGB('hsl(200,0.38,0.6)')

ReturnRGB('#F00')

* 使用请注明原作者

/**
* @author ck0123456@gmail.com
*/
function ReturnRGB(color)
var r = 0,
g = 0,
b = 0,
a = 1,
invalid = '非法参数',
lt = function(s, n)
if (Number.isNaN(s) || s >= n)
throw invalid;

return s;
,
lte = function(s, n)
if (Number.isNaN(s) || s > n)
throw invalid;

return s;
,
test = function(p, q, t)
if (t < 0)
t += 1;
else if (t > 1)
t -= 1;

if (t < 1 / 6)
t = p + (q - p) * 6 * t;
else if (t < 0.5)
t = q;
else if (t < 2 / 3)
t = p + (q - p) * 6 * (2 / 3 - t);
else
t = p;

return t * 255;
,
hex = function(s)
r = parseInt(s.substring(1, 3), 16);
g = parseInt(s.substring(3, 5), 16);
b = parseInt(s.substring(5, 7), 16);
,
rgba = function(part)
r = lte(parseFloat(part[0]), 255);
g = lte(parseFloat(part[1]), 255);
b = lte(parseFloat(part[2]), 255);
a = lte(parseFloat(part[3]), 1);
,
hsla = function(part)
var h = lt(parseFloat(part[0]), 360),
s = lte(parseFloat(part[1]), 1),
l = lte(parseFloat(part[2]), 1),
a = lte(parseFloat(part[3]), 1);
if (s == 0)
r = g = b = l;
else
var q = l < 0.5 ? (l + l * s) : (l + s - l * s),
p = 2 * l - q;
k = h / 360;
r = test(p, q, k + 1 / 3);
g = test(p, q, k);
b = test(p, q, k - 1 / 3);

;
if (typeof color == 'string' && color.length > 3)
color = color.replace(/\s+/g, '').toLowerCase();
if (/^#[0-9a-f]3$/.test(color))
hex(color.replace(/([0-9a-f])/g, '$1$1'));
else if (/^#[0-9a-f]6$/.test(color))
hex(color);
else if (/^rgba\([0-9,\.]+\)$/.test(color))
color = color.substring(5, color.length - 1);
color = color.split(',');
if (color.length == 4)
rgba(color);
else
throw invalid;

else if (/^rgb\([0-9,\.]+\)$/.test(color))
color = color.substring(4, color.length - 1);
color = color.split(',');
if (color.length == 3)
color[3] = '1';
rgba(color);
else
throw invalid;

else if (/^hsla\([0-9,\.]+\)$/.test(color))
color = color.substring(5, color.length - 1);
color = color.split(',');
if (color.length == 4)
hsla(color);
else
throw invalid;

else if (/^hsl\([0-9,\.]+\)$/.test(color))
color = color.substring(4, color.length - 1);
color = color.split(',');
if (color.length == 3)
color[3] = '1';
hsla(color);
else
throw invalid;

else
throw invalid;


return
Red: r,
Green: g,
Blue: b,
Alpha: a

参考技术B function getRGB(hex) var rgb=[0,0,0]; if(/#(..)(..)(..)/g.test(hex)) rgb=[parseInt(RegExp.$1,16),parseInt(RegExp.$2,16),parseInt(RegExp.$3,16)]; ; return "rgb("+rgb.join(",")+")";

javascript十六进制颜色转换为rgb函数[重复]

【中文标题】javascript十六进制颜色转换为rgb函数[重复]【英文标题】:javascript hexadecimal color convert into rgb function [duplicate] 【发布时间】:2017-04-21 17:16:22 【问题描述】:

我是 Javascript 新手。我想创建一个函数,它将采用十六进制颜色代码并将其转换为 rgb(xx,xx,xx)。 我的代码在下面找到

function my(a)
var first = a[1] + a[2];
var second = a[3] + [4];
var third = a[5] + a[6];
var res = [first,second,third];
for(var i = 0; i <res.length; i++)
res[i] = parseInt(res[i],16);

return res;

除第二个数组元素外,第一个和第三个数组元素正在正确转换。我不知道为什么,谁能告诉我为什么?

【问题讨论】:

javascript 数组中的索引以 0 开头,而不是 1 @manonthemat 但是十六进制不是以# 开头的吗?所以索引 0 处的元素不是数字。 那么a#ccdd11形式的字符串呢?好吧,那是有道理的。 是的十六进制数以#开头,所以我从 1 开始。是的,我将“a”视为字符串 【参考方案1】:

您在分配 second 时有错字。你有a[3] + [4],它应该是a[3] + a[4]

function my(a) 
    var first = a[1] + a[2];
    var second = a[3] + a[4];
    var third = a[5] + a[6];
    var res = [first,second,third];
    for(var i = 0; i < res.length; i++)
        res[i] = parseInt(res[i],16);
    
    return res;

【讨论】:

非常感谢您的宝贵时间

以上是关于javascript编写一个将十六进制值转换为颜色的函数的主要内容,如果未能解决你的问题,请参考以下文章

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

JavaScript之颜色值相互转换十六进制正则rgbtoStringslicetoUpperCasesplitfiltermapparseInt

JavaScript之颜色值相互转换十六进制正则rgbtoStringslicetoUpperCasesplitfiltermapparseInt

如何在 C++ 中将 RGB 颜色值转换为十六进制值?

javascript 颜色值转换 - 十六进制/ RGB

将十六进制颜色值 (#ffffff) 转换为整数值