Python将colorsys RGB坐标转换为十六进制

Bry*_*mas 6 python rgb

根据这个答案,我在 Python 中生成了一些均匀分布的颜色,如下所示:

>>> import colorsys
>>> num_colors = 22
>>> hsv_tuples = [(x*1.0/num_colors, 0.5, 0.5) for x in range(num_colors)]
>>> rgb_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples)
>>> rgb_tuples
[(0.5, 0.25, 0.25), (0.5, 0.3181818181818182, 0.25), (0.5, 0.38636363636363635, 0.25), (0.5, 0.45454545454545453, 0.25), (0.4772727272727273, 0.5, 0.25), (0.4090909090909091, 0.5, 0.25), (0.34090909090909094, 0.5, 0.25), (0.2727272727272727, 0.5, 0.25), (0.25, 0.5, 0.2954545454545454), (0.25, 0.5, 0.36363636363636365), (0.25, 0.5, 0.43181818181818177), (0.25, 0.5, 0.5), (0.25, 0.4318181818181819, 0.5), (0.25, 0.36363636363636354, 0.5), (0.25, 0.2954545454545454, 0.5), (0.2727272727272727, 0.25, 0.5), (0.34090909090909083, 0.25, 0.5), (0.40909090909090917, 0.25, 0.5), (0.4772727272727273, 0.25, 0.5), (0.5, 0.25, 0.4545454545454546), (0.5, 0.25, 0.38636363636363646), (0.5, 0.25, 0.3181818181818181)]
Run Code Online (Sandbox Code Playgroud)

现在如何从这些(“坐标?”)RGB 元组转换回 RGB 十六进制字符串,例如#FF00AA?可能是一个简单的问题,但我无法找到答案。

Bri*_*ain 7

对于每种颜色,floor(color * 256),以十六进制打印出来(填充到 2 位)。例如:

In [1]: rgb_tuples = [(0.5, 0.25, 0.25), (0.5, 0.3181818181818182, 0.25), (0.5, 0.38636363636363635, 0.25), (0.5, 0.45454545454545453, 0.25), (0.4772727272727273, 0.5, 0.25), (0.4090909090909091, 0.5, 0.25), (0.34090909090909094, 0.5, 0.25), (0.2727272727272727, 0.5, 0.25), (0.25, 0.5, 0.2954545454545454), (0.25, 0.5, 0.36363636363636365), (0.25, 0.5, 0.43181818181818177), (0.25, 0.5, 0.5), (0.25, 0.4318181818181819, 0.5), (0.25, 0.36363636363636354, 0.5), (0.25, 0.2954545454545454, 0.5), (0.2727272727272727, 0.25, 0.5), (0.34090909090909083, 0.25, 0.5), (0.40909090909090917, 0.25, 0.5), (0.4772727272727273, 0.25, 0.5), (0.5, 0.25, 0.4545454545454546), (0.5, 0.25, 0.38636363636363646), (0.5, 0.25, 0.3181818181818181)]

In [2]: for (r,g,b) in rgb_tuples:
   ...:     print '%02x%02x%02x' % (int(r*255), int(g*255), int(b*255))
   ...:     
804040
805140
806240
807440
Run Code Online (Sandbox Code Playgroud)


Pat*_*shu 4

1) 将浮点数乘以 256 并转换为整数。如果等于 256,则减 1。

编辑:由于我收到很多令人困惑的评论,因此必须乘以 256(如果最终为 256,则减去 1)的原因是为了获得与每个整数输出对应的完全相同数量的浮点值。

2)http://docs.python.org/2/library/string.html?highlight=hexadecimal#format-specation-mini-language

'x' 十六进制格式。输出以 16 为基数的数字,9 以上的数字使用小写字母。

使用它,将其设为大写并在其前面添加一个#。