You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:46:01