$channel ) { $c = $channel / 255; $c = $c <= 0.03928 ? $c / 12.92 : ( ( $c + 0.055 ) / 1.055 ) ** 2.4; $sum += $weights[ $i ] * $c; } return $sum; } public static function contrast( string $a, string $b ): float { $la = self::luminance( $a ); $lb = self::luminance( $b ); return ( max( $la, $lb ) + 0.05 ) / ( min( $la, $lb ) + 0.05 ); } /** * White or ink text, whichever reads better on $background. */ public static function readable_on( string $background ): string { return self::contrast( self::WHITE, $background ) >= self::contrast( self::INK, $background ) ? self::WHITE : self::INK; } }