如何在Python中将RGB值转换为4字符十六进制颜色字符串?
将RGB转换为4字符十六进制颜色的Python实现
4字符十六进制颜色是把RGBA每个通道的8位值(0-255)压缩为4位(0-15),对应单个十六进制字符(0-F)——本质是取每个通道两位十六进制的第一位,或是将通道数值除以16取整。以下是两种常见场景的实现:
1. 从RGB(A)数值直接转换
如果你的输入是红、绿、蓝、透明度的整数(0-255),可以用以下函数压缩并生成4字符结果:
def rgba_to_4hex(r: int, g: int, b: int, a: int = 255) -> str: # 确保数值在0-255范围内,避免越界 def clamp_and_compress(val: int) -> str: clamped = max(0, min(255, val)) # 除以16取整,将0-255压缩到0-15,对应十六进制字符 return hex(clamped // 16)[2:].upper() return ''.join([ clamp_and_compress(r), clamp_and_compress(g), clamp_and_compress(b), clamp_and_compress(a) ]) # 示例:对应FFCC00CC的RGBA值转换 print(rgba_to_4hex(255, 204, 0, 204)) # 输出 FC0C
2. 从6/8字符十六进制字符串转换
如果你已有6字符(RGB)或8字符(RGBA)的十六进制字符串,可直接截取每个通道的第一位字符:
def hex_to_4hex(hex_str: str) -> str: clean_str = hex_str.lstrip('#') if len(clean_str) == 6: # 6字符RGB,默认透明度为FF(255),对应字符F return f"{clean_str[0]}{clean_str[2]}{clean_str[4]}F" elif len(clean_str) == 8: # 8字符RGBA,直接取每个通道的第一位 return f"{clean_str[0]}{clean_str[2]}{clean_str[4]}{clean_str[6]}" else: raise ValueError("仅支持6字符(RGB)或8字符(RGBA)十六进制字符串") # 示例 print(hex_to_4hex("#FFCC00CC")) # 输出 FC0C print(hex_to_4hex("#FFCC00")) # 输出 FC0F
内容的提问来源于stack exchange,提问作者IAmUnfunny
相关产品推荐
相关产品推荐

