2011-11-03 12 views
8

Sto cercando un algoritmo per ottenere il miglior colore del testo (il più piacevole alla vista) da un dato colore di sfondo.Algoritmo per ottenere il miglior colore del testo

Qualche idea?

+6

Non andare a downvote perché è interessante e utile, ma potresti voler spiegare "il colore migliore" un po 'più chiaramente per tutti. – Widor

+0

Widor ha un ottimo punto. Si prega di riformulare per ampliare ciò che intendi per "miglior colore" (il più piacevole alla vista, il più alto contrasto, il daltonismo amichevole, qualunque cosa). – NPE

+0

"il più piacevole per gli occhi" – user954469

risposta

12

"Il colore migliore" è molto soggettivo e dipendente dal contesto. Dipende dall'effetto desiderato: se vuoi il massimo contrasto possibile, cerca colori complementari (che ti darebbero rosso su verde, giallo su blu ecc.). Se vuoi colori "simili", cerca armonie analoghe. Se vuoi decidere solo tra bianco e nero, misura la luminosità (hamstergene ha pubblicato una formula molto buona per questo).

Ovunque tu vada, il modello di colore HSV è la chiave.

Ottenere colori complementari o analoghi è banale (ad esempio hue_text = (hue_bg + 180) % 360 O hue_text = (hue_bg + 30) % 360).

È anche possibile sperimentare valori (luminosità) e saturazione per un contrasto migliore. Ad esempio, v_text = 1 - v_bg potrebbe fornire testo scuro su sfondo luminoso e viceversa (attenzione ai toni medi!). Non deve essere lineare, è anche possibile eseguire una funzione di passaggio come: if v_bg < 0.5 then v_text = 1 else v_text = 0 o if s_bg < 0.5 then s_text = 1 else s_text = 0 (vibrante su bianco).

Questi sono solo alcuni suggerimenti. In una parola: Dipende!

Google per teoria dei colori e armonie di colore. Alcuni link:

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

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

6

Non v'è meglio per tutti.

dire se è necessario assicurarsi che il testo sarà facilmente leggibile, la seguente semplice formula ha funzionato bene per me:

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

in cui la luminosità è definito come

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

(ci sono diverse definizioni per "luminosità", ho usato questo, ma penso che qualcuno avrebbe funzionato).

+0

Sono tornato a cercarlo e ricordando che qualcuno ha dato una risposta migliore, ed eccoti qui. :-) –

Problemi correlati