How to extract r, g, b, a values from CSS color?

后端 未结 7 481
猫巷女王i
猫巷女王i 2021-01-08 00:54

What would be the easiest way to transform

$(\'#my_element\').css(\'backgroundColor\')

to object like this:

{ r: red_value,         


        
相关标签:
7条回答
  • 2021-01-08 00:57

    To convert rgba string to object with keys:

    convertRGBtoOBJ(colorString)
    {
      const rgbKeys = ['r', 'g', 'b', 'a'];
      let rgbObj = {};
      let color = colorString.replace(/^rgba?\(|\s+|\)$/g,'').split(',');
    
      for (let i in rgbKeys)
        rgbObj[rgbKeys[i]] = color[i] || 1;
    
      return rgbObj;
    }
    
    console.log(convertRGBtoOBJ('rgba(23,54,230,0.5)'))
    
    /*
      Object {r: "23", g: "54", b: "230", a: 0.5}
    */
    
    0 讨论(0)
  • 2021-01-08 01:01

    Simple function to extract the RGB numeric values

    function extractRgb (css) {
      return css.match(/[0-9.]+/gi)
    }
    console.log(extractRgb('rgb(255, 255, 255)'))
    console.log(extractRgb('rgba(255, 255, 255, 0.7)'))

    0 讨论(0)
  • 2021-01-08 01:02

    As seen here:

    R = hexToR("#FFFFFF");
    G = hexToG("#FFFFFF");
    B = hexToB("#FFFFFF");
    
    function hexToR(h) {return parseInt((cutHex(h)).substring(0,2),16)}
    function hexToG(h) {return parseInt((cutHex(h)).substring(2,4),16)}
    function hexToB(h) {return parseInt((cutHex(h)).substring(4,6),16)}
    function cutHex(h) {return (h.charAt(0)=="#") ? h.substring(1,7):h}
    

    This script basically takes each color pair from your hexcolor code (for example #F0556A) and switches it to a integer using parseInt with base 16 .

    0 讨论(0)
  • 2021-01-08 01:09

    Say you have the following CSS rule:

    #my_element {
        background-color: rgba(100, 0, 255, 0.5);
    }
    

    Then this is how you could get an RBGA object:

    var colorStr = $('#my_element').css('backgroundColor'); // "rgba(100, 0, 255, 0.5)"
    
    // using string methods
    colorStr = colorStr.slice(colorStr.indexOf('(') + 1, colorStr.indexOf(')')); // "100, 0, 255, 0.5"
    var colorArr = colorStr.split(','),
        i = colorArr.length;
    
    while (i--)
    {
        colorArr[i] = parseInt(colorArr[i], 10);
    }
    
    var colorObj = {
        r: colorArr[0],
        g: colorArr[1],
        b: colorArr[2],
        a: colorArr[3]
    }
    
    0 讨论(0)
  • 2021-01-08 01:12

    You would do something like:

    $.fn.ToRgb = function()
    {
        if(this.charAt(0) == "#"){this = this.substring(1,7);} //remove the #
        return {
            R : parseInt(this.substring(0,2) ,16),
            G : parseInt(this.substring(2,4) ,16),
            B : parseInt(this.substring(4,6) ,16),
        }
    }
    
    RGB = $('#my_element').css('backgroundColor').ToRgb();
    
    
    /*
       * console.log(rgb) =>
       * {
       *   R: X
       *   G: X
       *   B: X 
       * }
    */
    

    Pretty simple :)

    0 讨论(0)
  • 2021-01-08 01:15

    More simple:

     //javascript code
     var color = $('#my_element').css('backgroundColor');
     var rgb = /rgb\((\d+), (\d+), (\d+)\)/.exec(color);
      var r = rgb[1],
          g = rgb[2],
          b = rgb[3];
      console.log('Red  :' + r);
      console.log('Green:' + g);
      console.log('Blue :' + b);
    
    0 讨论(0)
提交回复
热议问题