PHP生成二维码与识别二维码的方法详解【附源码下载】


Posted in PHP onMarch 07, 2019

本文实例讲述了PHP生成二维码与识别二维码的方法。分享给大家供大家参考,具体如下:

二维码的分类

  • 线性堆叠式二维码
  • 矩阵式二维码

二维码的优缺点

优点

  • 信息容量大
  • 编码范围广
  • 容错能力强
  • 译码可靠性高
  • 可引入加密措施
  • 成本低,易制作

缺点

  • 二维码技术成为手机病毒、钓鱼网站传播的新渠道
  • 信息泄密

目前流行的三大国际标准

  • PDF417:不支持中文
  • DM:专利未公开,需支付专利费用
  • QR CODE:专利公开,支持中文

QR CODE 纠错能力

  • L级:约可纠错7%的数据码字
  • M级:约可纠错15%的数据码字
  • Q级:约可纠错25%的数据码字
  • H级:约可纠错30%的数据码字

前提条件

  • GD库

一、PHP生成QR CODE

  • 官网:http://phpqrcode.sourceforge.net/
  • 下载源码:https://github.com/endroid/qr-code

目录结构

PHP生成二维码与识别二维码的方法详解【附源码下载】

1、qrcode_create.php

ps:生成普通二维码

<?php
include_once "./qrcode/phpqrcode.php";
/**
 * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:保存路径
 * 在浏览器上直接生成一个二维码(内容为abc)
 */
QRcode::png("abc");
QRcode::png("ABC",false,QR_ECLEVEL_L,10,5,false);
/**
 * 生成文件到本地
 * 参数:p1:二维码包含的内容 p2:输出的文件名 p3:容错级别 p4:大小 p5:外边距margin p6:是否保存并打印(false 直接生成 true 生成且打印)
 * PS:$saveandprint源码的p6参数做了修改
 */
QRcode::png("ABC","ABC.jpg",QR_ECLEVEL_H,10,2,false);

2、qrcode_logo.php

ps:生成带Logo的二维码

<?php
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/8/16
 * Time: 10:43
 */
include "./qrcode/phpqrcode.php";
$txt = "测试内容";
$picPathAndName = "./pic/ABC.jpg";//二维码保存路径和名称
$level = 'L';
$size = 5;
$is_logo = 1;//是否包含Logo 0否 1是
$margin = 2;//边距
$saveAndPrint = true;//是否保存,保存时,$picPathAndName设置为true
//生成二维码图片QRcode::png($txt, $picPathAndName, $level, $size, $margin,$saveAndPrint);
if($is_logo == 1){
 $QR = $picPathAndName; //已经生成的原始二维码图
 $Logo = './pic/logo.png';
 $Logo_re = './pic/test_logo.png';
 $QR = imagecreatefromstring(file_get_contents($QR));
 $Logo = imagecreatefromstring(file_get_contents($Logo));
 $QR_width = imagesx($QR); //二维码图片宽度
 $QR_height = imagesy($QR); //二维码图片高度
 $logo_width = imagesx($Logo); //logo图片宽度
 $logo_height = imagesy($Logo); //logo图片高度
 $logo_qr_width = $QR_width / 5;
 $scale = $logo_width / $logo_qr_width;
 $logo_qr_height = $logo_height / $scale;
 $from_width = ($QR_width - $logo_qr_width) / 2;
 imagecopyresampled($QR, $Logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
 //输出图片
 imagepng($QR, $Logo_re);
}

3、qrcode_vcard.php (生成电子签名)

vCard格式:https://zh.wikipedia.org/wiki/VCard

<?php
/**
 * Created by PhpStorm.
 * User: user
 * Date: 2018/8/15
 * Time: 23:00
 */
require_once "./qrcode/phpqrcode.php";
/**
 * 生成电子签名
 * PS;使用微信扫描二维码
 */
$content = 'BEGIN:VCARD' . "\n";//起始标志
$content .= 'VERSION:2.1' . "\n";//当前版本
$content .= 'N:周' . "\n";//姓
$content .= 'FN:勇' . "\n";//名
$content .= 'ORG:江苏东大集成电路系统有限公司' . "\n";//公司名称
$content .= 'TITLE:PHP研发程序员' . "\n";//职位
$content .= 'TEL;WORK;VOICE:0523-83623173' . "\n";//工作电话
$content .= 'ADR;WORK:;;高新区星火路#2;南京市;江苏省;225762;中国' . "\n";//工作地址
$content .= 'ADR;HOME:;;下圩镇王横村178号;兴化市;江苏省;225762;中国' . "\n";//家庭地址(街道,地级市,省,邮编,国家)
$content .= 'TEL;TYPE:18000001111' . "\n";//移动电话
$content .= 'EMAIL:123456@qq.com' . "\n";//邮箱
$content .= 'URL:www.baidu.com' . "\n";//个人主页
$content .= 'END:VCARD' . "\n";//结束标志
QRcode::png($content);

二、JQUERY生成QR CODE

源码地址:https://github.com/jeromeetienne/jquery-qrcode

jquery_create.php

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Jquery生成二维码</title>
 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="./jquery-qrcode/jquery.qrcode.min.js"></script>
</head>
<body>
<div id="qrcode"></div>
<script>
 //$('#qrcode').qrcode("this plugin is great");
 $('#qrcode').qrcode({width: 64,height: 64,text: "jason"});
</script>
</body>
</html>

三、PHP识别二维码

1、方法一

环境需求,安装如下扩展

  • - ImageMagick
  • - zbar
  • - php-zbarcode

2、方法二

PHP识别二维码(无需安装扩展),初步测试普通二维码可以,带Logo的二维码,容错级别需要设置高一点页可以

qrReader类:https://github.com/baagee/php_QrReader

<?php
include_once('./qrReader/lib/QrReader.php');
$qrcode = new QrReader('./test_logo.png'); //图片路径
$text = $qrcode->text(); //返回识别后的文本
echo $text;
PHP 相关文章推荐
phpmyadmin config.inc.php配置示例
Aug 27 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
php封装的单文件(图片)上传类完整实例
Oct 18 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
PHP count()函数讲解
Feb 03 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 #PHP
php使用fullcalendar日历插件详解
Mar 06 #PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 #PHP
浅谈PHP封装CURL
Mar 06 #PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 #PHP
PHP实现的敏感词过滤方法示例
Mar 06 #PHP
详解PHP 二维数组排序保持键名不变
Mar 06 #PHP
You might like
模拟xcopy的函数
2006/10/09 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
python中enumerate函数用法实例分析
2015/05/20 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python实现银行账户系统
2021/02/22 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
小学教师管理制度
2014/01/18 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
买房协议书范本
2014/10/23 职场文书
高一军训感想
2015/08/07 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
教你怎么用python实现字符串转日期
2021/05/24 Python
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
MongoDB支持的索引类型
2022/04/11 MongoDB