• <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
            <2008年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(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;    
                
               /**圖片類型對應(yīng)的開啟函數(shù)   
                * @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; }    
                
                   /*計算容許落差的數(shù)量*/    
                   $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 聶文龍 閱讀(1340) 評論(0)  編輯 收藏 引用
            91久久精品视频| 免费精品久久久久久中文字幕| 精品国产乱码久久久久久1区2区| 亚洲精品乱码久久久久久按摩 | 亚洲а∨天堂久久精品| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久九九精品99国产精品| 中文字幕成人精品久久不卡 | 久久国产劲爆AV内射—百度| 精品熟女少妇av免费久久| 久久精品国产精品青草app| 久久天天躁夜夜躁狠狠| 久久99国产精品久久| 一级A毛片免费观看久久精品| 丰满少妇人妻久久久久久4| 国产成人精品综合久久久| 国内精品久久久久久久coent| 久久91亚洲人成电影网站| 久久亚洲国产精品五月天婷| 国产亚洲精品自在久久| 亚洲精品久久久www| 四虎国产精品免费久久久 | 91久久香蕉国产熟女线看| 精品国产99久久久久久麻豆| 久久精品成人| 久久久久国产一级毛片高清板| 日本欧美久久久久免费播放网| 国产精品美女久久久久| 久久99热这里只有精品国产| 久久w5ww成w人免费| 精品多毛少妇人妻AV免费久久| 国产免费久久精品丫丫| 国产精品久久久久9999| av无码久久久久久不卡网站| 2021最新久久久视精品爱| 久久一区二区免费播放| 久久久久亚洲精品中文字幕| 99热都是精品久久久久久| 久久香蕉综合色一综合色88| 精品久久无码中文字幕| 久久青草国产手机看片福利盒子|