Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Skeletron en 1 Marzo 2010, 05:05 am



Título: Obtener luminosidad de un pixel
Publicado por: Skeletron en 1 Marzo 2010, 05:05 am
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!


Título: Re: Obtener luminosidad de un pixel
Publicado por: Skeletron en 1 Marzo 2010, 05:13 am
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

??


Título: Re: Obtener luminosidad de un pixel
Publicado por: Castg! en 1 Marzo 2010, 05:47 am
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
  1. function luminosidad($flotaRed,$flotaGreen,$flotaBlue) {
  2. $rgb = array($flotaRed,$flotaGreen,$flotaBlue);
  3. sort($rgb);
  4. $luminosidad = round((array_pop($rgb) / 2,55));
  5. if(is_num($luminosidad)){
  6. return $luminosidad;
  7. }else{
  8. return false;
  9. }
  10. }
  11.  

un saludo grande ;)


Título: Re: Obtener luminosidad de un pixel
Publicado por: Skeletron en 1 Marzo 2010, 06:29 am
Paint dice que la luminosidad del Marron, es 60 :D

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


Título: Re: Obtener luminosidad de un pixel
Publicado por: Castg! en 1 Marzo 2010, 15:22 pm
pero probaste mi marron?
ahora pruebo en paint


Título: Re: Obtener luminosidad de un pixel
Publicado por: Castg! en 1 Marzo 2010, 16:50 pm
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
  1. function luminosidad($flotaRed = 255,$flotaGreen = 255,$flotaBlue = 255, $flotaSalida = 1) {
  2. //$flotaSalida, si es 1, devuelve un numero como porcentaje, si es 2, devuelve el entero correspondiente a el porcentaje.
  3. $rgb = array($flotaRed,$flotaGreen,$flotaBlue);
  4. sort($rgb);
  5. $luminosidad = round((array_pop($rgb) / 2,55));
  6. if($flotaSalida=1){
  7. return $luminosidad;
  8. }elseif($flotaSalida=2){
  9. return round(($luminosidad * 240 / 100));
  10. }
  11. }

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

un saludo grande!


Título: Re: Obtener luminosidad de un pixel
Publicado por: Skeletron en 1 Marzo 2010, 19:43 pm
Grande genio!


Título: Re: Obtener luminosidad de un pixel
Publicado por: Castg! en 1 Marzo 2010, 20:04 pm
 :-[ :-[ denada, ya pronto va a estar la libreria CastGD! (ruido, degradado, saturacion, desaturar, etc.)