Jak wykryć dwa górne kolory obrazu w PHP?Wykrywanie kolorów obrazu przy użyciu PHP
na przykład mam ten obraz:
Funkcja/proces powrotu: 0000FF lub niebieskie i FFFF00 lub YELLOW
Thanks
Jak wykryć dwa górne kolory obrazu w PHP?Wykrywanie kolorów obrazu przy użyciu PHP
na przykład mam ten obraz:
Funkcja/proces powrotu: 0000FF lub niebieskie i FFFF00 lub YELLOW
Thanks
Tutaj jest scr IPT że daje listę:
function detectColors($image, $num, $level = 5) {
$level = (int)$level;
$palette = array();
$size = getimagesize($image);
if(!$size) {
return FALSE;
}
switch($size['mime']) {
case 'image/jpeg':
$img = imagecreatefromjpeg($image);
break;
case 'image/png':
$img = imagecreatefrompng($image);
break;
case 'image/gif':
$img = imagecreatefromgif($image);
break;
default:
return FALSE;
}
if(!$img) {
return FALSE;
}
for($i = 0; $i < $size[0]; $i += $level) {
for($j = 0; $j < $size[1]; $j += $level) {
$thisColor = imagecolorat($img, $i, $j);
$rgb = imagecolorsforindex($img, $thisColor);
$color = sprintf('%02X%02X%02X', (round(round(($rgb['red']/0x33)) * 0x33)), round(round(($rgb['green']/0x33)) * 0x33), round(round(($rgb['blue']/0x33)) * 0x33));
$palette[$color] = isset($palette[$color]) ? ++$palette[$color] : 1;
}
}
arsort($palette);
return array_slice(array_keys($palette), 0, $num);
}
$img = 'icon.png';
$palette = detectColors($img, 6, 1);
echo '<img src="' . $img . '" />';
echo '<table>';
foreach($palette as $color) {
echo '<tr><td style="background:#' . $color . '; width:36px;"></td><td>#' . $color . '</td></tr>';
}
echo '</table>';
Po prostu skopiowałeś kod strony, do której się zwracałem. Sposób na ... – samn
i dodałem poprawkę, ale tak, masz rację: – rcs20
Zoptymalizuję to poprzez zastąpienie Case'a przełącznikiem '$ img = @imagecreatefromstring (file_get_contents ($ image));' dzięki czemu możesz przetwarzać różne typy obrazów wydajnie ... – Andres
Jeśli jesteś OK wywołać narzędzie zewnętrznego Imagemagick może wygenerować histogram dla ciebie. Prawdopodobnie będzie to znacznie szybsze niż implementacja PHP.
Zasadniczo, to polecenie daje listę kolorów, posortowane według najbardziej dominującym pierwsze:
convert 'http://i.stack.imgur.com/J2txV.png' -format %c histogram:info:-|sort -r
może chcesz najpierw odwzorować obraz do stałej palecie („zaokrąglać” kolory). To co mam użyć:
convert 'http://i.stack.imgur.com/J2txV.png' -modulate 100,200,100 -remap 'http://i.stack.imgur.com/GvTqB.png' -format %c histogram:info:-|sort -r
To może być coś dla Ciebie: http://stackoverflow.com/questions/3468500/detect-overall-average-color-of-the-picture – samn
dzięki, to jest niesamowite. Czy możesz to wyrazić jako odpowiedź? – Tech4Wilco