首页 / 算法 / PHP中感知哈希算法
PHP中感知哈希算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP中感知哈希算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4014字,纯文字阅读大概需要6分钟。
内容图文
![PHP中感知哈希算法](/upload/InfoBanner/zyjiaocheng/135/9a5bcf756eec4f09b20871c9aeefe7a0.jpg)
感知哈希算法
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); $hash1 = $self->getHashValue($src1); $hash2 = $self->getHashValue($src2); if(strlen($hash1) !== strlen($hash2)) return false; $count = 0; $len = strlen($hash1); for($i = 0; $i < $len; $i++) if($hash1[$i] !== $hash2[$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(迭代+递归)实现无限级分类详解
PHP中单例模式与工厂模式详解及实例
PHP下 Mongodb 连接远程数据库详解及案例
以上就是PHP中感知哈希算法的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的PHP中感知哈希算法全部内容,希望文章能够帮你解决PHP中感知哈希算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。