Foros del Web » Programando para Internet » PHP »

Función para (oscurezer/aclarar) un color rgb.

Estas en el tema de Función para (oscurezer/aclarar) un color rgb. en el foro de PHP en Foros del Web. Buenas, soy nuevo, pero lei muchos posts cuando tuve problemas. Estoy haciendo un fotolog multiusuario. Y ahora que esta quasi terminado, me queda un pequeño ...
  #1 (permalink)  
Antiguo 03/06/2008, 19:12
 
Fecha de Ingreso: junio-2008
Mensajes: 23
Antigüedad: 16 años, 5 meses
Puntos: 0
Función para (oscurezer/aclarar) un color rgb.

Buenas, soy nuevo, pero lei muchos posts cuando tuve problemas.

Estoy haciendo un fotolog multiusuario. Y ahora que esta quasi terminado, me queda un pequeño punto que no consigo averiguar como hacerlo.

La cuestion es que el usuario puede elegir (color de fondo, de texto y de los links) .Luego en su pagina fotoblog personal se aplicaran sus colores que se guardan en un bd de mysql.
Pues entre comentario y comentario del fotolog, hay una linia que los separa. Esa linia necesito que coja el color del fondo del usuario pero que le aplique una funcion que transforme el color del fondo en un color más claro o más oscuro dependiendo del color.

Transformaciones tipo estas:
#FF0000 > #FF2222
#FFFFFF > #DDDDDD
#000000 > #222222
#7FFFFF > #5DDDDD
#0000FF > #222200

Si os fijais depende del color, para obtener el siguente sólo suma o resta unos doses (2) hexadecimales.
Eso lo comprobe mirando el codigo fuente de www.fotolog.com donde miraba que color daba como resultado de la linia entre comentarios, cuando cambiaba el color de fondo.

Quiero aplicar algo similar a mi fotolog, que la linia entre comentarios sea del mismo color que el fondo pero con más o menos intensidad.

Alguna solución :S

ejemplos: en qualquier fotolog.com o metroflog.com salen si entrais en un usuario qualquiera.


MUCHAS gracias de antemano

Última edición por reverendo_chila; 04/06/2008 a las 04:05
  #2 (permalink)  
Antiguo 03/06/2008, 23:40
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Respuesta: Variar colores rgb más o menos claros

espero este topic te sirva habria que adaptarlo ;) a tus necesidades

http://www.forosdelweb.com/f4/todo-s...olores-124097/
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 04/06/2008, 04:03
 
Fecha de Ingreso: junio-2008
Mensajes: 23
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Variar colores rgb más o menos claros

no es eso lo que busco xd busco convertir un color a un color del mismo color pero cón más blanco o más negro segun el color (aclarar o oscurezer el color )

Prové un mètodo pero no funciona con todos los colores, que era invertir el color.
ejemplo:

normal=FF0000
invertido=00FFFF

darle un 20 por ciento de aclarecer a cada color r, g, b. y luego restar-lo del invertido anterior:
00-00/5=00
FF-FF/5=CC
FF-FF/5=CC

luego invertir el número resultado: 00CCCC
QUE DA:
FF3333.




buf nose como hacerlo pero :s algo tiene que haber porque muchas webs lo llevan.
  #4 (permalink)  
Antiguo 04/06/2008, 09:08
 
Fecha de Ingreso: junio-2008
Mensajes: 23
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Función para (oscurezer/aclarar) un color rgb.

que pasa aqui se me cae mi post :( lo que ahora encontre es una función que retorna si un color es claro o oscuro, y segun esto luego peudo variar el color blanco o negro de un color, darle mas negro si es un color claro o darle color blanco si es un color oscuro.

Si o si?
contestad algo.. que la mayoria de los posts que vi son chorradas y repetidos y preguntas que ya se han dicho. El mio no..venga saludoss
  #5 (permalink)  
Antiguo 04/06/2008, 14:26
 
Fecha de Ingreso: junio-2008
Mensajes: 23
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Función para (oscurezer/aclarar) un color rgb.

Bien ya que nadie contesta aporto un granito de arena, lo consegui en javascript y lo pase a php y lo puse en modo funcion. Si devuelve oscurezer, quiere decir que el color lo tendres que oscurezer, si devuelve aclarar, significa que debermos luego aclarar el color.

Ahora me faltan las funciones aclarar oscurezer, alguna idea?

Código PHP:
<?
//$color en rgb hexadecimal tip #FF0203
function obtener_claridad($color){
    
//voy a extraer las tres partes del color
    
$rojo substr($color,1,3);
    
$verde substr($color,3,5);
    
$azul substr($color,5,7);
    
    
//voy a convertir a enteros los string, que tengo en hexadecimal
    
$introjo hexdec($rojo);
    
$intverde =hexdec($verde);
    
$intazul hexdec($azul);
    
    
//ahora sumo los valores
    
$oscuridad $introjo $intverde $intazul;
    
    
//si el valor oscuridad es menor que ((255 + 255 + 255) / 2) es que es un color más oscuro
    //si es oscuro, el color del texto será blanco
    
if ($oscuridad<(255+255+255)/2)){
       return 
"aclarar";
       }
    else {
       return 
"oscurecer";
    }
}
  #6 (permalink)  
Antiguo 17/09/2009, 13:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 1
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Función para (oscurezer/aclarar) un color rgb.

Aquí muestro una posible función en php para oscurecer un color, basandome en lo que tú mencionas más arriba. He dejado el segundo parámetro de la función para que puedas decidir cuanto quieres oscurecer el color. La llamada a la función sería así:

$uncolor = "#FF0000";
$mas_oscuro = oscurece_color($uncolor, 32); //Aquí la función devuelve #DF0000

<?
function oscurece_color($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;
}
?>

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:45.