Wenn man eine Anwendung schreibt, wo der Benutzer zwei Farben auswählen muß, z.B. eine Vorder- und eine Hintergrundfarbe, dann kann es von Interesse sein, dass die gewählte Farbkombination auch gut lesbar ist.
Inspiriert von einem in Javascript geschriebenen Colorpicker (leider kenne ich den Autor nicht) habe ich dazu eine PHP-Klasse geschrieben, welche eine statische Methode implementiert um genau diese Lesbarkeit zu überprüfen. Die Methode erwartet die beiden Farben als RGB-Wert in 6 Zeichen hexadezimal und liefert ein boolsches Ergebnis. Optional kann als dritter Parameter ein Schwellwert angegeben werden um das Ergebnis gegebenenfalls an den persönlichen Geschmack anzupassen.
class ColorDistance { /** * Wandle einen RGB-Wert in ein Arrray of Integer um * @param string $color pointer to rgb string */ private static function convert( &$color ) { array_walk( $color = str_split( $color, 2 ), create_function( '&$v', '$v = hexdec( $v );' ) ); } /** * Überprüfe den Farbabstand von zwei RGB-Werten * @param string $color1 * @param string $color2 * @param integer $delta Schwellwert gibt an, ab wann die Kombination nicht mehr lesbar ist * @return boolean */ public static function check( $color1, $color2, $delta = 190 ) { self::convert( $color1 ); self::convert( $color2 ); $n = 0; for( $k=0; $k< =2; $k++ ) { $n += pow( $color1[ $k ] - $color2[ $k ], 2 ); } return( sqrt( $n ) > $delta ); } } /* $color1 = '008FD4'; $color2 = '00ADEF'; var_dump( ColorDistance::check( $color1, $color2 ) ); */ |