<li id="lnxxx"><object id="lnxxx"></object></li>
  • <button id="lnxxx"><object id="lnxxx"></object></button>
    <s id="lnxxx"></s>
    <button id="lnxxx"></button>
      <button id="lnxxx"><acronym id="lnxxx"></acronym></button><dd id="lnxxx"><noscript id="lnxxx"></noscript></dd>
    1. <em id="lnxxx"><object id="lnxxx"><input id="lnxxx"></input></object></em>

      <rp id="lnxxx"><object id="lnxxx"><input id="lnxxx"></input></object></rp>
      0712-2888027 189-8648-0214
      微信公眾號

      孝感風信網絡科技有限公司微信公眾號

      當前位置:主頁 > 技術支持 > DedeCMS > Dedecms網站移動化分幾步?五步搞定!

      Dedecms網站移動化分幾步?五步搞定!

      時間:2024-01-14來源:風信官網 點擊: 302次
      PHP中如何實現的圖片相似度比較的算法,源代碼如下,供研究參考:

      <?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);   
         }   
         
      } 
      
      
      
      
      熱門關鍵詞: Dedecms 網站移動化
      欄目列表
      推薦內容
      熱點內容
      展開
      无码流畅人妻一区二区三区|国产亚洲日韩精品一二三区|无码中文字幕av免费放∨|日韩人妻AV无码一区

      <li id="lnxxx"><object id="lnxxx"></object></li>
    2. <button id="lnxxx"><object id="lnxxx"></object></button>
      <s id="lnxxx"></s>
      <button id="lnxxx"></button>
        <button id="lnxxx"><acronym id="lnxxx"></acronym></button><dd id="lnxxx"><noscript id="lnxxx"></noscript></dd>
      1. <em id="lnxxx"><object id="lnxxx"><input id="lnxxx"></input></object></em>

        <rp id="lnxxx"><object id="lnxxx"><input id="lnxxx"></input></object></rp>