Snippet #16 ~ PHP : Récupérer la couleur dominante d’une image

Voila un petit snippet pratique pour ceux qui souhaitent gérer par exemple une galerie photo en triant les images par couleurs approchantes.

Ce snippet étudie les images point par point et définis la couleur dominante de l’image:

 Nb : ne fonctionne que pour les png, si vous souhaitez du jpeg, remplacer imagecreatefrompng par imagecreatefromjpg etc…

function dominant_color($url){
    $i = imagecreatefrompng($url);
    $rTotal  = '';
    $bTotal  = '';
    $gTotal  = '';
    $total = '';
    for ($x=0;$x<imagesx($i);$x++) {
        for ($y=0;$y<imagesy($i);$y++) {
            $rgb = imagecolorat($i, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            $rTotal += $r;
            $gTotal += $g;
            $bTotal += $b;
            $total++;
    }

}

$r = round($rTotal/$total);
$g = round($gTotal/$total);
$b = round($bTotal/$total);

echo '<img style="float:left;margin-right:5px;" width="63" height="63" src="'.$url.'">';

echo '<div style="float:left;"><div style="font-size:10px;font-family:Verdana;text-align:center;width:300px;padding:5px;margin-bottom:5px;border-radius:5px;border:3px solid;border-color:rgb('.($r-20).','.($g-20).','.($b-20).');background-color:rgb('.$r.','.$g.','.$b.')">Rouge : '.$r.', Vert : '.$g.', Bleu : '.$b.'</div>';

echo '<div style="font-size:10px;font-family:Verdana;text-align:center;width:300px;padding:5px;margin-bottom:5px;border-radius:5px;border:3px solid;border-color:rgb('.($r-20).','.($g-20).','.($b-20).');background-color:rgb('.$r.','.$g.','.$b.')">Url : '.$url.'</div></div>';

}

dominant_color("/IMG/testImage.png");

 

 

8 réactions au sujet de « Snippet #16 ~ PHP : Récupérer la couleur dominante d’une image »

  1. Clém4541 Réponse

    je vais faire mon chieur (c’est histoire de pas perdre l’habitude…) mais ça manque d’image pour voir le résultat :p

  2. BoboTiG Réponse

    Pas mal, peut-être pourrais-tu modifier $i = imagecreatefrompng($url); par $ext = strtolower(pathinfo($url, PATHINFO_EXTENSION));
    if ($ext == 'jpg' || $ext == 'jpeg') $i = imagecreatefromjpeg($url);
    if ($ext == 'gif') $i = imagecreatefromgif($url);
    if ($ext == 'png') $i = imagecreatefrompng($url);

    Comme ça tu prends en compte les JPG et GIF 😉

    • Idleman Auteur ArticleRéponse

      Oui, mais après ça n’est plus un snippet, c’est un script :p libre a chacun de traiter les types d’images ou non en fonction du contexte 🙂

  3. Jerem Réponse

    Salut,

    Sympa pour le bout de code en revanche, il y a une petite coquille dans le code
    Il faut remplacer :
    $rgb = imagecolorat($i, 10, 15);

    par :
    $rgb = imagecolorat($i, $x, $y);

  4. vitality Réponse

    waw très bonne astuce que tu nous fait la. Merci infiniment très utite :p

Répondre à Idleman Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.