RGB to hex and hex to RGB

前端 未结 30 2819
遥遥无期
遥遥无期 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:22

    My version of hex2rbg:

    1. Accept short hex like #fff
    2. Algorithm compacity is o(n), should faster than using regex. e.g String.replace, String.split, String.match etc..
    3. Use constant space.
    4. Support rgb and rgba.

    you may need remove hex.trim() if you are using IE8.

    e.g.

    hex2rgb('#fff') //rgb(255,255,255) 
    hex2rgb('#fff', 1) //rgba(255,255,255,1) 
    hex2rgb('#ffffff') //rgb(255,255,255)  
    hex2rgb('#ffffff', 1) //rgba(255,255,255,1)
    

    code:

    function hex2rgb (hex, opacity) {
        hex = hex.trim();
        hex = hex[0] === '#' ? hex.substr(1) : hex;
        var bigint = parseInt(hex, 16), h = [];
        if (hex.length === 3) {
            h.push((bigint >> 4) & 255);
            h.push((bigint >> 2) & 255);
        } else {
            h.push((bigint >> 16) & 255);
            h.push((bigint >> 8) & 255);
        }
        h.push(bigint & 255);
        if (arguments.length === 2) {
            h.push(opacity);
            return 'rgba('+h.join()+')';
        } else {
            return 'rgb('+h.join()+')';
        }
    }
    
    0 讨论(0)
  • 2020-11-21 07:23

    Bitwise solution normally is weird. But in this case I guess that is more elegant

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

    Try (bonus)

    let hex2rgb= c=> `rgb(${c.substr(1).match(/../g).map(x=>+`0x${x}`)})`;
    let rgb2hex= c=>'#'+c.match(/\d+/g).map(x=>(+x).toString(16).padStart(2,0)).join``
    

    let hex2rgb= c=> `rgb(${c.substr(1).match(/../g).map(x=>+`0x${x}`)})`;
    let rgb2hex= c=> '#'+c.match(/\d+/g).map(x=>(+x).toString(16).padStart(2,0)).join``;
    
    // TEST
    console.log('#0080C0          -->', hex2rgb('#0080C0'));
    console.log('rgb(0, 128, 192) -->', rgb2hex('rgb(0, 128, 192)'));

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

    Shorthand version that accepts a string:

    function rgbToHex(a){
      a=a.replace(/[^\d,]/g,"").split(","); 
      return"#"+((1<<24)+(+a[0]<<16)+(+a[1]<<8)+ +a[2]).toString(16).slice(1)
    }
    
    document.write(rgbToHex("rgb(255,255,255)"));

    To check if it's not already hexadecimal

    function rgbToHex(a){
      if(~a.indexOf("#"))return a;
      a=a.replace(/[^\d,]/g,"").split(","); 
      return"#"+((1<<24)+(+a[0]<<16)+(+a[1]<<8)+ +a[2]).toString(16).slice(1)
    }
    
    document.write("rgb: "+rgbToHex("rgb(255,255,255)")+ " -- hex: "+rgbToHex("#e2e2e2"));

    0 讨论(0)
  • 2020-11-21 07:25
    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}
    

    Use these Function to achive the result without any issue. :)

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

    This could be used for getting colors from computed style propeties:

    function rgbToHex(color) {
        color = ""+ color;
        if (!color || color.indexOf("rgb") < 0) {
            return;
        }
    
        if (color.charAt(0) == "#") {
            return color;
        }
    
        var nums = /(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(color),
            r = parseInt(nums[2], 10).toString(16),
            g = parseInt(nums[3], 10).toString(16),
            b = parseInt(nums[4], 10).toString(16);
    
        return "#"+ (
            (r.length == 1 ? "0"+ r : r) +
            (g.length == 1 ? "0"+ g : g) +
            (b.length == 1 ? "0"+ b : b)
        );
    }
    
    // not computed 
    <div style="color: #4d93bc; border: 1px solid red;">...</div> 
    // computed 
    <div style="color: rgb(77, 147, 188); border: 1px solid rgb(255, 0, 0);">...</div>
    
    console.log( rgbToHex(color) ) // #4d93bc
    console.log( rgbToHex(borderTopColor) ) // #ff0000
    

    Ref: https://github.com/k-gun/so/blob/master/so_util.js

    0 讨论(0)
提交回复
热议问题