将RGB颜色元组转换为十六进制字符串
我需要把 (0, 128, 64)
转换成像这样 "#008040"
的格式。我不知道后者应该叫什么,这让我搜索起来很困难。
17 个回答
25
我写了一个完整的Python程序,它可以把RGB颜色转换成十六进制颜色,也可以把十六进制颜色转换回RGB。
def rgb2hex(r,g,b):
return "#{:02x}{:02x}{:02x}".format(r,g,b)
def hex2rgb(hexcode):
return tuple(map(ord,hexcode[1:].decode('hex')))
你可以在这个链接查看完整的代码和教程:使用Python进行RGB和十六进制颜色转换
69
def clamp(x):
return max(0, min(x, 255))
"#{0:02x}{1:02x}{2:02x}".format(clamp(r), clamp(g), clamp(b))
这段内容使用了推荐的字符串格式化方法,具体可以参考PEP 3101。它还使用了min()
和max()
函数,确保0 <= {r,g,b} <= 255
,也就是说这些值必须在0到255之间。
更新:根据下面的建议,添加了一个限制函数。
更新:从问题的标题和给出的背景来看,应该很明显,这个函数期望接收三个在[0,255]范围内的整数,并且在传入这三个整数时,总是会返回一个颜色。不过,从评论来看,这对每个人来说可能并不明显,所以这里明确说明一下:
给定三个
int
值,这个函数会返回一个有效的十六进制三元组,表示一种颜色。如果这些值在[0,255]之间,它会将这些值视为RGB值,并返回对应的颜色。
271
使用格式化操作符 %
:
>>> '#%02x%02x%02x' % (0, 128, 64)
'#008040'
注意,它不会检查边界...
>>> '#%02x%02x%02x' % (0, -1, 9999)
'#00-1270f'