Obtener luminosidad de un pixel

Iniciado por Skeletron, 1 Marzo 2010, 05:05 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola gente.
Estoy usando: imagecolorsforindex() para obtener los colores RGB de un pixel determinado de una imagen.
Ahora necesito tomar la LUMINOSIDAD..
Verán que en PAINT se puede ver la LUMINOSIDAD, Matiz, Saturacion, y los colores RGB de cada pixel.

Hay en PHP alguna funcion para tomar ese valor?


Gracias tios!

Skeletron

Estuve haciendo unos calculos...
Puede ser que la luminocidad sea el 94% del promedio de los 3 valores RGB??

Por ejemplo, si tenemos 50 de R, 100 de G, y 150 de B, el promedio es 100, entonces la luminocidad es 94

??

Castg!

Primero, gracias por hacerme pensar, porq este tipo de cosas me encantan! ;D

ahora, jugando con gimp descubri que, el valor mas grande de rgb, sobre 2,55 va a dar igual la luminosidad.

vamos por partes, la luminosidad es la  cercania de un color al color blanco.

entonces, si tenemos el color naranja  rgb(255,128,0), el valor mas alto del rgb es el rojo, 255. entonces, 255 / 2,55 te va a dar un resultado de 100. entonces, el naranja tiene 100 de lluminosidad.

otro ejemplo, si elegimos el marron rgb(128,65,0) otravez el valor mas alto es el rojo, entonces hacemos 128 / 2,55 y nos da 50,196078431 aproximando, 50. entonces este color tiene 50% de luminosidad. ahora, como estamos en subforo de php, te hago una funcion:

Código (php) [Seleccionar]

function luminosidad($flotaRed,$flotaGreen,$flotaBlue) {
$rgb = array($flotaRed,$flotaGreen,$flotaBlue);
sort($rgb);
$luminosidad = round((array_pop($rgb) / 2,55));
if(is_num($luminosidad)){
return $luminosidad;
}else{
return false;
}
}


un saludo grande ;)

Skeletron

Paint dice que la luminosidad del Marron, es 60 :D

Tendremos que seguir probando, porque mi tecnica del 94% del promedio, tambien es erronea


Castg!

pasa que gimp lo trata como porcentaje, y paint lo trata como entero. entonces, si queres hacerlo por entero como el paint, basta con hacer una regla de 3 simple con el resultado de mi funcion o si queres, puede ser asi:

Código (php) [Seleccionar]
function luminosidad($flotaRed = 255,$flotaGreen = 255,$flotaBlue = 255, $flotaSalida = 1) {
//$flotaSalida, si es 1, devuelve un numero como porcentaje, si es 2, devuelve el entero correspondiente a el porcentaje.
$rgb = array($flotaRed,$flotaGreen,$flotaBlue);
sort($rgb);
$luminosidad = round((array_pop($rgb) / 2,55));
if($flotaSalida=1){
return $luminosidad;
}elseif($flotaSalida=2){
return round(($luminosidad * 240 / 100));
}
}


y asi, indicando el valor "$flotaSalida" puede imprimir el porcentaje, o el valor como el paint...

un saludo grande!

Skeletron


Castg!

 :-[ :-[ denada, ya pronto va a estar la libreria CastGD! (ruido, degradado, saturacion, desaturar, etc.)