2011-11-03 15 views
8

Szukam algorytmu, aby uzyskać najlepszy kolor tekstu (najbardziej miłe dla oka) z danego koloru tła.Algorytm, aby uzyskać najlepszy kolor tekstu

Każdy pomysł?

+6

Nie zamierzam przegłosować, ponieważ jest interesująca i przydatna, ale lepiej wyjaśnić "najlepszy kolor" dla wszystkich. – Widor

+0

Widor ma bardzo dobry punkt. Zapoznaj się z rozszerzeniem tego, co masz na myśli przez "najlepszy kolor" (najprzyjemniejsze dla oka, najwyższy kontrast, przyjazna ślepota kolorów, cokolwiek). – NPE

+0

"najprzyjemniejsze dla oka" – user954469

Odpowiedz

12

"Najlepszy kolor" jest bardzo subiektywny i zależny od kontekstu. To zależy od tego, jaki efekt chcesz: Jeśli chcesz uzyskać najwyższy możliwy kontrast, szukaj uzupełniających się kolorów (które dają czerwone na zielonym, żółtym na niebieskim itd.). Jeśli chcesz kolorów, które są "podobne", poszukaj analogicznych harmonii. Jeśli chcesz zdecydować tylko w czerni i bieli, zmierz jasność (hamstergene zamieścił na to bardzo dobrą formułę).

Gdziekolwiek jesteś, kluczem jest model kolorów HSV.

Uzyskiwanie uzupełniających lub analogicznych kolorów jest banalne (np. hue_text = (hue_bg + 180) % 360 OR hue_text = (hue_bg + 30) % 360).

Można również eksperymentować z wartością (jasność) i nasyceniem dla lepszego kontrastu. Na przykład v_text = 1 - v_bg może dać ciemny tekst na jasnym tle i na odwrót (uważaj na tony średnie!). Nie musi być liniowy - możesz również przejść do funkcji krokowej, takiej jak: if v_bg < 0.5 then v_text = 1 else v_text = 0 lub if s_bg < 0.5 then s_text = 1 else s_text = 0 (żywa na bladym).

To tylko kilka wskazówek. Jednym słowem: To zależy!

Google dla teorii kolorów i harmonii kolorów. Niektóre linki:

http://www.tigercolor.com/color-lab/color-theory/color-harmonies.htm

http://www.colormatters.com/color-and-design/basic-color-theory

6

Nie ma najlepsze dla wszystkich.

powiedzieć, czy trzeba się upewnić, tekst będzie czytelny, następujące prosta formuła działa dobrze dla mnie:

textColor = brightness(backColor) > 0.5 ? black : white; 

gdzie jasność jest zdefiniowany jako

brightness(R,G,B) = 0.299*R + 0.587*G + 0.114*B 

(istnieją różne definicje dla "jasności", użyłem tego, ale myślę, że każdy mógłby działać).

+0

Wróciłem, szukając go i pamiętając, że ktoś dał lepszą odpowiedź, a oto jesteś. :-) –