我在谷歌上到处搜索,但找不到任何关于如何实现这一目标的资源或页面。大多数结果仅适用于 rgba() 等。
我到底想要什么: 将具有透明度的
8-Digit hex
转换为应用透明度的 6-Digit hex
(假设白色背景)。
例如:我有以下颜色:
#14C4C1FD
#F25021F4
#FE7162FD
#A259FFFD
#6A9A9C60
#28B8ABBB
#5B9CB931
我想展平这些颜色,以便获得 6 位十六进制代码的结果列表,这些代码反映了应用透明度时的可见颜色。我不想只想修剪最后两位数字并删除透明度。
如图所示,如果有一个算法就太好了。我正在使用 PowerShell,但实际上我会采用任何语言的任何算法,然后自己移植它。
嗯,你不能直接将
#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}")