• <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 聶文龍 閱讀(1335) 評論(0)  編輯 收藏 引用
            99久久精品午夜一区二区| 亚洲精品白浆高清久久久久久 | 99久久国产综合精品成人影院| 久久亚洲AV成人无码电影| 久久精品国产亚洲AV电影| 久久久久久狠狠丁香| 狠狠色伊人久久精品综合网| 亚洲国产高清精品线久久| 亚洲精品无码久久久影院相关影片| 99久久人妻无码精品系列| 国产精品亚洲美女久久久| 亚洲国产精品狼友中文久久久 | 久久综合色区| 久久久久亚洲AV无码专区体验| 久久九九青青国产精品| 国产精品99久久久久久宅男小说| 99国产欧美精品久久久蜜芽| 丁香五月综合久久激情| 久久精品国产亚洲AV忘忧草18| 青青草国产精品久久久久| 久久这里的只有是精品23| 久久99精品综合国产首页| 亚洲欧美久久久久9999| 99久久人妻无码精品系列蜜桃 | 香蕉久久久久久狠狠色| 久久青青草原精品国产| 亚洲欧洲中文日韩久久AV乱码| 久久丫精品国产亚洲av不卡| 久久夜色撩人精品国产小说| 国产韩国精品一区二区三区久久| 久久免费视频一区| 久久99国产精品久久久| A级毛片无码久久精品免费| 久久久久国产一区二区三区| 久久精品人人做人人爽97| 2020久久精品亚洲热综合一本| 日本精品久久久久中文字幕8| 色婷婷综合久久久久中文一区二区| 久久国产精品一区| 久久亚洲国产欧洲精品一| 久久精品黄AA片一区二区三区|