Skrypt wylicza ilość procentową kolorów, przerób sobie go do własnych potrzeb...
<?php
function rgb2hsl($r, $g, $b) {
$r /= 255;
$g /= 255;
$b /= 255;
$delta = $max-$min;
$l = ($max+$min)/2;
if ($delta==0) {
$h = 0;
$s = 0;
} else {
if ($l<0.5) $s = $delta/($max+$min);
else $s = $delta/(2-$max-$min);
$dr = (($max-$r)/6 + $delta/2)/$delta;
$dg = (($max-$g)/6 + $delta/2)/$delta;
$db = (($max-$b)/6 + $delta/2)/$delta;
if ($r==$max) $h = $db-$dg;
else if ($g==$max) $h = 1/3+$dr-$db;
else if ($b==$max) $h = 2/3+$dg-$dr;
if ($h<0) $h +=1;
if ($h>1) $h -=1;
}
}
$plik = "obrazek.jpg"; // obrazek
$im = imagecreatefromjpeg($plik);
$szerokosc = imagesx($im);
$wysokosc = imagesy($im);
for ($x=0;$x<$szerokosc;$x++) {
for ($y=0;$y<$wysokosc;$y++) {
$c = imagecolorsforindex($im, imagecolorat($im, $x, $y));
list($h, $s, $l) = rgb2hsl($c['red'], $c['green'], $c['blue']);
if ($h>=0 and $h<=20) $czerwony++;
if ($h>20 and $h<=45) $pomaranczowy++;
if ($h>45 and $h<=60) $zolty++;
if ($h>60 and $h<=160) $zielony++;
if ($h>160 and $h<=190) $turkusowy++;
if ($h>190 and $h<265) $niebieski++;
if ($h>265 and $h<335) $rozowy++;
if ($h>335) $czerwony++;
if ($c['red']+ $c['green']+ $c['blue']<30) $czarny++;
if ($c['red']+ $c['green']+ $c['blue']>235*3) $bialy++;
}
}
$pikseli = $szerokosc*$wysokosc;
echo "czerwony ~ ".round($czerwony/$pikseli*100)."%<br />"; echo "pomaranczowy ~ ".round($pomaranczowy/$pikseli*100)."%<br />"; echo "żółty ~ ".round($zolty/$pikseli*100)."%<br />"; echo "zielony ~ ".round($zielony/$pikseli*100)."%<br />"; echo "turkusowy ~ ".round($turkusowy/$pikseli*100)."%<br />"; echo "niebieski ~ ".round($niebieski/$pikseli*100)."%<br />"; echo "różowy ~ ".round($rozowy/$pikseli*100)."%<br />"; echo "biały ~ ".round($bialy/$pikseli*100)."%<br />"; echo "czarny ~ ".round($czarny/$pikseli*100)."%<br />"; ?>
1. Piksel po pikselu odczytujesz składowe RGB z obrazka.
2. Konwertujesz na system HSL, gdzie składowa H określa kolor w zakresie od 0 do 359 (system RGB nie nadaje się).