Gracias de nuevo
marlanga, lo que indicas suena muy bien pero no veo la forma de hacerlo
En el ejemplo anterior, me salian 7 colores diferentes en la imagen, cuando en verdad solo necesitaba 3 colores.
La imagen de pruebas es la siguiente, (no tengas en cuenta el fondo blanco, que para subirla online necesitaba que fuese de 150x150, cuenta que la imagen son las 6 redonditas con el fondo negro :D)
Si mi paleta fuese los 3 colores siguientes:
#2B2B2B
#50AEC0
#82E0F2
Me interesa saber el número de pixeles que hay de cada color, considerando que los que no sean esos colores, me los cuente como si lo fueran (acercandose a color más próximo de mi paleta y contandolos como tal).
Para sacar los colores de mi imagen de ejemplo, sigo un patron y cojo los pixels de las siguientes posiciones:
Posicion X: 13 | Y: 7
Red: 129 | Green: 222 | Blue: 239
Posicion X: 13 | Y: 13
Red: 43 | Green: 43 | Blue: 43
Posicion X: 25 | Y: 7
Red: 75 | Green: 160 | Blue: 174
Posicion X: 25 | Y: 13
Red: 43 | Green: 43 | Blue: 43
Posicion X: 37 | Y: 7
Red: 71 | Green: 149 | Blue: 162
Posicion X: 37 | Y: 13
Red: 43 | Green: 43 | Blue: 43
Posicion X: 49 | Y: 7
Red: 73 | Green: 160 | Blue: 174
Posicion X: 49 | Y: 13
Red: 43 | Green: 43 | Blue: 43
Posicion X: 61 | Y: 7
Red: 80 | Green: 174 | Blue: 192
Posicion X: 61 | Y: 13
Red: 43 | Green: 43 | Blue: 43
Posicion X: 73 | Y: 7
Red: 78 | Green: 176 | Blue: 193
Posicion X: 73 | Y: 13
Red: 43 | Green: 43 | Blue: 43
En total me saca 7 colores, pero el resultado que busco es, sin contar el fondo negro, imagina que solo cojes el pixel central de cada redonda (en eso no tengo dificultades), y te salen los 6 colores de verde diferente, pero en verdad solo necesitas 2 colores de verde, los dos de mi paleta.
Me debería decir que ha encontrado
2 bolas #82E0F2
4 bolas #50AEC0
Mi código
Código PHP:
Ver originalfunction colorPalette($imageFile, $numColors, $granularity = 12) {
$granularity = max(1, abs((int
)$granularity));
if( $size === false ){
return false;
}
if( !$img ){
return false;
}
echo "<br/>size0: ".$size[0].'<br/>';
echo "size1: ".$size[1].'<br/>';
for($x = 13; $x < $size[0]; $x += $granularity){ // Horizontal
for($y = 7; $y < $size[1]; $y += $granularity/2){ // Vertical
echo "Posicion X: $x | Y: $y<br/>";
$red = $rgb['red'];
$green = $rgb['green'];
$blue = $rgb['blue'];
$result = "({$result['red']}, {$result['green']}, {$result['blue']})";
$thisRGB = sprintf('%02X%02X%02X', $red, $green, $blue); echo "Red: $red | Green: $green | Blue: $blue<br/>";
$colors[$thisRGB]++;
}else{
$colors[$thisRGB] = 1;
}
}
}
}
/* PRINCIPAL */
$archivo = 'espada3.png';
echo '<img src="'.$archivo.'"/>';
$palette = colorPalette($archivo,32, 12);
echo "<table>\n";
foreach($palette as $color){
echo "<tr><td style='background-color:#$color;width:2em;'> </td><td>#$color</td></tr>\n";
}
echo "</table>\n";
Muchas gracias de antemano!!!!