rgb与16进制颜色是如何相互转换的?

31 篇文章 1 订阅
26 篇文章 2 订阅

在css中定义颜色可以使用rgb颜色值,例:rgb(182, 0, 35);也可以使用16进制颜色值,例:#B60023。不管是rgb(182, 0, 35),还是#B60023都表示了同一种颜色,其实无论是用哪一种表示方法都行,但由于web页面的千变万化,遇到的情况也有可能千奇百怪,有时我们就需要把rgb与16进制颜色进行转换了。

我们来看看一个rgb与16进制颜色如何转换的例子。

对于十六进制颜色值,可以将它们两个划分为一组,从左到右分别代表RGB。两个十六进制数的第一个和十六相乘,结果加上第二个数,就得到一个0-255之间的数。

例如,有一个十六进制颜色值#B60023,将它转换为RGB就是:R(B6),G(00),B(23)。那么红色就是:B(11) x 16 + 6 = 182。绿色为0,蓝色为:2 x 16 +3 = 35。因此,十六进制颜色值#B60023对应的rgb()红色就是:rgb(182, 0, 35)。

那么如何使用JavaScript来实现rgb与16进制颜色的相互转换?我们来看看实现方法。

JavaScript实现颜色转换的核心就是进制间的转换。

RGB格式其实就是十进制表示法,所以,十六进制颜色与RGB颜色的转换就是十六进制与十进制之间的转换。

1、JavaScript实现RGB颜色转换为16进制(十进制转16进制)

十进制转换为16进制,核心代码如示例:

const num=255;
num.toString(16);

其结果是FF。

说明:toString里的参数“16”表示数值转换为16进制字符串。

rgb颜色转换为16进制 实例代码如下:

/*RGB颜色转换为16进制*/
function colorHex(rgbStr) {
  //十六进制颜色值的正则表达式
  const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  if (/^(rgb|RGB)/.test(rgbStr)) {
    const aColor = rgbStr.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
    let strHex = "#";
    for (let i = 0; i < aColor.length; i++) {
      let hex = Number(aColor[i]).toString(16);
      if (hex === "0") {
        hex += hex;
      }
      strHex += hex;
    }
    if (strHex.length !== 7) {
      strHex = rgbStr;
    }
    return strHex;
  } else if (reg.test(rgbStr)) {
    const aNum = rgbStr.replace(/#/, "").split("");
    if (aNum.length === 6) {
      return rgbStr;
    } else if (aNum.length === 3) {
      let numHex = "#";
      for (let i = 0; i < aNum.length; i += 1) {
        numHex += (aNum[i] + aNum[i]);
      }
      return numHex;
    }
  } else {
    return rgbStr;
  }
};
console.log(colorHex("rgb(52,83,139)"))		// #17f538

2、JavaScript实现16进制颜色转化为rgb颜色

16进制转换为十进制相对容易些,核心代码如示例:

parseInt("0xFF");

其结果就是255

说明:”0x”就表明当前是16进制,由于parseInt后面无参数,所以默认就是转换为10进制了。

16进制颜色转化为rgb颜色 实例代码如下:

function colorRgb (colorStr) {
  //十六进制颜色值的正则表达式
  var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  var sColor = colorStr.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;
    }
    //处理六位的颜色值f
    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;
  }
};
console.log(colorRgb("#34538b"))	// rgb(52,83,139)

总结:以上就是本篇文的全部内容,大家可以自己动手尝试,希望能对大家有所帮助。

颜色值转换网站:在线颜色转换

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值