将RGB颜色元组转换为十六进制字符串

160 投票
17 回答
171635 浏览
提问于 2025-04-16 02:08

我需要把 (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'

撰写回答