Heim  >  Artikel  >  php教程  >  PHP实现搜索相似图片

PHP实现搜索相似图片

WBOY
WBOYOriginal
2016-06-06 19:44:201759Durchsuche

感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。

感知哈希算法

count count > 10 两张不同的图片
var_dump(ImageHash::run(‘./1.png', ‘./psb.jpg'));

getHashValue($src1); $hash2 = $self->getHashValue($src2); if(strlen($hash1) !== strlen($hash2)) return false; $count = 0; $len = strlen($hash1); for($i = 0; $i 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 > 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 = $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;$irate; $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> 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= $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个图片相似,否则不相似。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn