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<?php
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; }
// Mi paleta verde
$paleta_verde=array('0F8A49','5CCF97','87DDAD','79E633','57BE00','BCF25E');
$imageName="cuadrados2.png";
$granularity = 12; // Defino el tamaño del Pixel
//Imprimo mi Paleta de Verdes
echo "<p>Mi Paleta</p>";
echo "<table>\n";
foreach($paleta_verde as $color){
$rgb = HexToRGB($color);
echo "<tr><td style='background-color:#$color;width:2em;'> </td><td>#$color</td><td>| RGB (".$rgb['r'].' , '.$rgb['g'].' , '.$rgb['b'].')'."</td></tr>";
}
echo "</table>\n";
// Imprimo la imagen
echo '<br/><img src="'.$imageName.'"/><br/>';
echo "Size: ".$size[0].' x '.$size[1].'<br/><br/>';
// Recorro la imagen
for ($x=12;$x<$size[0];$x += $granularity)
{
for ($y=12;$y<$size[1];$y += $granularity)
{
$rango=1;
$r=(int
)floor($pixelColor["red"]/$rango)*$rango; $g=(int
)floor($pixelColor["green"]/$rango)*$rango; $b=(int
)floor($pixelColor["blue"]/$rango)*$rango;
$thisRGB = sprintf('%02X%02X%02X', $r, $g, $b); echo "Red: $r | Green: $g | Blue: $b | Posicion X: $x | Y: $y<br/>";
$colors[$thisRGB]++;
}else{
$colors[$thisRGB] = 1;
}
}
}
// RESUMEN
echo "<br/>Colores encontrados<br/>";
arsort($colors); // Ordeno los colores obtenidos de mayor a menor.
//Imprimo los colores encontrados
echo "<table>\n";
foreach($colors as $color=>$numero){
$rgb = HexToRGB($color);
echo "<tr><td>$numero</td><td style='background-color:#$color;width:2em;'> </td><td>#$color</td><td>| RGB (".$rgb['r'].' , '.$rgb['g'].' , '.$rgb['b'].')'."</td></tr>";
}
echo "</table>\n";
?>
Una ayuda??
Muchas gracias de antemano!