你可以做到這一點的一種方法就是找到「最接近」的顏色。假設我們有一組顏色,它不必覆蓋所有16777216可能的rgb值,它甚至不需要在rgb中,但爲了簡單起見,它可能看起來像這樣:
colors = {'red': (255,0,0),
'green': (0,255,0),
'blue': (0,0,255),
'yellow': (255,255,0),
'orange': (255,127,0),
'white': (255,255,255),
'black': (0,0,0),
'gray': (127,127,127),
'pink': (255,127,127),
'purple': (127,0,255),}
讓我們定義一個機制,通過「最接近」的顏色告訴我們我們真的是什麼意思。在這種情況下,我會使用一個簡單的笛卡爾距離,但任何能比較兩種顏色的東西都會有相似之處。
def distance(left, right):
return sum((l-r)**2 for l, r in zip(left, right))**0.5
class NearestColorKey(object):
def __init__(self, goal):
self.goal = goal
def __call__(self, item):
return distance(self.goal, item[1])
這實際上就是我們所需要的。我們可以使用內置的min()
(或最大,如果你的相似功能進行更多類似的顏色返回值越高)
>>> min(colors.items(), key=NearestColorKey((10,10,100)))
('black', (0, 0, 0))
>>> min(colors.items(), key=NearestColorKey((10,10,200)))
('blue', (0, 0, 255))
>>> min(colors.items(), key=NearestColorKey((100,10,200)))
('purple', (127, 0, 255))
>>>
我這個標記基於Python你的示例代碼。請在將來使用語言/平臺標記,以便人們可以提供相關答案。 '[顏色]'本身可能適用於*數量龐大的語言,並且不足以確定問題的背景。 – eldarerathis
我不在乎python。因爲現在我什麼也找不到,如果我能找到一個可以做到的圖書館的鏈接,那麼這將是有價值的。 – joar