一、算法原理步骤
将图片转化为8*8的缩略图,根据算法得到这64个像素的哈希值,一次比较两幅图的哈希值,哈希值不一样 count++,若count>=10则不相似,count<=5为最相似(下面的代码中我把哈希值相同的进行count++操作,count越大则相似度越大)
步骤:
- 1.将图片缩小为8*8的尺寸
- 2.将小图片变为灰度图像
- 3.计算每个像素的灰度平均值
- 4.与平均值进行比较,大于等于为 1,小于为 0,得到指纹
- 5.将两个图片的指纹依次进行比较,相同 count++ count越大,相似度越高
二、先了解后面用到的函数
pathinfo()
返回值 :数组
以数组形式显示文件信息
PATHINFO_DIRNAME - 只返回 路径
PATHINFO_BASENAME - 只返回 文件名
PATHINFO_EXTENSION - 只返回 后缀名
PATHINFO_FILENAME - 只返回 不包含后缀名的文件名
eg.
call_user_func()
回调函数
返回值:回调函数的返回值
eg.
imagecreatetruecolor()
新建图像
返回值:true || false
getimagesize()
获得图片信息
返回值:数组
eg.
list()
将值赋给list中的参数
返回值:数组
eg.
imagecopyresampled()
将原图变为目标图
返回值:true || false
imagedestroy()
销毁图片
imagecolorat()
获得该点像素的颜色索引值
返回值:该点的RGB
intval()
获取整数值
返回值:int
eg.
三、代码
<?php
/* 均值哈希
* 1.将图片缩小为8*8的尺寸
* 2.将小图片变为灰度图像
* 3.计算每个像素的灰度平均值
* 4.与平均值进行比较,大于等于为 1,小于为 0,得到指纹
* 5.将两个图片的指纹依次进行比较,相同 count++ count越大,相似度越高
* */
class img_compare{
// 比较相似度 实现步骤5
public function compare($img1,$img2){
static