Con lo que sigue podés obtener la cantidad de colores. Como verás, son demasiados para ponerlos en bucle y hacer algo. Si lo que pretendés es generar una paleta de colores de la imagen, lo que tenés que hacer es, primero ordenar los colores y luego, con una función de comparación, excluir los que son similares con una variable de tolerancia. En realidad, dicho así suena complejo pero es bastante sencillo, como podrás ver acá (aunque sea flash te servirá de guía ya que bitMapData e imageData son muy semejantes):
http://blog.soulwire.co.uk/flash/act...colour-palette
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script type="text/javascript">
function _(x){return document.getElementById(x);}
onload=function(){
_('c').width=350;
_('c').height=379;
var ctx=_('c').getContext('2d');
ctx.drawImage(_('im'),0,0);
var data=ctx.getImageData(0,0,_('c').width,_('c').height).data,
length=data.length,
colores={},
i=0,
rgb;
for(;i<length;i+=4){
rgb = "rgb("+data[i+0]+","+data[i+1]+","+data[i+2]+")";
(!colores[rgb]) ? colores[rgb] = 1 : colores[rgb]++;
}
var count=0;
for(rgb in colores){
++count;
}
_('log').innerHTML=count;
}
</script>
</head>
<body>
<img id="im" src="colores-planos.jpg" />
<canvas id="c"></canvas>
<div id="log"></div>
</body>
</html>