Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert rgba to a transparency-adjusted-hex?

I'm wondering how to convert rgba into hex in a way that translates the visible rgba-color (including transparency) into a hex value.

Say I have this:

rgba(0,129,255,.4)

Which is sort of a "light blue"...

I would like to know if there is a way to get the same light blue "visible" color in hex, so I don't want the converted #0081ff but something close to the color visible on screen.

Question:
How to convert rgba to a transparency-adjusted-hex?

like image 290
frequent Avatar asked Apr 09 '13 09:04

frequent


People also ask

What is the RGB color code for transparent?

rgb(255, 0, 0);opacity:0.8; Notice that the text above will also be transparent/opaque!

How do you convert Rgba to hex?

Converting RGBA to hex with the #rgba or #rrggbbaa notation follows virtually the same process as the opaque counterpart. Since the alpha ( a ) is normally a value between 0 and 1, we need to multiply it by 255, round the result, then convert it to hexadecimal.

How do I make Rgba transparent?

Changing the opacity of the background color only To achieve this, use a color value which has an alpha channel—such as rgba. As with opacity , a value of 1 for the alpha channel value makes the color fully opaque. Therefore background-color: rgba(0,0,0,. 5); will set the background color to 50% opacity.

How do you make a transparent color hex?

You can actually apply a hex code color that is transparent. The hex code for transparent white (not that the color matters when it is fully transparent) is two zeros followed by white's hex code of FFFFFF or 00FFFFFF.


3 Answers

It depends on the background to which your transparent color will be applied. But if you know the color of the background (e.g. white), you can calculate the RGB color resulting of the RGBA color applied to the specific background.

It's just the weighted average between the color and the background, the weight being the alpha channel (from 0 to 1) :

Color = Color * alpha + Background * (1 - alpha);

For your transparent light blue rgba(0,129,255,.4) against white rgb(255,255,255) :

Red   =   0 * 0.4 + 255 * 0.6 = 153
Green = 129 * 0.4 + 255 * 0.6 = 204.6
Blue  = 255 * 0.4 + 255 * 0.6 = 255

Which gives rgb(153,205,255) or #99CDFF

like image 167
zakinster Avatar answered Oct 03 '22 09:10

zakinster


function hexify(color) {
  var values = color
    .replace(/rgba?\(/, '')
    .replace(/\)/, '')
    .replace(/[\s+]/g, '')
    .split(',');
  var a = parseFloat(values[3] || 1),
      r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
      g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
      b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255);
  return "#" +
    ("0" + r.toString(16)).slice(-2) +
    ("0" + g.toString(16)).slice(-2) +
    ("0" + b.toString(16)).slice(-2);
}

var myHex = hexify('rgba(57,156,29,0.05)'); // "#f5faf3"

console.log(myHex);
like image 37
David Rosson Avatar answered Oct 03 '22 09:10

David Rosson


You can save yourself some time and calculations by using chrome's eyedropper tool. What I usually do is set a big div's background color to the rgba I have then add a color attribute in CSS to some random hex value. Then you just click on the colored square next to that random hex value and hover over the div that has the background color on the page and use the eyedropper to select the background color. If it comes back as rgba you can cycle through hsla, rgba, and hex by clicking that colored square again and click the up and down arrows to the right.

like image 38
warrendugan Avatar answered Oct 03 '22 10:10

warrendugan