如何在Python中将十六进制颜色值转换为RGB

2024-10-01 02:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将十六进制颜色值(如#ff3ab4)转换为三元组的RGB值,如(128, 255, 0)?在


Tags: 颜色rgb三元组ff3ab4
2条回答

前导零被省略的原因是因为字符串被转换成一个数字,当你再次尝试将这个数字表示为一个字符串时,它不会显示任何前导的0,因为这个没有特定长度的数字不能知道它来自一个字符串,而字符串又有一定的长度。在

在您的例子中,我假设您希望将单独的A、R、B和G部分作为格式良好的字符串返回。如果您想手动执行此操作,我将执行以下操作:

def colorComponents(hexAsString):
    def uniformLength(string):
        return string[:2] + "".zfill(10-len(string)) + string[2:]
    re = []
    re.append(str(hex(int(hexAsString, 16) & int("0xFF000000", 16))))
    re.append(str(hex(int(hexAsString, 16) & int("0x00FF0000", 16))))
    re.append(str(hex(int(hexAsString, 16) & int("0x0000FF00", 16))))
    re.append(str(hex(int(hexAsString, 16) & int("0x000000FF", 16))))

    for i in range(len(re)):
        re[i] = uniformLength(re[i])
    return re

请注意,这并不是以任何方式优化性能的。:) 应该直接使用整数(比如使用255而不是int(“0xFF000000”,16))。通过这种方式,您可以清楚地看到im使用的位掩码过滤出作为十六进制数的独立组件。在

我相当肯定,也有一些类似字符串格式化程序的东西可以将数字表示为漂亮的字符串,但我从未使用过它们,因此我无法告诉您使用这些格式的解决方案会是什么样子:)

编辑: 如果您不清楚我使用的位掩码是如何工作的,下面是一个(希望如此)简单的示例: 假设有2个字节的数据以位形式表示:

^{pr2}$

&运算符是位AND运算符。在

bytesAND = bytes0 & bytes1

bytesAND现在如下所示:

0000 0101
>>> bit32_to_bytes = lambda x: [255 & (x >> 8 * i) for i in (0,1,2,3)]
>>> bit32_to_bytes(0xFFEE2200)
[0L, 34L, 238L, 255L]

一些解释:

^{pr2}$

在屏蔽y = 255 & x之后,y接收数字x中低位字节的值。 y = 255 & (x >> 8 * n)->;y=x的第n个字节

相关问题 更多 >