Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/12/2013, 06:19
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Problema con paleta de colores PHP

Os dejo el código actualizado.

Tengo definida una paleta de verdes y cuando analizo la siguiente imagen de cuadrados soy capaz de contar cuantos cuadrados hay de cada color.

Hasta aquí bien.

Pero quiero dar uso a mi paleta de verdes.
Me gustaría ser capaz de saber a qué verde se acerca más, el verde de la imagen de cuadrados.

No encuentro una forma de seleccionar el verde de mi paleta de colores que se acerca más al verde encontrado en la imagen.



Código PHP:
Ver original
  1. <?php
  2.  
  3. function HexToRGB($hex) { $hex = str_replace("#", "", $hex); $color = array(); if(strlen($hex)==3) { $color['r'] = hexdec(substr($hex, 0, 1).substr($hex, 0, 1)); $color['g'] = hexdec(substr($hex, 1, 1).substr($hex, 1, 1)); $color['b'] = hexdec(substr($hex, 2, 1).substr($hex, 2, 1)); }elseif(strlen($hex)==6){ $color['r'] = hexdec(substr($hex, 0, 2)); $color['g'] = hexdec(substr($hex, 2, 2)); $color['b'] = hexdec(substr($hex, 4, 2)); } return $color; }
  4.  
  5. // Mi paleta verde
  6. $paleta_verde=array('0F8A49','5CCF97','87DDAD','79E633','57BE00','BCF25E');
  7.  
  8. $imageName="cuadrados2.png";
  9. $size  = getimagesize($imageName);
  10. $img = imagecreatefrompng($imageName);
  11. $colors = array();
  12. $granularity = 12; // Defino el tamaño del Pixel
  13.  
  14. //Imprimo mi Paleta de Verdes
  15. echo "<p>Mi Paleta</p>";
  16. echo "<table>\n";
  17. foreach($paleta_verde as $color){
  18.     $rgb = HexToRGB($color);
  19.     echo "<tr><td style='background-color:#$color;width:2em;'>&nbsp;</td><td>#$color</td><td>| RGB (".$rgb['r'].' , '.$rgb['g'].' , '.$rgb['b'].')'."</td></tr>";
  20. }
  21. echo "</table>\n";
  22.  
  23. // Imprimo la imagen
  24. echo '<br/><img src="'.$imageName.'"/><br/>';
  25.  echo "Size: ".$size[0].' x '.$size[1].'<br/><br/>';
  26. // Recorro la imagen
  27.  
  28. for ($x=12;$x<$size[0];$x += $granularity)
  29. {
  30.     for ($y=12;$y<$size[1];$y += $granularity)
  31.     {
  32.         $pixel = imagecolorat($img, $x, $y);
  33.         $pixelColor = imagecolorsforindex($img, $pixel);
  34.  
  35.         $rango=1;
  36.         $r=(int)floor($pixelColor["red"]/$rango)*$rango;
  37.         $g=(int)floor($pixelColor["green"]/$rango)*$rango;
  38.         $b=(int)floor($pixelColor["blue"]/$rango)*$rango;
  39.        
  40.         $index=imagecolorexact($img,$r,$g,$b);
  41.        
  42.         $thisRGB = sprintf('%02X%02X%02X', $r, $g, $b);
  43.         echo "Red: $r | Green: $g | Blue: $b | Posicion X: $x | Y: $y<br/>";
  44.  
  45.         if(array_key_exists($thisRGB, $colors)){
  46.             $colors[$thisRGB]++;
  47.         }else{
  48.             $colors[$thisRGB] = 1;
  49.         }
  50.     }
  51. }
  52.  
  53. // RESUMEN
  54.  
  55. echo "<br/>Colores encontrados<br/>";
  56. arsort($colors); // Ordeno los colores obtenidos de mayor a menor.
  57.  
  58. //Imprimo los colores encontrados
  59. echo "<table>\n";
  60. foreach($colors as $color=>$numero){
  61.     $rgb = HexToRGB($color);
  62.     echo "<tr><td>$numero</td><td style='background-color:#$color;width:2em;'>&nbsp;</td><td>#$color</td><td>| RGB (".$rgb['r'].' , '.$rgb['g'].' , '.$rgb['b'].')'."</td></tr>";
  63. }
  64. echo "</table>\n";
  65.  
  66. ?>

Una ayuda??

Muchas gracias de antemano!