Javascript RGBA和RGB到十六进制

Javascript RGBA和RGB到十六进制,javascript,Javascript,我试图找到一种方法,可以转换RGB或RGBA字符串到十六进制格式。我找到了解决方案,但不是像方法1=>rgbToHex这样的方法,对于RGBA rgbaToHex,我想将它们组合起来,这样它就可以返回RGB和RGBA的十六进制值 RGB方法: // convert RGB color data to hex function rgb2hex(r, g, b) { if (r > 255 || g > 255 || b > 255) throw "

我试图找到一种方法,可以转换RGB或RGBA字符串到十六进制格式。我找到了解决方案,但不是像方法1=>rgbToHex这样的方法,对于RGBA rgbaToHex,我想将它们组合起来,这样它就可以返回RGB和RGBA的十六进制值

RGB方法:

    // convert RGB color data to hex
function rgb2hex(r, g, b) {
    if (r > 255 || g > 255 || b > 255)
        throw "Invalid color component";
    return ((r << 16) | (g << 8) | b).toString(16);
}
我创建了我的解决方案,它可以接受任何字符串rgb或rgba,然后返回十六进制值 这是我的答案:

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

    rgb = string.substring(4, string.length-1).replace(/ /g, '').split(',');
    R = rgb[0].replace("(", "");
    G = rgb[1];
    B = rgb[2];

    return "#" + componentToHex(R) + componentToHex(G) + componentToHex(B);

}

console.log(anytoHEX('rgba(0,0,0,0)'));

您可以将其设为包装器,并根据传递的参数调用该函数

 //takes both RGB and RGBA and convert to HEX like  #000000
   // input will be string like this => rgb(0,0,0) or rgba(255,255,255, 0.5)
    function anyToHex(r, g, b, a) {
      if(a === undefined){
         return rgb2hex(r, g, b);
      }
     return rgba2hex(r, g, b, a);
    }

您可以将其设为包装器,并根据传递的参数调用该函数

 //takes both RGB and RGBA and convert to HEX like  #000000
   // input will be string like this => rgb(0,0,0) or rgba(255,255,255, 0.5)
    function anyToHex(r, g, b, a) {
      if(a === undefined){
         return rgb2hex(r, g, b);
      }
     return rgba2hex(r, g, b, a);
    }

在javascript中,所有函数参数都是可选的,因此如果省略其中一个,它将是未定义的。所以,你可以用类似

if (a === undefined) {
  // return rgb2hex
else {
  // return rgba2hex
}

注意,如果(a),您不想在这里执行
,因为0是a的有效值,但会导致false并返回rgb。

在javascript中,所有函数参数都是可选的,因此如果省略其中一个,它将是
未定义的。所以,你可以用类似

if (a === undefined) {
  // return rgb2hex
else {
  // return rgba2hex
}


注意,您不想在此处执行if(a)
,因为0是a的有效值,但会导致false并返回rgb。

Aloha!要想知道真正的问题是什么有点难。你试过把这些方法结合起来吗?您能告诉我们您从哪里获得了
anyToHex
函数,以便我们提供具体帮助吗?您了解这些函数是如何工作的吗?你应该花些时间来做这件事,然后你就可以很容易地将两者结合起来。@FelixKling,你说得对。顺便说一句,@Sunilmeena想要它像
#000000
,因此a不重要!您也可以考虑检查每个输入是否大于0,因为负值也会无效。@拉胡尔:我认为这只是一个不完整的例子。因为
255
肯定不会映射到
00
;)你好!要想知道真正的问题是什么有点难。你试过把这些方法结合起来吗?您能告诉我们您从哪里获得了
anyToHex
函数,以便我们提供具体帮助吗?您了解这些函数是如何工作的吗?你应该花些时间来做这件事,然后你就可以很容易地将两者结合起来。@FelixKling,你说得对。顺便说一句,@Sunilmeena想要它像
#000000
,因此a不重要!您也可以考虑检查每个输入是否大于0,因为负值也会无效。@拉胡尔:我认为这只是一个不完整的例子。因为
255
肯定不会映射到
00
;)那不太对。这意味着如果
a
0
,它将不会被考虑。但是我没有数组中的字符串值,我只是想给他一个创建wrapper@Sunilmeena:“但我的字符串值不在数组中”这是什么意思?我的意思是如何从字符串中提取R、G、B和Aplha?这不太正确。这意味着如果
a
0
,它将不会被考虑。但是我没有数组中的字符串值,我只是想给他一个创建wrapper@Sunilmeena:“但我的字符串值不在数组中”这是什么意思?我的意思是如何从字符串中提取R、G、B和Aplha