0/5 (5 avis)
Snippet vu 5 519 fois - Téléchargée 17 fois
<?php /* auteur: Benjamin Poly contact: benjamin.poly88@gmail.com */ function getFontColor($b_color) { $white = '#FFFFFF'; //couleur blanc $black = '#000000'; //couleur noir $seuilCouleur = 165;//seuil qui détermine l'intensité de couleur $opposite_red = '#FFFF00';//couleur de police pour fond rouge $opposite_yellow = '#000CFF';//couleur de police pour fond jaune $opposite_green = '#0000FF';//couleur de police pour fond vert $opposite_clear_blue = '#1900FF';//couleur de police pour fond bleu clair $opposite_dark_blue = '#EEFF00';//couleur de police pour fond bleu foncé $opposite_purple = '#FFFF00';//couleur de police pour fond violet $tmp = 0; $r = hexdec(substr($b_color, 1, 2)); $g = hexdec(substr($b_color, 3, 2)); $b = hexdec(substr($b_color, 5, 2)); $ecart1 = $r - $g; $ecart2 = $g - $b; $ecart3 = $r - $b; $limite_ecart = 120; $total = $r + $g + $b; //on peut determiner si une couleur est essentiellement composée de noir ou blanc en regardant si l'écart entre les nombres est faible if(abs($ecart1) < $limite_ecart && abs($ecart2) < $limite_ecart && abs($ecart3) < $limite_ecart) { $limite = 420;//seuil qui détermine le niveau de noir ou blanc if($total < $limite) { $f_color = $white; } else { $f_color = $black; } } else { //si une couleur domine plus que le noir et blanc $color = array(); $color[0] = $r; $color[1] = $g; $color[2] = $b; foreach ($color as $val) { if ($val > $seuilCouleur) { $tmp++; } else { $f_color = $white; } } //si la couleur rouge, vert ou bleu foncé domine if ($tmp == 1) { if ($r > $seuilCouleur) {//on determine si la couleur est rouge $f_color = $opposite_red; } if ($g > $seuilCouleur) {//on determine si la couleur est verte $f_color = $opposite_green; } if ($b > $seuilCouleur) {//on determine si la couleur est bleu foncée $f_color = $opposite_dark_blue; } } //si la couleur jaune, bleu clair ou violet domine if ($tmp == 2) { if ($r > $seuilCouleur && $g > $seuilCouleur) {//on determine si la couleur est jaune $f_color = $opposite_yellow; } if ($g > $seuilCouleur && $b > $seuilCouleur) {//on determine si la couleur est bleu claire $f_color = $opposite_clear_blue; } if ($r > $seuilCouleur && $b > $seuilCouleur) {//on determine si la couleur est violet $f_color = $opposite_purple; } } } return $f_color; //on retourne la couleur de police appropriée } //cette fonction génère une couleur aléatoire, elle est utile seulement pour tester getFontColor() function genRandomColor() { $color = dechex(mt_rand(0,16777215)); $color = str_pad($color,6,'0'); return '#'.$color; } //cette partie sert à tester la fonction getFontColor() en générant plusieurs couleurs de fond aléatoires avec la couleur de police qui leur est associée $cases = 20;//nombre de cases de couleur for ($i=0;$i<10;$i++) { for ($j=0; $j<$cases; $j++) { $b_color = genRandomColor(); echo '<div style="background-color:'.$b_color.'; color:'.getFontColor($b_color).';padding:10px;width:120px;diplay:inline;float:left;">abcdefghijkl</div>'; } } ?>
9 déc. 2012 à 14:15
Je ne comprend pas pourquoi tu as utilisé des String plutot que des valeurs numérique pour ensuite faire un calcul à la place de valeurs spécifique.
Sinon, petite optimisation :
Ligne 43 :
$color = array($r, $g, $b);
9 juil. 2012 à 14:41
28 juin 2012 à 15:44
18 juin 2012 à 12:27
12 juin 2012 à 11:12
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.