温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

利用PHP怎么对相似的图片进行搜索

发布时间:2020-12-24 16:35:59 来源:亿速云 阅读:388 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关利用PHP怎么对相似的图片进行搜索,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

感知哈希算法

count < =5 匹配最相似
count > 10 两张不同的图片
var_dump(ImageHash::run(‘./1.png', ‘./psb.jpg'));

<?php class ImageHash {   const FILE_NOT_FOUND = '-1';   const FILE_EXTNAME_ILLEGAL = '-2';   private function __construct() {}   public static function run($src1, $src2) {     static $self;     if(!$self) $self = new static;     if(!is_file($src1) || !is_file($src2)) exit(self::FILE_NOT_FOUND);     $hash2 = $self->getHashValue($src1);     $hash3 = $self->getHashValue($src2);     if(strlen($hash2) !== strlen($hash3)) return false;     $count = 0;     $len = strlen($hash2);     for($i = 0; $i < $len; $i++) if($hash2[$i] !== $hash3[$i]) $count++;     return $count <= 10 ? true : false;   }   public function getImage($file) {     $extname = pathinfo($file, PATHINFO_EXTENSION);     if(!in_array($extname, ['jpg','jpeg','png','gif'])) exit(self::FILE_EXTNAME_ILLEGAL);     $img = call_user_func('imagecreatefrom'. ( $extname == 'jpg' ? 'jpeg' : $extname ) , $file);     return $img;   }   public function getHashValue($file) {     $w = 8;     $h = 8;     $img = imagecreatetruecolor($w, $h);     list($src_w, $src_h) = getimagesize($file);     $src = $this->getImage($file);     imagecopyresampled($img, $src, 0, 0, 0, 0, $w, $h, $src_w, $src_h);     imagedestroy($src);     $total = 0;     $array = array();     for( $y = 0; $y < $h; $y++) {       for ($x = 0; $x < $w; $x++) {         $gray = (imagecolorat($img, $x, $y) >> 8) & 0xFF;         if(!isset($array[$y])) $array[$y] = array();         $array[$y][$x] = $gray;         $total += $gray;       }     }     imagedestroy($img);     $average = intval($total / ($w * $h * 2));     $hash = '';     for($y = 0; $y < $h; $y++) {       for($x = 0; $x < $w; $x++) {         $hash .= ($array[$y][$x] >= $average) ? '1' : '0';       }     }     var_dump($hash);     return $hash;   } } var_dump(ImageHash::run('./1.png', './psb.jpg'));

方法二:

hash($f);  }  return $isString ? $result[0] : $result;  }  public function checkIsSimilarImg($imgHash, $otherImgHash){  if (file_exists($imgHash) && file_exists($otherImgHash)){   $imgHash = $this->run($imgHash);   $otherImgHash = $this->run($otherImgHash);  }  if (strlen($imgHash) !== strlen($otherImgHash)) return false;  $count = 0;  $len = strlen($imgHash);  for($i=0;$i<$len;$i++){   if ($imgHash{$i} !== $otherImgHash{$i}){   $count++;   }  }  return $count <= (5 * $rate * $rate) ? true : false;  }  public function hash($file){  if (!file_exists($file)){   return false;  }  $height = 8 * $this->rate;  $width = 8 * $this->rate;  $img = imagecreatetruecolor($width, $height);  list($w, $h) = getimagesize($file);  $source = $this->createImg($file);  imagecopyresampled($img, $source, 0, 0, 0, 0, $width, $height, $w, $h);  $value = $this->getHashValue($img);  imagedestroy($img);  return $value;  }  public function getHashValue($img){  $width = imagesx($img);  $height = imagesy($img);  $total = 0;  $array = array();  for ($y=0;$y<$height;$y++){   for ($x=0;$x<$width;$x++){   $gray = ( imagecolorat($img, $x, $y) >> 8 ) & 0xFF;   if (!is_array($array[$y])){    $array[$y] = array();   }   $array[$y][$x] = $gray;   $total += $gray;   }  }  $average = intval($total / (64 * $this->rate * $this->rate));  $result = '';  for ($y=0;$y<$height;$y++){   for ($x=0;$x<$width;$x++){   if ($array[$y][$x] >= $average){    $result .= '1';   }else{    $result .= '0';   }   }  }  return $result;  }  public function createImg($file){  $ext = $this->getFileExt($file);  if ($ext === 'jpeg') $ext = 'jpg';  $img = null;  switch ($ext){   case 'png' : $img = imagecreatefrompng($file);break;   case 'jpg' : $img = imagecreatefromjpeg($file);break;   case 'gif' : $img = imagecreatefromgif($file);  }  return $img;  }  public function getFileExt($file){  $infos = explode('.', $file);  $ext = strtolower($infos[count($infos) - 1]);  return $ext;  } }

调用方式如下:

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

如果$result值为true, 则表明2个图片相似,否则不相似。

上述就是小编为大家分享的利用PHP怎么对相似的图片进行搜索了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI