RGB to hex and hex to RGB

前端 未结 30 2817
遥遥无期
遥遥无期 2020-11-21 06:56

How to convert colors in RGB format to hex format and vice versa?

For example, convert \'#0080C0\' to (0, 128, 192).

相关标签:
30条回答
  • 2020-11-21 07:28

    Here's my version:

    function rgb_to_hex(red, green, blue) {
      const rgb = (red << 16) | (green << 8) | (blue << 0);
      return '#' + (0x1000000 + rgb).toString(16).slice(1);
    }
    
    function hex_to_rgb(hex) {
      const normal = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);
      if (normal) return normal.slice(1).map(e => parseInt(e, 16));
      const shorthand = hex.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i);
      if (shorthand) return shorthand.slice(1).map(e => 0x11 * parseInt(e, 16));
      return null;
    }
    
    0 讨论(0)
  • 2020-11-21 07:28

    A simple answer for rgb to hex

        function rgbtohex(r,g,b){
            return "#" + (Math.round(r) * 65536 + Math.round(g) * 256 + Math.round(b)).toString(16));
        }
    
    0 讨论(0)
  • 2020-11-21 07:29

    An alternative version of hexToRgb:

    function hexToRgb(hex) {
        var bigint = parseInt(hex, 16);
        var r = (bigint >> 16) & 255;
        var g = (bigint >> 8) & 255;
        var b = bigint & 255;
    
        return r + "," + g + "," + b;
    }
    

    Edit: 3/28/2017 Here is another approach that seems to be even faster

    function hexToRgbNew(hex) {
      var arrBuff = new ArrayBuffer(4);
      var vw = new DataView(arrBuff);
      vw.setUint32(0,parseInt(hex, 16),false);
      var arrByte = new Uint8Array(arrBuff);
    
      return arrByte[1] + "," + arrByte[2] + "," + arrByte[3];
    }
    

    Edit: 8/11/2017 The new approach above after more testing is not faster :(. Though it is a fun alternate way.

    0 讨论(0)
  • 2020-11-21 07:29

    This code accept #fff and #ffffff variants and opacity.

    function hex2rgb(hex, opacity) {
            var h=hex.replace('#', '');
            h =  h.match(new RegExp('(.{'+h.length/3+'})', 'g'));
    
            for(var i=0; i<h.length; i++)
                h[i] = parseInt(h[i].length==1? h[i]+h[i]:h[i], 16);
    
            if (typeof opacity != 'undefined')  h.push(opacity);
    
            return 'rgba('+h.join(',')+')';
    }
    
    0 讨论(0)
  • 2020-11-21 07:29

    One-line functional HEX to RGBA

    Supports both short #fff and long #ffffff forms.
    Supports alpha channel (opacity).
    Does not care if hash specified or not, works in both cases.

    function hexToRGBA(hex, opacity) {
        return 'rgba(' + (hex = hex.replace('#', '')).match(new RegExp('(.{' + hex.length/3 + '})', 'g')).map(function(l) { return parseInt(hex.length%2 ? l+l : l, 16) }).concat(isFinite(opacity) ? opacity : 1).join(',') + ')';
    }
    

    examples:

    hexToRGBA('#fff')        ->  rgba(255,255,255,1)  
    hexToRGBA('#ffffff')     ->  rgba(255,255,255,1)  
    hexToRGBA('#fff', .2)    ->  rgba(255,255,255,0.2)  
    hexToRGBA('#ffffff', .2) ->  rgba(255,255,255,0.2)  
    hexToRGBA('fff', .2)     ->  rgba(255,255,255,0.2)  
    hexToRGBA('ffffff', .2)  ->  rgba(255,255,255,0.2)
    
    hexToRGBA('#ffffff', 0)  ->  rgba(255,255,255,0)
    hexToRGBA('#ffffff', .5) ->  rgba(255,255,255,0.5)
    hexToRGBA('#ffffff', 1)  ->  rgba(255,255,255,1)
    
    0 讨论(0)
  • 2020-11-21 07:29

    For convert directly from jQuery you can try:

      function rgbToHex(color) {
        var bg = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
        function hex(x) {
          return ("0" + parseInt(x).toString(16)).slice(-2);
        }
        return     "#" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
      }
    
      rgbToHex($('.col-tab-bar .col-tab span').css('color'))
    
    0 讨论(0)
提交回复
热议问题