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 相关文章推荐
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
详解PHP中的Traits
Jul 29 PHP
php数组冒泡排序算法实例
May 06 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
用php如何解决大文件分片上传问题
Jul 07 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
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
对python 命令的-u参数详解
2018/12/03 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
八年级物理教学反思
2014/01/19 职场文书
贷款委托书范本
2014/04/08 职场文书
工程承包协议书
2014/10/20 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL