• <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
            <2017年8月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(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 聶文龍 閱讀(1339) 評論(0)  編輯 收藏 引用
            欧美一区二区精品久久| 久久久久亚洲精品中文字幕| 99精品国产综合久久久久五月天| 久久精品国产精品亚洲艾草网美妙 | 伊人久久综合成人网| 久久精品麻豆日日躁夜夜躁| 久久久久久a亚洲欧洲aⅴ| 久久免费香蕉视频| 亚洲AV无码1区2区久久| 久久久国产精品福利免费| 无码国内精品久久综合88| 久久国产乱子伦免费精品| 国产99久久久久久免费看| 久久婷婷国产剧情内射白浆| 精品一区二区久久久久久久网站| 久久一区二区三区免费| 97久久综合精品久久久综合| 四虎影视久久久免费| 欧美精品一区二区精品久久| 99久久免费国产精品特黄| 久久精品国产精品亚洲| 久久777国产线看观看精品| 一级女性全黄久久生活片免费 | 人妻精品久久久久中文字幕69 | 亚洲国产精品婷婷久久| 久久久久亚洲AV片无码下载蜜桃 | 精品久久久久久国产| 久久久WWW成人| 色综合久久中文综合网| 精品久久无码中文字幕| 亚洲精品无码成人片久久| 久久99精品久久久久久噜噜| 亚洲国产精品无码久久SM| 青青国产成人久久91网| 一97日本道伊人久久综合影院| 色天使久久综合网天天| 久久91精品久久91综合| 精品久久久久久国产| 久久久久久久久久久免费精品 | 99国产欧美久久久精品蜜芽| 亚洲日本va午夜中文字幕久久|