2011-01-13 14 views
5

voglio colore del carattere sulla mia pagina html di cambiare al nero se il colore della riga di fondo è chiaro e nero se lo sfondo è biancoC'è un modo per dire se un colore esadecimale HTML è chiaro o scuro

Sto usando jsp nella mia pagina. c'è un modo per dire qualcosa di simile

se il colore < ## 0686FF poi fontcolour = # 000000 per esempio

edit: alla ricerca di uno scriptlet o javascript

+1

Credo che si dovrebbe cercare Javascript per raggiungere questo obiettivo. –

+0

potresti tagliarlo velocemente usando l'inverso del tuo colore - così puoi essere sicuro che il testo è sempre visibile * inverted_color = valore esadecimale di FFFFFF - your_color * – Lucius

risposta

11

Questa soluzione utilizza la classe java.awt.Color per ricavare il valore di luminosità del colore e utilizzarlo per determinare quale colore di sfondo deve essere utilizzato.

modifica: Questa soluzione è diversa da alcune delle altre soluzioni perché le altre soluzioni considereranno scuri i colori per esempio. rosso primario (# FF0000). Considerando che questa soluzione, considererà il rosso primario come uno dei colori più brillanti che puoi avere. Suppongo che dipenda dalle tue preferenze. Vuoi leggere il rosso sul nero o il rosso sul bianco?

String fontColor = "#0cf356"; 

// remove hash character from string 
String rawFontColor = fontColor.substring(1,fontColor.length()); 

// convert hex string to int 
int rgb = Integer.parseInt(rawFontColor, 16); 

Color c = new Color(rgb); 

float[] hsb = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); 

float brightness = hsb[2]; 

if (brightness < 0.5) { 
    // use a bright background 
} else { 
    // use a dark background 
} 

HSB sta per tonalità, saturazione, luminosità - la luminosità è anche nota come luminosità. Con i valori della classe Color sono compresi tra 1 e 0. Ergo, 0,5 luminosità è il punto intermedio tra i colori più brillanti ei colori più scuri).

L'interazione tra tonalità, saturazione e luminosità è un po 'più complessa di rosso, blu e verde. Utilizzare this esperimento strumento con colori diversi e trovare le relazioni tra RGB e HSB

+0

Grandi opere buone. puoi dirmi cosa significa 0.5. di che colore sarebbe? – code511788465541441

+0

anche con il tuo codice la luminosità del verde (# 45A61F) risulta più chiara di lightblue (# 99CCCC) come la aggiusti? – code511788465541441

+1

Sono sicuro del verde e del blu. Ho eseguito rapidamente il programma e produce una luminosità di 0,8 per il blu e 0,65 per il verde. (Dove 1 è il più luminoso e 0 è il più scuro). Aggiungerà una modifica su cosa significa hsb e 0.5. – Dunes

10

Con il termine "colore" di solito significa 24 -colore RGB: 1 byte (8 bit) per rosso, verde, blu. Cioè, ogni canale ha valore da 0-255 o da 0x00 a 0xff in visualizzazione esadecimale.

Il colore bianco è tutti i canali: #FFFFFF, il nero è tutti i canali disattivati: # 000000. Ovviamente, il colore più chiaro significa valori più alti nei canali, il colore più scuro significa valori più bassi nei canali.

Come esattamente si sceglie l'algoritmo dipende da voi, semplice sarebbe:

//pseudo-code 
if (red + green + blue <= (0xff * 3)/2) //half-down, half-up 
    fontcolor = white; 
else 
    fontcolor = black; 

Edit: richiedente chiede ad esempio più completo, così lui/lei può avere inizio migliore, così qui è:

public static void main(String[] args) throws IOException { 

String value = 
     // new Scanner(System.in).nextLine(); //from input 
     "#112233"; //from constant 
int red = Integer.parseInt(value.substring(1, 1 + 2), 16); 
int green = Integer.parseInt(value.substring(3, 3 + 2), 16); 
int blue = Integer.parseInt(value.substring(5, 5 + 2), 16); 

System.out.println("red = " + Integer.toHexString(red) 
     + ", green = " + Integer.toHexString(green) 
     + ", blue = " + Integer.toHexString(blue)); 

if (red + green + blue <= 0xff * 3/2) 
    System.out.println("using white color #ffffff"); 
else 
    System.out.println("using black color #000000"); 

String colorBackToString = "#" + Integer.toHexString(red) + 
     Integer.toHexString(green) + 
     Integer.toHexString(blue); 
System.out.println("color was " + colorBackToString); 
} 

produce in uscita:

red = 11, green = 22, blue = 33 
using white color #ffffff 
color was #112233

E mostra la tecnica di scomposizione del colore in formato #aabbcc in canali rgb, unendoli in seguito (se necessario), ecc.

+0

questo è su una pagina web come sarà sapere cosa sia 0xff è. mi occupo di raffreddori come # 000000 – code511788465541441

+0

prova a leggere qualche tutorial su Java, jsp, è semplice codifica – peenut

+0

ok, ho aggiunto esempio con codice non pseudo :-) – peenut

3

Un approccio più naturale potrebbe utilizzare lo spazio colore HSL. È possibile utilizzare il terzo componente ("luminosità") per capire quanto è leggero un colore. Questo funzionerà per la maggior parte degli scopi.

Un sacco di descrizioni là fuori da googling. Fondamentalmente si prende la componente di colore con il valore più alto (diciamo che è rosso) e quella con il più basso (diciamo, verde). In questo caso:

L = (red + green)/(255*2.0) 

Supponendo stati estratti i colori come valori da 0 a 255. Si otterrà un valore compreso tra 0 e 1. Un colore chiaro potrebbe essere di qualsiasi colore con una leggerezza superiore ad un certo valore arbitrario (per esempio, 0.6).

+0

Oops, non ho notato che hai già menzionato HSL. – Dunes

+0

@Dunes, ah bene, ti faccio +1 per l'utilizzo dell'API 'Color'. Ero troppo pigro per cercarlo. :-) – wds

1
function isTooLightYIQ(hexcolor) 
{ 
     var r = parseInt(hexcolor.substr(0,2),16); 
     var g = parseInt(hexcolor.substr(2,2),16); 
     var b = parseInt(hexcolor.substr(4,2),16); 
     var yiq = ((r*299)+(g*587)+(b*114))/1000; 
     return yiq >= 128; 
} 

Il selettore colore utilizzato in http://www.careerbless.com/services/css/csstooltipcreator.php impianti buoni

Problemi correlati