javascript - RGB 到十六进制代码

标签 javascript

我目前正在制作 RGB 到十六进制转换器,但遇到了问题。例如,如果输入 rgb(9,9,9),它将输出为 #999 而不是 #090909。这似乎只对值 0 到 9 是一个问题(尽管 0 不是问题)。

我当前的代码:

c = type.slice(4).split(','); // type would be 'rgb(9,9,9)'
c[2] = c[2].substring(0, c[2].length - 1);

var s = '#';
for (i=0; i<3; i++) {
  c[i] = +c[i]
  s += c[i].toString(16);
  console.log(s);
}

如您所见,我没有单独的红色、绿色和蓝色输入。我希望能够输入全彩。我在 javascript 控制台中对此进行了测试,因为我的页面尚未准备好,但目前应该不重要。我输入 rgb(255,255,255) 对其进行测试,并成功获得 #ffffff 的输出。

如果有人可以帮助我让它发挥作用。谢谢。

最佳答案

下面将进行 RGB 到十六进制的转换:

  function componentToHex(c) {
    var hex = c.toString(16);
    return hex.length == 1 ? "0" + hex : hex;
}

function rgbToHex(r, g, b) {
    return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
}

alert( rgbToHex(0, 51, 255) ); // #0033ff

您也可以使用下面的代码。在下面的函数中,如果指定的颜色字符串已经是十六进制,则返回该字符串。如果是 rgb 格式,则会将其转换为十六进制。

    function colorToHex(color) {
    if (color.substr(0, 1) === '#') {
        return color;
    }
    var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);

    var red = parseInt(digits[2]);
    var green = parseInt(digits[3]);
    var blue = parseInt(digits[4]);

    var rgb = blue | (green << 8) | (red << 16);
    return digits[1] + '#' + rgb.toString(16);
};

colorToHex('rgb(120, 120, 240)')

关于javascript - RGB 到十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22655676/

相关文章:

javascript - 如何使用 SJCL 解密 AES

javascript - 为什么 "e.preventDefault()"和 "return false"会禁用该帖子?

javascript - AngularJS ng-hide 不工作

javascript - Typescript 获取泛型中的键类型

javascript - 在angularjs中说早上晚上和下午

javascript - 未捕获的类型错误 : Cannot set property 'onclick' of null error

javascript - 关于javascript闭包的困惑

javascript - 如何为 jqPlot 中的特定数据系列设置 Stack Series false

javascript - 在 mysql 数组上使用 php 或 javascript 进行演绎过滤搜索

javascript - 通过 JavaScript 对数组进行排序时出现错误