How can I convert/flatten an 8-Digit Hex color (Alpha) to a 6-Digit Hex color that accounts for the alpha (assuming a white background)?

I’ve googled everywhere and can’t find any resource or page that goes in to how to accomplish this. Most results just work with rgba() etc.

What I want exactly: To convert a 8-Digit hex with transparency to a 6-Digit hex with the transparency applied (assuming a white background).

For example: I have the following colors:

#14C4C1FD
#F25021F4
#FE7162FD
#A259FFFD
#6A9A9C60
#28B8ABBB
#5B9CB931

I want to flatten these colors, so that I get a resulting list of 6-Digit hex codes that reflect the visible color when the transparency is applied. I don’t want to just trim the last two digits and remove the transparency.

Here is an image for a more clear reference to what I’m trying to accomplish:


enter image description here


As mentioned in the image, an algorithm would be great. I am using PowerShell but really I’ll take any algorithm in any language and just port it myself.

Direct conversion from the #RRGGBBAA format to #RRGGBB is not straightforward. To accomplish this, you must initially transform the #RRGGBBAA colour format into RGBA. This involves removing transparency from the colour, and subsequently, you can convert the resulting RGB values back into the Hex format.

Here is a simple algorithm for your use case in Python:

def rgba_to_rgb(hex_color):
    # Assuming a white background, so the background RGB is (255, 255, 255)
    background_r, background_g, background_b = 255, 255, 255
    
    # Extract RGBA from hex
    r = int(hex_color[1:3], 16)
    g = int(hex_color[3:5], 16)
    b = int(hex_color[5:7], 16)
    a = int(hex_color[7:9], 16) / 255.0  # Convert to a scale of 0 to 1

    # Calculate new RGB by blending the original color with the background
    new_r = round((1 - a) * background_r + a * r)
    new_g = round((1 - a) * background_g + a * g)
    new_b = round((1 - a) * background_b + a * b)

    # Convert RGB back to hex
    return f"#{new_r:02X}{new_g:02X}{new_b:02X}"

# Example usage
colors = [
    "#14C4C1FD",
    "#F25021F4",
    "#FE7162FD",
    "#A259FFFD",
    "#6A9A9C60",
    "#28B8ABBB",
    "#5B9CB931",
]

for color in colors:
    converted = rgba_to_rgb(color)
    print(f"{color} -> {converted}")

Leave a Comment