使用PHP生成二维码的方法汇总


Posted in PHP onJuly 22, 2015

随着科技的进步,二维码应用领域越来越广泛,本站之前已有文章介绍通过使用jQuery插件来生成二维码,今天我给大家分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码。

利用Google API生成二维码

Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码:

$urlToEncode="https://3water.com"; 
generateQRfromGoogle($urlToEncode); 
/** 
 * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 
 * @param string $chl 二维码包含的信息,可以是数字、字符、二进制信息、汉字。 
 不能混合数据类型,数据必须经过UTF-8 URL-encoded 
 * @param int $widhtHeight 生成二维码的尺寸设置 
 * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。 
 *              L-默认:可以识别已损失的7%的数据 
 *              M-可以识别已损失15%的数据 
 *              Q-可以识别已损失25%的数据 
 *              H-可以识别已损失30%的数据 
 * @param int $margin 生成的二维码离图片边框的距离 
 */ 
function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0') 
{ 
  $chl = urlencode($chl); 
  echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.' 
  &cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.' 
  " widhtHeight="'.$widhtHeight.'"/>'; 
}

使用PHP二维码生成类库PHP QR Code生成二维码

PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpqrcode.sourceforge.net/。

下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2。phpqrcode.php提供了一个关键的png()方法,其中参数$text表示生成二位的的信息文本;参数$outfile表示是否输出二维码图片文件,默认否;参数$level表示容错率,也就是有被覆盖的区域还能识别,分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);参数$size表示生成图片大小,默认是3;参数$margin表示二维码周围边框空白区域间距值;参数$saveandprint表示是否保存二维码并显示。

public static function png($text, $outfile=false, $level=QR_ECLEVEL_L, $size=3, $margin=4, 
$saveandprint=false) 
{ 
  $enc = QRencode::factory($level, $size, $margin); 
  return $enc->encodePNG($text, $outfile, $saveandprint=false); 
}

调用PHP QR Code非常简单,如下代码即可生成一张内容为"https://3water.com"的二维码.

include 'phpqrcode.php'; 
QRcode::png('https://3water.com');

那么实际应用中,我们会在二维码的中间加上自己的LOGO,已增强宣传效果。那如何生成含有logo的二维码呢?其实原理很简单,先使用PHP QR Code生成一张二维码图片,然后再利用php的image相关函数,将事先准备好的logo图片加入到刚生成的原始二维码图片中间,然后重新生成一张新的二维码图片。

include 'phpqrcode.php'; 
$value = 'https://3water.com'; //二维码内容 
$errorCorrectionLevel = 'L';//容错级别 
$matrixPointSize = 6;//生成图片大小 
//生成二维码图片 
QRcode::png($value, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = 'logo.png';//准备好的logo图片 
$QR = 'qrcode.png';//已经生成的原始二维码图 
 
if ($logo !== FALSE) { 
  $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, '3water.png'); 
echo '<img src="3water.png">';

由于二维码允许有一定的容错性,一般的二维码即使在遮住部分但仍然能够解码,经常我们扫描二维码的时候扫描到甚至不到一半时就能解码扫描结果,这是因为生成器会将部分信息重复表示来提高其容错度,这就是为什么我们在二维码中间加个LOGO图片并不影响解码结果的原因。

以上所述就是本文的全部内容了,希望对大家熟练掌握php生产二维码能够有所帮助。

PHP 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
ajax php 实现写入数据库
Sep 02 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
PHP循环结构实例讲解
Feb 10 PHP
深入理解php printf() 输出格式化的字符串
May 23 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP判断函数是否被定义的方法
Jun 21 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 PHP
使用PHP编写发红包程序
Jul 22 #PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 #PHP
php 把数字转换成汉字的代码
Jul 21 #PHP
通过Email发送PHP错误的方法
Jul 20 #PHP
php实现编辑和保存文件的方法
Jul 20 #PHP
php数组生成html下拉列表的方法
Jul 20 #PHP
php生成过去100年下拉列表的方法
Jul 20 #PHP
You might like
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python中标准模块importlib详解
2017/04/16 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
枚举与#define宏的区别
2014/04/30 面试题
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
公务员培训自我鉴定
2013/09/19 职场文书
采购文员岗位职责
2013/11/20 职场文书
项目总经理岗位职责
2014/02/14 职场文书
新教师工作感言
2014/02/16 职场文书
基督教婚礼主持词
2014/03/14 职场文书
信仰心得体会
2014/09/05 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
Go语言编译原理之变量捕获
2022/08/05 Golang