现在很多应用场景需要用到二维码的快速识别,比如微信上的很多应用。本文使用QrReader类库,可以很简单的实现二维码识别的功能;对普通二维码、多色彩二维码、带logo二维码等都有极高的识别率。另外需要注意,该类库仅支持php5.3及以上版本的php环境,否则会报错无法正常运行。
1、首先引入类库,fun.php是我自己写的一个函数,与识别无关:
header("Content-type:text/html;charset=utf-8");
include_once('./lib/QrReader.php');
include_once('./lib/fun.php');
set_time_limit(0);
2、定义图片路径进行识别操作
$pic="20140317101740310.jpg";
$qrcode = new QrReader($pic);
$text = $qrcode->text(); //返回识别后的文本
echo "初次识别:".$text."<br>";
3、有可能会遇到宽高非常大的二维码图,这种情况QrReader无法识别,我是把源图缩小后再进行二次识别
if (empty($text)) {
$ex=trim(pathinfo($pic, PATHINFO_EXTENSION));
mkThumbnail($pic,500,null,"tmp_".$pic);
switch ($ex) {
case "jpg":
$im = imagecreatefromjpeg("tmp_".$pic);
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
imagejpeg($im, "tmp_".$pic);
} else {
echo 'jpeg文件错误处理失败';
}
break;
case "png":
$im = imagecreatefrompng("tmp_".$pic);
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
imagepng($im, "tmp_".$pic);
} else {
echo 'png文件错误处理失败';
}
break;
case "gif":
$im = imagecreatefromgif("tmp_".$pic);
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
imagegif($im, "tmp_".$pic);
} else {
echo 'gif文件错误处理失败';
}
break;
}
imagedestroy($im);
$qrcode2 = new QrReader("tmp_".$pic);
$text = $qrcode2->text(); //返回识别后的文本
echo "二次识别:".$text."<br>";;
//unlink("tmp_".$pic);
}
4、如果是应用在微信场景,有时可能需要过滤掉一些非法的二维码
if (empty($text) || !strstr($text,'weixin.qq.com')) {
echo "非法验证码图片!";
}
QrReader这个类库的识别准确度应该可以应用在绝大多数实际应用中,而且使用方法简单。
上一篇: 如何利用jquery实现多条件筛选
下一篇: mysql索引的类型和优缺点
售后保障
承诺任何问题1小时内解决数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款