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 相关文章推荐
一家之言的经验之谈php+mysql扎实个人基本功
Mar 27 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
php json_encode奇怪问题说明
Sep 27 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
php生成静态页面的简单示例
Apr 17 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
javascript如何实现create方法
2019/11/04 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
Django如何配置mysql数据库
2018/05/04 Python
python url 参数修改方法
2018/12/26 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
应急处置方案
2014/06/16 职场文书
学习十八大标语
2014/10/09 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
团队拓展训练心得体会
2016/01/12 职场文书