Invertir o cambiar a blanco y negro el color HTML del texto según el background o color de fondo en PHP
07/03/2021
4041
Todo sobre PHP
Hay veces que tenemos colores dinámicos de fondo y queremos que el color del texto se invierta para que este sea legible.
Lo vamos a conseguir con dos funciones en php (Ni que decir tiene que estas funciones son válidas para cambiar o invertir tanto en el color del texto, como el color de fondo):
Dado un color de fondo, invertir el color del texto.
Funcion php para invertir el color del texto, dado un color de fondo, pasando un valor hexadecimal.
function color_inverse($color){
$color = str_replace('#', '', $color);
if (strlen($color) != 6){ return '000000'; }
$rgb = '';
for ($x=0;$x<3;$x++){
$c = 255 - hexdec(substr($color,(2*$x),2));
$c = ($c < 0) ? 0 : dechex($c);
$rgb .= (strlen($c) < 2) ? '0'.$c : $c;
}
return '#'.$rgb;
}
// Azul -> Amarillo
echo color_inverse('#0000FF');
// --> #FFFF00
Dado un color de fondo, poner texto en blanco o negro.
Funcion php para cambiar el color del texto en blanco o negro, dado un color de fondo, pasando un valor hexadecimal.
function getContrastColor($hexColor)
{
// hexColor RGB
$R1 = hexdec(substr($hexColor, 1, 2));
$G1 = hexdec(substr($hexColor, 3, 2));
$B1 = hexdec(substr($hexColor, 5, 2));
// Negro RGB
$blackColor = "#000000";
$R2BlackColor = hexdec(substr($blackColor, 1, 2));
$G2BlackColor = hexdec(substr($blackColor, 3, 2));
$B2BlackColor = hexdec(substr($blackColor, 5, 2));
// Calculo de relación de contraste
$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));
}
//Si el contraste es superior a 5, devuelve el color negro.
if ($contrastRatio > 5) {
return '#000000';
} else {
// Si no, devuelve el color blanco..
return '#FFFFFF';
}
}
// Retorna '#FFFFFF'
echo getContrastColor('#FF0000');
Tags
Daniela B.