转载【TP3.2】:使用PHP生成二维码
转载:在网上down了一个二维码插件PHPQRcode,整合到了ThinkPHP 3.2.3,然后写了个外部自定义函数直接调用生成二维码,根据参数不同有不同尺寸效果,整合其实挺简单,分享给大家!
今天做项目时要用到生成二维码这个功能,就研究了一下二维码。二维码的原理可以先看看,理解理解
环境支持:GD库、文件夹可写权限
1、原版的PHPQRcode下载地址>> :http://ncu.dl.sourceforge.net/project/phpqrcode/releases/phpqrcode-2010100721_1.1.4.zip
2、下载后,只需要其中一个文件就可以完成本功能了,如下图所示文件:
3、将phpqrcode.php放置到:ThinkPHP/Library/Vendor/PHPQRcode/phpqrcode.php (注意大小写哦)
注意:现在放置的是thinkPHP默认的第三方类库目录。
4、创建用户自定义函数文件Application/Home/Common/function.php,放置如下函数:
/**
* 功能:生成二维码
* @param string $qr_data 手机扫描后要跳转的网址
* @param string $qr_level 默认纠错比例 分为L、M、Q、H四个等级,H代表最高纠错能力
* @param string $qr_size 二维码图大小,1-10可选,数字越大图片尺寸越大
* @param string $save_path 图片存储路径
* @param string $save_prefix 图片名称前缀
*/
function createQRcode($save_path,$qr_data='PHP QR Code :)',$qr_level='L',$qr_size=4,$save_prefix='qrcode'){
if(!isset($save_path)) return '';
//设置生成png图片的路径
$PNG_TEMP_DIR = & $save_path;
//导入二维码核心程序
vendor('PHPQRcode.phpqrcode'); //PHPQRcode是文件夹名字,phpqrcode就代表phpqrcode.php文件名
//检测并创建生成文件夹
if (!file_exists($PNG_TEMP_DIR)){
mkdir($PNG_TEMP_DIR);
}
$filename = $PNG_TEMP_DIR.'test.png';
$errorCorrectionLevel = 'L';
if (isset($qr_level) && in_array($qr_level, array('L','M','Q','H'))){
$errorCorrectionLevel = & $qr_level;
}
$matrixPointSize = 4;
if (isset($qr_size)){
$matrixPointSize = & min(max((int)$qr_size, 1), 10);
}
if (isset($qr_data)) {
if (trim($qr_data) == ''){
die('data cannot be empty!');
}
//生成文件名 文件路径+图片名字前缀+md5(名称)+.png
$filename = $PNG_TEMP_DIR.$save_prefix.md5($qr_data.'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png';
//开始生成
QRcode::png($qr_data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
} else {
//默认生成
QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);
}
if(file_exists($PNG_TEMP_DIR.basename($filename)))
return basename($filename);
else
return FALSE;
}
5、开始调用,假设通过网址/index.php/Home/Index/qrcode访问,那我们相应的在Application/Home/Controller/IndexController.class.php文件里加入方法,如下:
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
/*
* 自定义生成二维码 -xzz0815
* 使用vender里第三方类库文件,使用GD库
*/
public function qrcode(){
$save_path = isset($_GET['save_path'])?$_GET['save_path']:'./Public/qrcode/'; //图片存储的绝对路径
$web_path = isset($_GET['save_path'])?$_GET['web_path']:'/Public/qrcode/'; //图片在网页上显示的路径
$qr_data = isset($_GET['qr_data'])?$_GET['qr_data']:'http://www.xxiangfang.com/';
$qr_level = isset($_GET['qr_level'])?$_GET['qr_level']:'H';
$qr_size = isset($_GET['qr_size'])?$_GET['qr_size']:'10';
$save_prefix = isset($_GET['save_prefix'])?$_GET['save_prefix']:'ZETA';
if($filename = createQRcode($save_path,$qr_data,$qr_level,$qr_size,$save_prefix)){
$pic = $web_path.$filename;
}
echo "<img src='".$pic."'>";
} }
6、附不同参数生成的不同图片尺寸:
7、生成的效果如下:
8、直接下载文件包地址传送门:http://www.thinkphp.cn//code/download/id/1283.html
转载【TP3.2】:使用PHP生成二维码的更多相关文章
- 使用jquery.qrcode生成二维码及常见问题解决方案
转载文章 使用jquery.qrcode生成二维码及常见问题解决方案 一.jquery.qrcode.js介 jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery ...
- 转载---QRcodeJS生成二维码
QRCode.js QRCode.js是依赖JS生成二维码的.主要是通过获取DOM的标签,再通过HTML5Canvas绘制而成,不依赖JQ 获取QRCode.js Github-Page:qrcode ...
- 生成二维码图片(tp3.2)
下载二维码库 放在适合的地方 生成二维码 这里存在表里 效果(查看时)
- 使用jquery-qrcode生成二维码(转载)
一.使用jquery-qrcode生成二维码 先简单说一下jquery-qrcode,这个开源的三方库(可以从https://github.com/jeromeetienne/jquery-qrcod ...
- js生成二维码(jquery自带)
//引入js<script type="text/javascript" src="js/jquery.js"></script> &l ...
- C# Qrcode生成二维码支持中文,带图片,带文字 2015-01-22 15:11 616人阅读 评论(1) 收藏
1.下载Qrcode库源码,下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library 2.打开源码时,部分类库 ...
- thinkphp整合系列之phpqrcode生成二维码
php生成二维码其实挺简单的:当然指的是使用qrcode类库: 因此关于是否要写这篇博客:我是犹豫了再三的: 不过最后还是决定写下吧:如果有童鞋急着用:就可以直接引了: 再个也可以作为即将写的文章微信 ...
- 使用PHP二维码生成类库PHP QR Code生成二维码
<?php include 'phpqrcode.php'; $value = 'http://www.helloweba.com'; //二维码内容 $errorCorrectionLevel ...
- Laravel5中通过SimpleQrCode扩展包生成二维码实例
Simple Qrcode是基于强大的Bacon/BaconQrCode库开发的针对Laravel框架的封装版本,用于在Laravel中为生成二维码提供接口. 安装SimpleQrCode扩展包 在项 ...
随机推荐
- 新手学习selenium路线图(老司机亲手绘制)-学前篇
前言: 本来这篇是只在微信公众号(yoyoketang)上发布的,最近一搜,发现本很多人copy(copy公众号的,图片是加载不出来的)了,还没注明出处,不想多说什么,博客上也同步更新这篇吧! 最近群 ...
- mac securecrt无法记住密码的解决方法
打开secureCRT,菜单preferences--general,找到mac options.然后去掉Use KeyChain选项,这样每次连接服务器后就会自动保存密码了.不同的版本可能这个选项的 ...
- strcmp实现
#include<stdio.h> #include<assert.h> int my_strcmp(const char*a,const char*b) { while(*a ...
- bzoj 1975 [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1758 Solved: 557[Submit][Statu ...
- iOS:制作一个简易的计算器
初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有问题的,不是很完美,可能还有一些bug,再接再厉. // // ViewController.m // 计算器 // // Created ...
- leetcode414-第三大的数
给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2 ...
- 又议android中的manifest清单文件
写过java程序的人,都知道了配置文件时java实现各种各样的框架的一大利器,manifest清单文件对android的作用自然不言而喻,然而他里面究竟定义了些什么,并且他是如何加载到程序中的. 他里 ...
- ASP.NET MVC 编程参考
ASP.NET MVC 编程参考 转载请注明出处:http://surfsky.cnblogs.com MVC 参考 http://msdn.microsoft.com/zh-cn/dd40 ...
- Java中正则匹配性能测试
工作中经常会用到在文本中每行检索某种pattern,刚才测试了三种方式,发现实际性能和预想的有区别 方式1: 直接字符串的matches方法,[string.matches("\\d+&qu ...
- 转:好用 Eclipse插件收集与说明
http://developer.51cto.com/art/201007/214478.htm