Come posso rilevare i 2 colori principali di un'immagine in PHP?Rilevamento di colori per un'immagine utilizzando PHP
per esempio ho questa immagine:
Questa funzione/processo ritornerà: 0000FF o blu e FFFF00 o GIALLO
Grazie
Come posso rilevare i 2 colori principali di un'immagine in PHP?Rilevamento di colori per un'immagine utilizzando PHP
per esempio ho questa immagine:
Questa funzione/processo ritornerà: 0000FF o blu e FFFF00 o GIALLO
Grazie
Ecco una scr IPT che vi darà la lista:
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>';
Fondamentalmente hai appena copiato il codice della pagina a cui mi riferisco. Way to go ... – samn
e ho aggiunto una correzione ma sì sei corretto – rcs20
Vorrei ottimizzare questo sostituendo il caso Switch con '$ img = @imagecreatefromstring (file_get_contents ($ image));' così puoi elaborare diversi tipi di immagine efficientemente ... – Andres
Se siete OK per chiamare un programma di utilità esterna, Imagemagick può generare un istogramma per voi. Probabilmente sarà molto più veloce di un'implementazione PHP.
In sostanza, questo comando fornisce un elenco di colori, ordinato dai più dominante prima:
convert 'http://i.stack.imgur.com/J2txV.png' -format %c histogram:info:-|sort -r
Si potrebbe desiderare di mappare l'immagine a una tavolozza fissa prima ("Per concludere" i colori). Questo è quello che uso:
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
Questo potrebbe essere qualcosa per te: http://stackoverflow.com/questions/3468500/detect-overall-average-color-of-the-picture – samn
grazie, questo è impressionante. Puoi metterlo come risposta? – Tech4Wilco