• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2016年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            <?php    
            /**   
            * 圖片相似度比較   
            *   
            * @version     $Id: ImageHash.php 4429 2012-04-17 13:20:31Z jax $   
            * @author      jax.hu   
            *   
            * <code>   
            *  //Sample_1   
            *  $aHash = ImageHash::hashImageFile('wsz.11.jpg');   
            *  $bHash = ImageHash::hashImageFile('wsz.12.jpg');   
            *  var_dump(ImageHash::isHashSimilar($aHash, $bHash));   
            *   
            *  //Sample_2   
            *  var_dump(ImageHash::isImageFileSimilar('wsz.11.jpg', 'wsz.12.jpg'));   
            * </code>   
            */    
                
            class ImageHash {    
                
               /**取樣倍率 1~10   
                * @access public   
                * @staticvar int   
                * 
            */    
               public static $rate = 2;    
                
               /**相似度允許值 0~64   
                * @access public   
                * @staticvar int   
                * 
            */    
               public static $similarity = 80;    
                
               /**圖片類型對應的開啟函數   
                * @access private   
                * @staticvar string   
                * 
            */    
               private static $_createFunc = array(    
                   IMAGETYPE_GIF   =>'imageCreateFromGIF',    
                   IMAGETYPE_JPEG  =>'imageCreateFromJPEG',    
                   IMAGETYPE_PNG   =>'imageCreateFromPNG',    
                   IMAGETYPE_BMP   =>'imageCreateFromBMP',    
                   IMAGETYPE_WBMP  =>'imageCreateFromWBMP',    
                   IMAGETYPE_XBM   =>'imageCreateFromXBM',    
               );    
                
                
               /**從文件建立圖片   
                * @param string $filePath 文件地址路徑   
                * @return resource 當成功開啟圖片則傳遞圖片 resource ID,失敗則是 false   
                * 
            */    
               public static function createImage($filePath){    
                   if(!file_exists($filePath)){ return false; }    
                
                   /*判斷文件類型是否可以開啟*/    
                   $type = exif_imagetype($filePath);    
                   if(!array_key_exists($type,self::$_createFunc)){ return false; }    
                
                   $func = self::$_createFunc[$type];    
                   if(!function_exists($func)){ return false; }    
                
                   return $func($filePath);    
               }    
                
                
               /**hash 圖片   
                * @param resource $src 圖片 resource ID   
                * @return string 圖片 hash 值,失敗則是 false   
                * 
            */    
               public static function hashImage($src){    
                   if(!$src){ return false; }    
                
                   /*縮小圖片尺寸*/    
                   $delta = 8 * self::$rate;    
                   $img = imageCreateTrueColor($delta,$delta);    
                   imageCopyResized($img,$src, 0,0,0,0, $delta,$delta,imagesX($src),imagesY($src));    
                
                   /*計算圖片灰階值*/    
                   $grayArray = array();    
                   for ($y=0; $y<$delta$y++){    
                       for ($x=0; $x<$delta$x++){    
                           $rgb = imagecolorat($img,$x,$y);    
                           $col = imagecolorsforindex($img$rgb);    
                           $gray = intval(($col['red']+$col['green']+$col['blue'])/3)& 0xFF;    
                
                           $grayArray[] = $gray;    
                       }    
                   }    
                   imagedestroy($img);    
                
                   /*計算所有像素的灰階平均值*/    
                   $average = array_sum($grayArray)/count($grayArray);    
                
                   /*計算 hash 值*/    
                   $hashStr = '';    
                   foreach ($grayArray as $gray){    
                       $hashStr .= ($gray>=$average) ? '1' : '0';    
                   }    
                
                   return $hashStr;    
               }    
                
                
               /**hash 圖片文件   
                * @param string $filePath 文件地址路徑   
                * @return string 圖片 hash 值,失敗則是 false   
                * 
            */    
               public static function hashImageFile($filePath){    
                   $src = self::createImage($filePath);    
                   $hashStr = self::hashImage($src);    
                   imagedestroy($src);    
                
                   return $hashStr;    
               }    
                
                
               /**比較兩個 hash 值,是不是相似   
                * @param string $aHash A圖片的 hash 值   
                * @param string $bHash B圖片的 hash 值   
                * @return bool 當圖片相似則傳遞 true,否則是 false   
                * 
            */    
               public static function isHashSimilar($aHash$bHash){    
                   $aL = strlen($aHash); $bL = strlen($bHash);    
                   if ($aL !== $bL){ return false; }    
                
                   /*計算容許落差的數量*/    
                   $allowGap = $aL*(100-self::$similarity)/100;    
                
                   /*計算兩個 hash 值的漢明距離*/    
                   $distance = 0;    
                   for($i=0; $i<$aL$i++){    
                       if ($aHash{$i} !== $bHash{$i}){ $distance++; }    
                   }    
                
                   return ($distance<=$allowGap) ? true : false;    
               }    
                
                
               /**比較兩個圖片文件,是不是相似   
                * @param string $aHash A圖片的路徑   
                * @param string $bHash B圖片的路徑   
                * @return bool 當圖片相似則傳遞 true,否則是 false   
                * 
            */    
               public static function isImageFileSimilar($aPath$bPath){    
                   $aHash = ImageHash::hashImageFile($aPath);    
                   $bHash = ImageHash::hashImageFile($bPath);    
                   return ImageHash::isHashSimilar($aHash$bHash);    
               }    
                
            }  
            posted on 2016-09-22 11:20 聶文龍 閱讀(1342) 評論(0)  編輯 收藏 引用
            久久综合五月丁香久久激情| 久久99久久成人免费播放| 伊人久久综合精品无码AV专区| 精品人妻伦九区久久AAA片69| 国产成人精品免费久久久久| 日本亚洲色大成网站WWW久久| 久久婷婷五月综合97色| 久久久久人妻一区精品果冻| 久久99精品久久久久久动态图 | 伊人热热久久原色播放www| 少妇人妻88久久中文字幕| 久久天天躁狠狠躁夜夜av浪潮| 国产成人无码久久久精品一| 青青青青久久精品国产h久久精品五福影院1421| 亚洲国产精品无码久久98| 性高湖久久久久久久久AAAAA| 久久九九亚洲精品| 久久人人爽人人爽人人AV| 久久精品中文无码资源站| 美女写真久久影院| 日韩精品久久久久久久电影蜜臀| 午夜精品久久久久9999高清| 国产成人久久精品麻豆一区| 久久综合狠狠综合久久综合88| 久久中文字幕人妻丝袜| 亚洲国产成人久久一区WWW| 久久久久久久综合日本| 国产精品gz久久久| 91精品国产色综久久| 97超级碰碰碰碰久久久久| 香蕉久久一区二区不卡无毒影院| 久久青青草原国产精品免费| 久久99精品国产一区二区三区| 精品999久久久久久中文字幕| 99久久国产综合精品麻豆| 久久国产成人精品麻豆| 91性高湖久久久久| 无码任你躁久久久久久| 亚洲欧美成人综合久久久| 狠狠久久亚洲欧美专区| 久久精品一区二区三区中文字幕|