average hashを作成

<?php
// Average Hashを調べるライブラリ
    function makeAHash($file, $cache = TRUE){
        $hashfile = preg_replace('/\.(jpg|jpeg)$/', '.hash', $file);
        if($cach) {
            if (file_exists($hashfile)){
                $v = file_get_contents($hashfile);
                return $v;
            }
        }
        // (1) 16x16にリサイズ
        $sz = 16;
        $src = imagecreatefromjpeg($file);
        $sx = imagesx($src); $sy = imagesy($src);
        $des = imagecreatetruecolor($sz, $sz);
        imagecopyresized($des, $src, 0, 0, 0, 0, $sz, $sz, $sx, $sy);
        imagefilter($des, IMG_FILTER_GRAYSCALE);
        // (3)平均値を得つつ、配列に入れておく
        $pix = &#91;&#93;; $sum = 0;
        for ($y = 0; $y < $sz; $y++){
            for ($x = 0; $x < $sz; $x++){
                $rgb = imagecolorat($des, $x, $y);
                $b = $rgb & 0xFF;
                $sum += $b;
                $pix&#91;&#93; = $b;
            }
        }
        $ave = floor($sum / ($sz * $sz));
        // (4)2値化する
        $hash = '';
        foreach ($pix as $i => $v){
            $hash .= ($v >= $ave) ? '1' : '0';
            if ($i % 16 == 15) $hash .= "\n";
        }
    }

    function enumJpeg($path){
        $files = [];
        $fs = scandir($path);
        foreach ($fs as $f){
            if (substr($f, 0, 1) == ".") continue;
            $fullpath = $path.'/'.$f;
            if (is_dir($fullpath)){
                $files = array_merge($files, enumJpeg($fullpath));
                continue;
            }
            if (!preg_match('/\.(jpg|jpeg)$/i', $f)) continue;
            $files[] = $fullpath;
        }
        return $files;
    }