Détection de couleurs pour une Image en utilisant PHP
Comment puis-je détecter les 2 meilleures couleurs d'une Image en PHP?
, Par exemple j'ai cette image:
Cette fonction/processus de retour: 0000FF ou bleu et FFFF00 ou JAUNE
Merci
25
demandé sur
Tech4Wilco
2011-10-11 18:41:02
2 réponses
Voici un script qui vous donnera la liste:
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>';
21
répondu
rcs20
2012-02-02 14:42:17
Si vous êtes autorisé à appeler un utilitaire externe, Imagemagick peut générer un histogramme pour vous. Cela va probablement être beaucoup plus rapide qu'une implémentation PHP.
Fondamentalement, cette commande vous donne une liste de couleurs, triées par les plus dominantes en premier:
convert 'http://i.stack.imgur.com/J2txV.png' -format %c histogram:info:-|sort -r
Vous pouvez d'abord mapper l'image sur une palette fixe ("arrondir" les couleurs). C'est ce que j'utilise:
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
0
répondu
troelskn
2014-03-04 10:19:48