/** * @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; }