在Python中将RGB颜色元组转换为六位数的代码

我需要转换(0,128,64)像这样的#008040。 我不确定怎么称呼后者,使search困难。

使用格式运算符%

 >>> '#%02x%02x%02x' % (0, 128, 64) '#008040' 

请注意,它不会检查边界…

 >>> '#%02x%02x%02x' % (0, -1, 9999) '#00-1270f' 
 def clamp(x): return max(0, min(x, 255)) "#{0:02x}{1:02x}{2:02x}".format(clamp(r), clamp(g), clamp(b)) 

这使用了string格式化的首选方法,如PEP 3101中所述 。 它还使用min()max来确保0 <= {r,g,b} <= 255

更新添加了钳位function,如下所示。

更新从问题的标题和上下文给出,这应该是显而易见的,这需要在[0,255]三个整数,并将始终返回一个颜色,当传递3这样的整数。 但是,从评论来看,这可能对每个人都不明显,所以要明确说明:

提供三个int值,这将返回一个有效的hex三元组表示一种颜色。 如果这些值介于[0,255]之间,则将它们视为RGB值并返回与这些值相对应的颜色。

 triplet = (0, 128, 64) print '#'+''.join(map(chr, triplet)).encode('hex') 

要么

 from struct import pack print '#'+pack("BBB",*triplet).encode('hex') 

python3略有不同

 from base64 import b16encode print(b'#'+b16encode(bytes(triplet))) 

这是一个古老的问题,但对于信息,我开发了一些与颜色和colormaps相关的实用程序的包,并包含您正在寻找将三元组转换为六值的rgb2hex函数(可以在许多其他软件包中find,例如matplotlib)。 这是在pypi上

 pip install colormap 

接着

 >>> from colormap import rgb2hex >>> rgb2hex(0, 128, 64) '##008040' 

input的有效性被检查(值必须在0和255之间)。

您好,我已经创build了一个完整的Python程序,下面的函数可以将rgb转换为hex,反之亦然。

 def rgb2hex(r,g,b): hex = "#{:02x}{:02x}{:02x}".format(r,g,b) return hex def hex2rgb(hexcode): rgb = tuple(map(ord,hexcode[1:].decode('hex'))) return rgb 

您可以在以下链接中看到完整的代码和教程: 使用Python将RGB转换为hex和hex转换为RGB