• <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
            <2007年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            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 聶文龍 閱讀(1338) 評論(0)  編輯 收藏 引用
            久久99精品国产麻豆婷婷| 国产69精品久久久久9999APGF| 久久国产劲爆AV内射—百度| 久久久久一级精品亚洲国产成人综合AV区| 国产亚洲精品美女久久久| 久久久久久无码Av成人影院 | 一本一道久久综合狠狠老| 欧美久久综合九色综合| 思思久久99热只有频精品66| 国产精品久久久久久久人人看| 久久久久久久久66精品片| 亚洲精品无码久久久影院相关影片| 午夜久久久久久禁播电影| 久久精品国产亚洲一区二区| 久久精品无码一区二区三区免费| 久久一本综合| 久久久亚洲欧洲日产国码二区| 久久成人国产精品二三区| 久久久免费观成人影院| 无码国内精品久久人妻| 久久国产精品-久久精品| 久久人人爽人人爽人人片AV麻豆 | 久久久久久久尹人综合网亚洲| 国产免费久久精品丫丫| 久久久久国产精品人妻| 欧美熟妇另类久久久久久不卡| 国产欧美久久一区二区| 亚洲国产日韩欧美久久| 国产成人久久精品激情| 久久男人中文字幕资源站| 久久―日本道色综合久久| 久久伊人色| 国内精品伊人久久久久| 久久久久亚洲AV无码专区首JN | 亚洲乱码精品久久久久..| 久久无码av三级| 一本久道久久综合狠狠爱| 久久精品二区| 久久这里只有精品首页| 亚洲综合熟女久久久30p| 国产巨作麻豆欧美亚洲综合久久|