php生成二维码


Posted in PHP onAugust 10, 2015

随着科技的进步,大家经常见到条形码和二维码,特别是智能手机时代这些码更显得活跃了,今天我给大家分享下如何使用PHP生成二维码,至于如何生成二维码,一般常用的试调用google的开放api来生成,言归正传,直接上代码了:

第一种方法:

利用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">';

方法二:

不废话了,直接上代码了:

<?php 
function UPCAbarcode($code) { 
 $lw = 2; $hi = 100; 
 $Lencode = array('0001101','0011001','0010011','0111101','0100011', 
   '0110001','0101111','0111011','0110111','0001011'); 
 $Rencode = array('1110010','1100110','1101100','1000010','1011100', 
   '1001110','1010000','1000100','1001000','1110100'); 
 $ends = '101'; $center = '01010'; 
 /* UPC-A Must be 11 digits, we compute the checksum. */ 
 if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); } 
 /* Compute the EAN-13 Checksum digit */ 
 $ncode = '0'.$code; 
 $even = 0; $odd = 0; 
 for ($x=0;$x<12;$x++) { 
 if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; } 
 } 
 $code.=(10 - (($odd * 3 + $even) % 10)) % 10; 
 /* Create the bar encoding using a binary string */ 
 $bars=$ends; 
 $bars.=$Lencode[$code[0]]; 
 for($x=1;$x<6;$x++) { 
 $bars.=$Lencode[$code[$x]]; 
 } 
 $bars.=$center; 
 for($x=6;$x<12;$x++) { 
 $bars.=$Rencode[$code[$x]]; 
 } 
 $bars.=$ends; 
 /* Generate the Barcode Image */ 
 $img = ImageCreate($lw*95+30,$hi+30); 
 $fg = ImageColorAllocate($img, 0, 0, 0); 
 $bg = ImageColorAllocate($img, 255, 255, 255); 
 ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg); 
 $shift=10; 
 for ($x=0;$x<strlen($bars);$x++) { 
 if (($x<10) || ($x>=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; } 
 if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; } 
 ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color); 
 } 
 /* Add the Human Readable Label */ 
 ImageString($img,4,5,$hi-5,$code[0],$fg); 
 for ($x=0;$x<5;$x++) { 
 ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg); 
 ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg); 
 } 
 ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg); 
 /* Output the Header and Content. */ 
 header("Content-Type: image/png"); 
 ImagePNG($img); 
} 
?>

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

以上通过两种方法介绍php生成二维码,希望能够帮助到大家。

PHP 相关文章推荐
cache_lite试用
Feb 14 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
php不写闭合标签的好处
Mar 04 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 PHP
PHP 实现链式操作
Mar 09 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 #PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 #PHP
6个超实用的PHP代码片段
Aug 10 #PHP
解读PHP中的垃圾回收机制
Aug 10 #PHP
php实现多城市切换特效
Aug 09 #PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 #PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 #PHP
You might like
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
原生JS实现的双色球功能示例
2018/02/02 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
numpy自动生成数组详解
2017/12/15 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python numpy实现rolling滚动案例
2020/06/08 Python
浅析NumPy 切片和索引
2020/09/02 Python
在购买印度民族服饰:Soch
2020/09/15 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
2015年出纳个人工作总结
2015/04/02 职场文书
庆七一晚会主持词
2015/06/30 职场文书
Python基础之元编程知识总结
2021/05/23 Python
深入理解pytorch库的dockerfile
2022/06/10 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技