亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP實現搜索相似圖片

2024-05-04 23:39:04
字體:
來源:轉載
供稿:網友

感知哈希的優點是簡單快速,不受圖片大小縮放的影響,缺點是圖片的內容不能變更。實際應用中,往往采用更強大的pHash算法和SIFT算法,它們能夠識別圖片的變形。只要變形程度不超過25%,它們就能匹配原圖。

感知哈希算法

count < =5 匹配最相似

count > 10 兩張不同的圖片

var_dump(ImageHash::run(‘./1.png', ‘./psb.jpg'));

 

 
  1. <?php 
  2. class ImageHash { 
  3. const FILE_NOT_FOUND = '-1'
  4. const FILE_EXTNAME_ILLEGAL = '-2'
  5. private function __construct() {} 
  6. public static function run($src1, $src2) { 
  7. static $self; 
  8. if(!$self) $self = new static
  9. if(!is_file($src1) || !is_file($src2)) exit(self::FILE_NOT_FOUND); 
  10. $hash1 = $self->getHashValue($src1); 
  11. $hash2 = $self->getHashValue($src2); 
  12. if(strlen($hash1) !== strlen($hash2)) return false
  13. $count = 0; 
  14. $len = strlen($hash1); 
  15. for($i = 0; $i < $len; $i++) if($hash1[$i] !== $hash2[$i]) $count++; 
  16. return $count <= 10 ? true : false
  17. public function getImage($file) { 
  18. $extname = pathinfo($file, PATHINFO_EXTENSION); 
  19. if(!in_array($extname, ['jpg','jpeg','png','gif'])) exit(self::FILE_EXTNAME_ILLEGAL); 
  20. $img = call_user_func('imagecreatefrom'. ( $extname == 'jpg' ? 'jpeg' : $extname ) , $file); 
  21. return $img; 
  22. public function getHashValue($file) { 
  23. $w = 8; 
  24. $h = 8; 
  25. $img = imagecreatetruecolor($w, $h); 
  26. list($src_w, $src_h) = getimagesize($file); 
  27. $src = $this->getImage($file); 
  28. imagecopyresampled($img, $src, 0, 0, 0, 0, $w, $h, $src_w, $src_h); 
  29. imagedestroy($src); 
  30. $total = 0; 
  31. $array = array(); 
  32. for( $y = 0; $y < $h; $y++) { 
  33. for ($x = 0; $x < $w; $x++) { 
  34. $gray = (imagecolorat($img, $x, $y) >> 8) & 0xFF; 
  35. if(!isset($array[$y])) $array[$y] = array(); 
  36. $array[$y][$x] = $gray; 
  37. $total += $gray; 
  38. imagedestroy($img); 
  39. $average = intval($total / ($w * $h * 2)); 
  40. $hash = ''
  41. for($y = 0; $y < $h; $y++) { 
  42. for($x = 0; $x < $w; $x++) { 
  43. $hash .= ($array[$y][$x] >= $average) ? '1' : '0'
  44. var_dump($hash); 
  45. return $hash; 
  46. var_dump(ImageHash::run('./1.png''./psb.jpg')); 

方法二:

 

 
  1. hash($f); 
  2. return $isString ? $result[0] : $result; 
  3. public function checkIsSimilarImg($imgHash, $otherImgHash){ 
  4. if (file_exists($imgHash) && file_exists($otherImgHash)){ 
  5. $imgHash = $this->run($imgHash); 
  6. $otherImgHash = $this->run($otherImgHash); 
  7. if (strlen($imgHash) !== strlen($otherImgHash)) return false
  8. $count = 0; 
  9. $len = strlen($imgHash); 
  10. for($i=0;$i<$len;$i++){ 
  11. if ($imgHash{$i} !== $otherImgHash{$i}){ 
  12. $count++; 
  13. return $count <= (5 * $rate * $rate) ? true : false
  14. public function hash($file){ 
  15. if (!file_exists($file)){ 
  16. return false
  17. $height = 8 * $this->rate; 
  18. $width = 8 * $this->rate; 
  19. $img = imagecreatetruecolor($width, $height); 
  20. list($w, $h) = getimagesize($file); 
  21. $source = $this->createImg($file); 
  22. imagecopyresampled($img, $source, 0, 0, 0, 0, $width, $height, $w, $h); 
  23. $value = $this->getHashValue($img); 
  24. imagedestroy($img); 
  25. return $value; 
  26. public function getHashValue($img){ 
  27. $width = imagesx($img); 
  28. $height = imagesy($img); 
  29. $total = 0; 
  30. $array = array(); 
  31. for ($y=0;$y<$height;$y++){ 
  32. for ($x=0;$x<$width;$x++){ 
  33. $gray = ( imagecolorat($img, $x, $y) >> 8 ) & 0xFF; 
  34. if (!is_array($array[$y])){ 
  35. $array[$y] = array(); 
  36. $array[$y][$x] = $gray; 
  37. $total += $gray; 
  38. $average = intval($total / (64 * $this->rate * $this->rate)); 
  39. $result = ''
  40. for ($y=0;$y<$height;$y++){ 
  41. for ($x=0;$x<$width;$x++){ 
  42. if ($array[$y][$x] >= $average){ 
  43. $result .= '1'
  44. }else
  45. $result .= '0'
  46. return $result; 
  47. public function createImg($file){ 
  48. $ext = $this->getFileExt($file); 
  49. if ($ext === 'jpeg') $ext = 'jpg'
  50. $img = null
  51. switch ($ext){ 
  52. case 'png' : $img = imagecreatefrompng($file);break
  53. case 'jpg' : $img = imagecreatefromjpeg($file);break
  54. case 'gif' : $img = imagecreatefromgif($file); 
  55. return $img; 
  56. public function getFileExt($file){ 
  57. $infos = explode('.', $file); 
  58. $ext = strtolower($infos[count($infos) - 1]); 
  59. return $ext; 

調用方式如下:

 

 
  1. require_once "Imghash.class.php"
  2. $instance = ImgHash::getInstance(); 
  3. $result = $instance->checkIsSimilarImg('chenyin/IMG_3214.png''chenyin/IMG_3212.JPG'); 

如果$result值為true, 則表明2個圖片相似,否則不相似。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久中文字幕久久av| 日韩中文字幕免费看| 欧美大片在线影院| 亚洲国产福利在线| 91在线视频一区| 亚洲欧美中文字幕| 亚洲欧美制服第一页| 国产精品白嫩初高中害羞小美女| 欧美最近摘花xxxx摘花| 亚洲精品v天堂中文字幕| 国产精品三级久久久久久电影| 久久69精品久久久久久久电影好| 欧美在线视频播放| 久久影院免费观看| 91久久久在线| 91精品久久久久久久久青青| 亚洲欧美日韩天堂| 欧美亚洲一级片| 日韩欧美在线字幕| 国产亚洲a∨片在线观看| 亚洲国产天堂久久国产91| 日韩精品福利在线| 成人h猎奇视频网站| 亚洲精品不卡在线| 国产成人中文字幕| 欧美色另类天堂2015| 国产精品激情自拍| 亚洲国产天堂网精品网站| 久久久久久12| 欧美精品一本久久男人的天堂| 国产日韩在线亚洲字幕中文| 亚洲aⅴ日韩av电影在线观看| 精品高清一区二区三区| 欧美午夜久久久| 亚洲美女激情视频| 日韩av综合网| 精品一区二区三区三区| 亚洲精品久久在线| 久久伊人精品一区二区三区| 91成人国产在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美国产视频一区二区| 亚洲成人激情视频| yellow中文字幕久久| 欧美激情综合色综合啪啪五月| 日韩在线视频中文字幕| 日韩电影中文字幕| 久久99国产精品久久久久久久久| 性色av一区二区三区免费| 国产69精品久久久久9999| 在线播放日韩精品| 国模精品系列视频| 91精品视频免费观看| 国产精品91一区| 久久99国产精品久久久久久久久| 91超碰中文字幕久久精品| 国产精品99久久久久久久久久久久| 亚洲午夜未删减在线观看| 欧美国产视频日韩| 最近中文字幕mv在线一区二区三区四区| 日韩美女视频免费看| 欧美国产精品va在线观看| 人九九综合九九宗合| 欧美日韩在线视频首页| 中文字幕在线成人| 成人久久精品视频| 亚洲电影免费观看高清完整版在线观看| 日韩大陆欧美高清视频区| 亚洲欧美精品在线| 成人性生交大片免费看小说| 色综合久久精品亚洲国产| 欧美中文在线观看国产| 国产精品久久久久久久久久久久| 国产精品自拍小视频| 中文日韩在线视频| 日韩成人高清在线| 欧美午夜片在线免费观看| 欧美富婆性猛交| 欧美在线视频导航| 另类图片亚洲另类| 97国产精品人人爽人人做| 久久久免费电影| 亚洲激情久久久| 日韩福利视频在线观看| 日韩欧美中文字幕在线观看| 国产精品99久久久久久白浆小说| 亚洲97在线观看| 亚洲激情视频在线观看| 91久久久久久国产精品| 国产不卡在线观看| 欧美亚洲在线视频| 欧美另类69精品久久久久9999| 91大神福利视频在线| 国产一区二区三区中文| 日韩av最新在线观看| 亚洲自拍偷拍区| 狠狠躁夜夜躁人人爽天天天天97| 亚洲第一视频网| 亚洲深夜福利在线| 97在线日本国产| 久久99青青精品免费观看| 欧美日韩激情美女| 国产精品电影在线观看| 亚洲第一在线视频| 国内免费久久久久久久久久久| 欧美猛交ⅹxxx乱大交视频| 日韩欧美在线字幕| 激情成人在线视频| 国产精品美女主播| 欧美高清电影在线看| 97精品欧美一区二区三区| 国产精品自产拍高潮在线观看| 黑人巨大精品欧美一区二区三区| 综合网日日天干夜夜久久| 色偷偷88888欧美精品久久久| 成人免费福利视频| 色诱女教师一区二区三区| 8050国产精品久久久久久| xx视频.9999.com| 日韩欧美高清在线视频| 日韩美女av在线免费观看| 亚洲欧美精品伊人久久| 欧美日韩国产二区| 久久久久中文字幕2018| 国产精品国产自产拍高清av水多| 欧美国产精品va在线观看| 欧美在线一区二区视频| 欧美另类极品videosbest最新版本| 91中文精品字幕在线视频| 成人激情免费在线| 视频一区视频二区国产精品| 国产丝袜一区二区三区免费视频| 91精品国产高清自在线| 伊人伊人伊人久久| 91在线免费观看网站| 色琪琪综合男人的天堂aⅴ视频| 欧美成人免费播放| 欧美性高潮在线| 国产精品综合不卡av| 国产一区二区三区久久精品| 狠狠干狠狠久久| 国产日韩欧美另类| 色阁综合伊人av| 精品久久久一区| 欧美成人精品在线视频| 成人国产亚洲精品a区天堂华泰| 国产欧亚日韩视频| 日韩成人免费视频| 伊人亚洲福利一区二区三区| 成人激情在线播放| 精品中文视频在线| 亚洲人成电影网站色…| 人人澡人人澡人人看欧美| 韩剧1988在线观看免费完整版| 中文字幕在线看视频国产欧美| 成人免费视频在线观看超级碰| 97精品在线视频| 久久免费视频网| 欧美日韩国产色视频| 亚洲黄页网在线观看| 久久综合五月天| 亚洲一区www| 国产精品成人aaaaa网站| 亚洲第一福利在线观看|