Exemplo n.º 1
0
 /**
  * @static
  * @param $img resource
  * @param $imginfo array
  */
 public static function getLogoPosition($img, $imginfo)
 {
     list($w, $h) = $imginfo;
     $ds = array();
     foreach (self::$positions as $pos => $colorcheck) {
         foreach ($colorcheck as $coltxt => $coord) {
             if ($coord['x'] < 0) {
                 $coord['x'] = $w + $coord['x'];
             }
             if ($coord['y'] < 0) {
                 $coord['y'] = $h + $coord['y'];
             }
             $color = imagecolorat($img, $coord['x'], $coord['y']);
             //                echo "({$coord['x']}, {$coord['y']})";
             //                echo "| $pos " . dechex($color);
             $ds[$pos][$coltxt] = self::colorMeasure($color, $coord['color']);
         }
     }
     // $ds2[$color][$position]
     $ds2 = CArray::rotate($ds);
     $mincolord = array();
     $counts = array();
     foreach ($ds2 as $col => $poss) {
         $min = 1024;
         $key = 0;
         foreach ($poss as $pos => $d) {
             if ($min > $d) {
                 $key = $pos;
                 $min = $d;
             }
         }
         $mincolord[$col]['pos'] = $key;
         $mincolord[$col]['d'] = $min;
         $counts[$key] = 0;
     }
     // minimal color distance
     foreach ($mincolord as $col => $data) {
         if ($data['d'] < 100) {
             $counts[$data['pos']]++;
         }
     }
     //        return $counts;
     foreach ($counts as $k => $v) {
         if ($v == 2) {
             return $k;
         }
         // ==count($mincolord)
     }
     if (array_sum($counts) == 0) {
         return false;
     }
     return $counts;
 }