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 相关文章推荐
在同一窗体中使用PHP来处理多个提交任务
Oct 09 PHP
做一个有下拉功能的留言版
Oct 09 PHP
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
php 按指定元素值去除数组元素的实现方法
Nov 04 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 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
Protoss热键控制
2020/03/14 星际争霸
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
php中session与cookie的比较
2015/01/27 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Django 前后台的数据传递的方法
2017/08/08 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python3.8中使用f-strings调试
2019/05/22 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Python ATM功能实现代码实例
2020/03/19 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
Django静态文件加载失败解决方案
2020/08/26 Python
python 下载文件的几种方法汇总
2021/01/06 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
产品售后服务承诺书
2014/05/21 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
七年级作文之冬景
2019/11/07 职场文书
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL