实现这种功能的关键技术叫作"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹越类似, 说明两张图片就越类似. 但关键是如何根据图片计算出"指纹"呢? 下面用最简单的步骤来讲明一下原理: 算法
将图片缩小到8x8的尺寸, 总共64个像素. 这一步的做用是去除各类图片尺寸和图片比例的差别, 只保留结构、明暗等基本信息. spa
将缩小后的图片, 转为64级灰度图片. 图片
计算图片中全部像素的灰度平均值 字符串
将每一个像素的灰度与平均值进行比较, 若是大于或等于平均值记为1, 小于平均值记为0. it
将上一步的比较结果, 组合在一块儿, 就构成了一个64位的二进制整数, 这就是这张图片的指纹. 原理
获得图片的指纹后, 就能够对比不一样的图片的指纹, 计算出64位中有多少位是不同的. 若是不相同的数据位数不超过5, 就说明两张图片很类似, 若是大于10, 说明它们是两张不一样的图片. 二进制