如何将 8 位十六进制颜色(Alpha)转换/展平为占 Alpha 的 6 位十六进制颜色(假设白色背景)?

问题描述 投票:0回答:1

我在谷歌上到处搜索,但找不到任何关于如何实现这一目标的资源或页面。大多数结果仅适用于 rgba() 等。

我到底想要什么: 将具有透明度的

8-Digit hex
转换为应用透明度的
6-Digit hex
(假设白色背景)。

例如:我有以下颜色:

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

我想展平这些颜色,以便获得 6 位十六进制代码的结果列表,这些代码反映了应用透明度时的可见颜色。我不想只想修剪最后两位数字并删除透明度。

这是一张图片,可以更清楚地参考我想要完成的任务:



如图所示,如果有一个算法就太好了。我正在使用 PowerShell,但实际上我会采用任何语言的任何算法,然后自己移植它。

css powershell colors hex color-conversion
1个回答
0
投票

嗯,你不能直接将

#RRGGBBAA
转换为
#RRGGBB
;要实现它,您应该首先将
#RRGGBBAA
颜色格式转换为RGBA,混合透明颜色,最后将生成的RGB值转换为Hex格式。

这是一个适合您的 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}")
© www.soinside.com 2019 - 2024. All rights reserved.