问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php怎么实现根据图片搜索图片功能

发布网友 发布时间:2022-04-26 17:18

我来回答

1个回答

热心网友 时间:2022-04-06 11:46

php爱好者 们很对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个图片相似,否则不相似。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 当兵新兵连累吗, 怎么在网页上用PHP做个搜索功能? 当兵是不是很累啊? php 如何实现文章内容搜索? 我想知道当兵的人在部队生活是不是很累… EXCEL文档中打入的文字如何全部显示 php如何实现下拉框选中搜索功能 PHP中怎么实现关键字搜索? 当兵累吗?我想去 PHP搜索怎么做 现在当兵累不累 荣耀60支持北斗吗? 当兵有多苦有多累? 公积金贷款收入证明要银行流水吗 当兵辛苦吗? 公积金贷款查流水严吗 武汉公积金贷款需要的流水 20元购买下载了的北斗导航,导航一会儿就息屏了感觉特不方便,寻求解决办法!我是华为P30pol 申请公积金贷款需要提供银行流水吗 LOL.求霸气搞笑的三黑或者五黑的名字! 怎么用php实现站内搜索功能 php要实现简单的查找功能,只要一个输入查找内容的编辑框并且要和查找... 当兵到底累不累啊? 如何用PHP制作搜索引擎 php程序中的搜索功能 关于php 站内搜索 的实现~~ thinkphp 怎么在模板页面做一个搜索功能 如何用php实现动态搜索功能,希望大神指点一下思路。 如何用PHP和ajax实现实时搜索功能 PHP如何实现模糊搜索? PHP技术 如何实现网站内高效搜索? 想用php做一个搜索功能,不知道错在哪里,各位大侠们帮帮忙 phpcms里如何实现多功能搜索 酷我音乐的微信先享卡什么 PHP 怎样实现随便输入一个字都能搜索全数据库的内容? 我新办了微信先享卡,月费折扣是立即生效的吗? 微信先享卡不交钱会怎样? 微花先享后付怎么取消 有人知道微信先享卡吗? 微花的先享后付魅力那么大吗?为什么身边好多人都在用微花,不怕是套路贷嘛