Coucou a tous,

Une petite question pour vous.

J'ai fais une fonction pour faire une palette de couleur d'après une image.
Voila ou je coince, j'obtiens pliens de couleurs différentes, mais quand meme très proche les une de les autres.

Comment est ce que je pourrais faire pour obtenir par example les X couleurs les plus dominantes d'une image ?

Voici ma fonction


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
function colorPalette( $img ) {
	$imgname = $img;
	$im = imagecreatefromjpeg($imgname);
	$x = imagesx($im);
	$y = imagesx($im);
 
	$start_x = 1;
	$start_y = 1;
	$palette = array();
 
	while ( $start_x <= $x && $start_y <= $y  ) {
		$color = ImageColorAt($im, $start_x, $start_y);
		$r = ($color >> 16) & 0xFF;
		$g = ($color >> 8) & 0xFF;
		$b = $color & 0xFF;
 
		$rgbtohex = dechex($color);	
 
		if( strlen( $rgbtohex ) > 2 ) {
			if( array_key_exists( $rgbtohex, $palette ) )
				$palette[$rgbtohex]++;
			else
				$palette[$rgbtohex] = 1;
		}
 
		if( $start_x == $x ) {
			$start_y++;
			$start_x = 1;	
		}
 
		$start_x++;
 
	}
 
	arsort($palette);
 
	return  $palette;
}
 
// On affiche
$colors = colorPalette( $imgname );
$format = '<div style="background-color: #%s; height:32px; width:66px;"></div>';
$res = '';
foreach ( $colors as $color => $nb) {
	$res .= sprintf( $format, $color );
}
print $res;

Si vous avez une idée....
Merci !