php怎么实现根据图片搜索图片功能
php怎么实现相似图片的搜索呢?
其中的原理来解释下
1、缩小尺寸。将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
2、简化色彩。将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
3、计算平均值。计算所有64个像素的灰度平均值。
4、比较像素的灰度。将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
5、计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。
使用代码
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怎么实现根据图片搜索图片功能相关推荐
- 关于“插入图片”等功能无法使用的问题
之前一直没注意,我本身也很少使用上传图片等功能,最近才发现用IE时无法使用BLOG里的"插入图片"等功能,点 "插入图片"或者"表情"时,浏 ...
- php绘图技术加水印,PHP图片添加水印功能示例小结
本文实例总结了PHP图片添加水印功能.分享给大家供大家参考,具体如下: 例1.很简单图下添加水印函数 /** * 追加水印 * * @param string $source_img 原始图片url ...
- ios 裁剪框大小_iOS实现裁剪框和图片剪裁功能
这篇文章主要为大家详细介绍了iOS实现裁剪框和图片剪裁功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下图片处理中经常用的图片剪裁,就是通过剪裁框确定图片剪裁的区域,然后剪去该区域的图片,今天实现 ...
- 使用Martix来实现缩放图片的功能
使用Martix(android.graphics.Matrix)类中的postScale()方法结合Bitmap来实现缩放图片的功能 Bitmap bmp = BitmapFactory.decod ...
- 图片裁剪功能学习小结
图片裁剪功能学习小结 近期有需要使用图片裁剪的功能,在使用插件和自己写裁剪组件之间犹豫了很久,后来根据需求经过反复的考虑,还是自己封装吧,毕竟自己动手,丰衣足食,对吧?嗯,??????是的!最后生成裁 ...
- 原型图Mockplus:怎样使用图片裁切功能
2019独角兽企业重金招聘Python工程师标准>>> 图片裁切功能就是裁掉图片中多余的或不需要的部分. https://www.mockplus.cn/skill/single/s ...
- 实现本网站图片保护功能之加水印
类: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System ...
- 图片裁剪功能集成优化
问题所在 最近公司编辑在发布新闻的时候遇到一个问题,编辑后台提供的原有的图片裁剪功能在移动端和一些特定类型的显示时达不到具体的要求.最后去深究发现我们的服务器对上传上来的图片进行了一次裁剪,为了减小图 ...
- [转]mpvue中的小程序调用系统自带查看图片的功能
mpvue中的小程序调用系统自带查看图片的功能 这里举个栗子: <template><div class="keting"><div class=&q ...
最新文章
- 读书:个人成长 -- 即兴演讲
- 慕了!北京大学新校区来了!
- QT 4.5 windows版本 安装问题 及 Junction 使用
- spring动态代理实现计算器
- 用SAPI实现Speech Recognition(SR) - 听写模式
- img 隐藏_仙女山美食美景色,那些隐藏在深处角色味香
- Java 多线程学习笔记
- 【c++ primer读书笔记】【第6章】函数
- ubuntu16.04装机1:安装NVIDIA显卡驱动(下载.run包方式)
- 值栈ValueStack的原理与生命周期
- python的浮点数_python 浮点数 转 整数python函数每日一讲 - all()
- 分析攻击IP来源地并画出饼图 1
- 手机语言 Symbian 术语表
- 微信小程序:Framework inner error FLOW_CREATE_NODE
- 载入模型部分权重的方法
- pytorch distiller Weights Pruning Algorithms
- C++静态库和动态库的导入导出
- QWebEngineView如何忽略SSL证书错误
- 低首付网上购车平台申请条件,你了解吗?
- 现代设计在中国丨包豪斯城市会客厅无锡站圆满结束!
热门文章
- 网易我的世界服务器存档在哪个文件夹,网易版我的世界如何删除玩家存档
- vue element 确认弹框中显示图片(message里)
- 驭势吴甘沙:我的根本利益|Xtecher人物特稿
- 快应用JS自定义月相变化效果
- 关于java中输出流flush()方法
- 为什么计算机键盘用不了怎么办,笔记本电脑键盘用不了怎么办
- Java实现图书管理小练习(赌包辣条看完绝对会~)
- 网络安全与渗透:内网渗透,Cobalt_Strike(十三)此生无悔入华夏,男儿何不带吴钩
- 木头姐减持,机构却看好,京东大涨后的前景落脚何处?
- mysql 把表名改成大写_mysql将表名改成大写的实例