温馨提示×

温馨提示×

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

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

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

发布时间:2020-12-24 16:35:59 阅读:361 作者:Leah 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这期内容当中小编将会给大家带来有关利用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$src0000$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$source0000$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怎么对相似的图片进行搜索了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

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

php
AI

开发者交流群×