La función en PHP sería la siguiente:
function oscurecerColor($color, $cant){ //voy a extraer las tres partes del color $rojo = substr($color,1,2); $verd = substr($color,3,2); $azul = substr($color,5,2); //voy a convertir a enteros los string, que tengo en hexadecimal $introjo = hexdec($rojo); $intverd = hexdec($verd); $intazul = hexdec($azul); //ahora verifico que no quede como negativo y resto if($introjo-$cant>=0) $introjo = $introjo-$cant; if($intverd-$cant>=0) $intverd = $intverd-$cant; if($intazul-$cant>=0) $intazul = $intazul-$cant; //voy a convertir a hexadecimal, lo que tengo en enteros $rojo = dechex($introjo); $verd = dechex($intverd); $azul = dechex($intazul); //voy a validar que los string hexadecimales tengan dos caracteres if(strlen($rojo)<2) $rojo = "0".$rojo; if(strlen($verd)<2) $verd = "0".$verd; if(strlen($azul)<2) $azul = "0".$azul; //voy a construir el color hexadecimal $oscuridad = "#".$rojo.$verd.$azul; //la función devuelve el valor del color hexadecimal resultante return $oscuridad; }Y su equivalente en Javascript
function oscurecerColor(color, cant){ //voy a extraer las tres partes del color var rojo = color.substr(1,2); var verd = color.substr(3,2); var azul = color.substr(5,2); //voy a convertir a enteros los string, que tengo en hexadecimal var introjo = parseInt(rojo,16); var intverd = parseInt(verd,16); var intazul = parseInt(azul,16); //ahora verifico que no quede como negativo y resto if (introjo-cant>=0) introjo = introjo-cant; if (intverd-cant>=0) intverd = intverd-cant; if (intazul-cant>=0) intazul = intazul-cant; //voy a convertir a hexadecimal, lo que tengo en enteros rojo = introjo.toString(16); verd = intverd.toString(16); azul = intazul.toString(16); //voy a validar que los string hexadecimales tengan dos caracteres if (rojo.length<2) rojo = "0"+rojo; if (verd.length<2) verd = "0"+verd; if (azul.length<2) azul = "0"+azul; //voy a construir el color hexadecimal var oscuridad = "#"+rojo+verd+azul; //la función devuelve el valor del color hexadecimal resultante return oscuridad; }
De lujo! Justo lo que estaba buscando.
ResponderEliminarMuchas gracias.
Esta bien pero si en vez de restar la variable cant la sumas conseguirias aclarar el color y la función sería completa. De todas formas gracias
ResponderEliminara ver que os parece:
ResponderEliminarfunction aclaroColor(numero, cuanto){
var res = new Array();
for(i = 0; i < 3; i++){
res[i] = parseInt("0x" + numero.substr(2*i+1, 2)); //extraigo los valores y los paso a enteros
if (res[i] + cuanto <= 255) res[i] = res[i]+cuanto; else res[i] = 255; //sumo a todos los componentes de color siempre que sea menos de 255
res[i] = res[i].toString(16) //convierto a Hexadecimal
if (res[i].length<2) res[i] = "0"+res[i]; //cero a la izquierda si es necesario
}
nuevoColor= '#'+res[0]+res[1]+res[2];
console.log( 'ini ' + numero + ' cambiado ' + nuevoColor);
return nuevoColor;
}