Ich denke, die beste Art und Weise der Luminosity Contrast
Algorithmus ist:
ADVISE: Die nächsten Funktionen gut funktioniert die meiste Zeit, aber manchmal gibt es Farben, in denen es nicht funktioniert richtig.
public function getContrastColor($hexColor) {
//////////// hexColor RGB
$R1 = hexdec(substr($hexColor, 0, 2));
$G1 = hexdec(substr($hexColor, 2, 2));
$B1 = hexdec(substr($hexColor, 4, 2));
//////////// Black RGB
$blackColor = "#000000";
$R2BlackColor = hexdec(substr($blackColor, 0, 2));
$G2BlackColor = hexdec(substr($blackColor, 2, 2));
$B2BlackColor = hexdec(substr($blackColor, 4, 2));
//////////// Calc contrast ratio
$L1 = 0.2126 * pow($R1/255, 2.2) +
0.7152 * pow($G1/255, 2.2) +
0.0722 * pow($B1/255, 2.2);
$L2 = 0.2126 * pow($R2BlackColor/255, 2.2) +
0.7152 * pow($G2BlackColor/255, 2.2) +
0.0722 * pow($B2BlackColor/255, 2.2);
$contrastRatio = 0;
if ($L1 > $L2) {
$contrastRatio = (int)(($L1 + 0.05)/($L2 + 0.05));
} else {
$contrastRatio = (int)(($L2 + 0.05)/($L1 + 0.05));
}
//////////// If contrast is more than 5, return black color
if ($contrastRatio > 5) {
return 'black';
} else { //////////// if not, return white color.
return 'white';
}
}
Einige Ergebnisse:
HINWEIS:Die Schriftfarbe von der vorherigen Funktion bestimmt wird. Die Zahl in Klammern ist das Kontrastverhältnis.
Ein weiteres simpliest und weniger präziseYIQ
genannt (weil es den RGB-Farbraum in YIQ umwandelt):
public function getContrastColor($hexcolor) {
$r = hexdec(substr($hexcolor, 0, 2));
$g = hexdec(substr($hexcolor, 2, 2));
$b = hexdec(substr($hexcolor, 4, 2));
$yiq = (($r * 299) + ($g * 587) + ($b * 114))/1000;
return ($yiq >= 128) ? 'black' : 'white';
}
+1 Berechnung der Luminanz oder die Helligkeit der Farbe ist der Mittelung weit überlegen die RGB-Werte. # FF0000 ist leuchtend rot, keine dunkle Farbe, die der Durchschnitt von 85 Sie glauben lässt. Im HSB-System (0-100% Skala für B) erhalten Sie B = 100 für helles Rot. Im Lab-System erhalten Sie nur 54, wahrscheinlich nützlicher, da es über dem 50% -Punkt liegt, was bedeutet, dass Sie Schwarz dagegen verwenden sollten, nicht Weiß. –
Das ist ein großartiger Fund! – Wilco