我有一个用十六进制表示的颜色列表 - 我需要对它们进行排序以匹配彩虹中的颜色顺序。 - 我可以硬编码排序 - 但我觉得有一个更清晰的方法。排序(十六进制)的颜色匹配彩虹
5
A
回答
12
这里是一个函数,考虑在十六进制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元组进行排序,可以确保没有色相(即灰度)的颜色排列在一个一致的位置,并且具有相同色调但不同饱和度/值的颜色按照其更一致的顺序排列,饱和/有价值的同行。
如果颜色因饱和度(强度)或数值(亮度)而变化很大,您仍然会感到混乱,但没有办法解决这个问题。
5
查找HSV颜色表示:https://en.wikipedia.org/wiki/HSL_and_HSV
通过检测的色度第一排序,你可以通过感知的颜色进行排序。您可以在RGB和HSV之间自由转换。
1
最简单的事情就是按照hue的顺序对它们进行排序。
1
修改kindall答案允许六角短颜色规格(如#f0f
,#005
):
import colorsys
def get_hsv(hexrgb):
hexrgb = hexrgb.lstrip("#") # in case you have Web color specs
lh = len(hexrgb)
# Allow short and long hex codes
r, g, b = (int(hexrgb[i:i+lh/3], 16)/255.0 for i in xrange(0, lh, lh/3))
return colorsys.rgb_to_hsv(r, g, b)
现在你可以使用函数来排序色调名单:
color_list = ["#005", "#000500", "#500000"]
color_list.sort(key=get_hsv)
print color_list
>> ['#500000', '#000500', '#005']
相关问题
- 1. 方括号内的十六进制颜色匹配
- 2. C#彩虹文本(十六进制格式)
- 3. 转换颜色的十六进制值
- 4. 过滤器十六进制颜色
- 5. 解析十六进制'0x0976b8'颜色android
- 6. 颜色十六进制到imagefilledrectangle
- 7. rbg或十六进制选择颜色?
- 8. 十六进制网页颜色
- 9. R/Dygraphs十六进制颜色代码
- 10. 颜色十六进制计算
- 11. 用十六进制颜色寻找最近的PMS颜色?
- 12. 在JS中生成随机生成的十六进制颜色的免费十六进制颜色?
- 13. 匹配十六进制字符串GAWK
- 14. UTF8十六进制代码点到十进制不匹配
- 15. 将十六进制颜色代码转换为颜色名称
- 16. 转换UINT颜色ARGB十六进制颜色KML
- 17. 从十六进制颜色代码中找到颜色名称
- 18. 如何十六进制颜色转换为RGB颜色(24位)
- 19. 十六进制颜色代码瓶通配符过滤器
- 20. 用于将十六进制解析为彩色族的算法
- 21. 十六进制值的字符串格式为十六进制数字排序
- 22. 更改彩虹虫的颜色
- 23. matplotlib:匹配传奇色彩patchCollection颜色
- 24. 在java中的十六进制转义序列匹配
- 25. 以十六进制格式提取matplotlib色彩图
- 26. Wpf/Silverlight:如何将十六进制值转换为彩色?
- 27. 如何绘制十六进制代码颜色的矢量
- 28. 什么十六进制颜色代码是“Google Plus红色”?
- 29. 将十进制转换为十六进制和十六进制
- 30. 随机生成的十六进制颜色的树枝
HTTP:/ /stackoverflow.com/questions/6208980/sorting-a-list-of-rgb-triplets-into-a-spectrum – NPE 2012-01-18 18:12:26