感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。实际应用中,往往采用更强大的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个图片相似,否则不相似。
,
