我有一個用十六進制表示的顏色列表 - 我需要對它們進行排序以匹配彩虹中的顏色順序。 - 我可以硬編碼排序 - 但我覺得有一個更清晰的方法。排序(十六進制)的顏色匹配彩虹
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. Groovy排序顏色的彩虹
- 2. 方括號內的十六進制顏色匹配
- 3. 對十六進制顏色值進行排序
- 4. 使用C#對十六進制顏色進行排序#
- 5. C#彩虹文本(十六進制格式)
- 6. 轉換顏色的十六進制值
- 7. 訂購顏色的十六進制值
- 8. 十三進制顏色的十六進制圖表
- 9. 顯示十六進制顏色由SASS
- 10. Firefox十六進制顏色渲染
- 11. php str_replace十六進制顏色
- 12. 十六進制網頁顏色
- 13. 解析十六進制'0x0976b8'顏色android
- 14. rbg或十六進制選擇顏色?
- 15. 顏色十六進制計算
- 16. XHTML十六進制顏色要求?
- 17. R/Dygraphs十六進制顏色代碼
- 18. 顏色十六進制到imagefilledrectangle
- 19. 十六進制顏色字符串
- 20. 十六進制顏色範圍[java]
- 21. 創建十六進制顏色表
- 22. 十六進制顏色代碼多個#
- 23. 過濾器十六進制顏色
- 24. 十六進制顏色在Javascript
- 25. 用十六進制顏色尋找最近的PMS顏色?
- 26. Php函數十六進制或rgb顏色的顏色名稱
- 27. preg_match_all():原始ASCII十六進制匹配
- 28. 匹配十六進制字符串GAWK
- 29. 在JS中生成隨機生成的十六進制顏色的免費十六進制顏色?
- 30. 將十六進制HTML顏色轉換爲Amiga colorregister十六進制(和後面)
HTTP:/ /stackoverflow.com/questions/6208980/sorting-a-list-of-rgb-triplets-into-a-spectrum – NPE 2012-01-18 18:12:26