一尘不染

排序(十六进制)颜色以匹配彩虹

algorithm

我有一个用十六进制表示的颜色列表-我需要对它们进行排序以匹配彩虹中的颜色顺序。-我可以对排序顺序进行硬编码-但我觉得有一种更简洁的方法。


阅读 656

收藏
2020-07-28

共1个答案

一尘不染

在给定十六进制RGB颜色规范的情况下,以下函数返回其HSV颜色:

import colorsys

def get_hsv(hexrgb):
    hexrgb = hexrgb.lstrip("#")   # in case you have Web color specs
    r, g, b = (int(hexrgb[i:i+2], 16) / 255.0 for i in xrange(0,5,2))
    return colorsys.rgb_to_hsv(r, g, b)

现在,您可以使用此功能通过色相对RGB十六进制颜色列表进行排序:

color_list = ["000050", "005000", "500000"]  # GBR
color_list.sort(key=get_hsv)
print color_list

通过使用整个HSV元组进行排序,可以确保没有色相(即灰度)的颜色在一致的位置排序,并且具有相同色相但不同的饱和度/值的颜色相对于饱和度更高的颜色/尊贵的同行。

如果颜色因饱和度(强度)或值(亮度)的不同而大相径庭,那么您仍然会感到一团糟,但是没有办法解决。

2020-07-28