Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例
首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下。
Index_index.html(模板可自行配置)
<form action="{:U('index/index')}" enctype="multipart/form-data" method = "post">
<b>尺寸大小:</b>
<input type="text" name = "matrixPointSize"> <br>
<b>边距大小:</b>
<select class="form-control" name="matrixMarginSize" >
<option value="1" selected="selected">1px</option>
<option value="2">2px</option>
<option value="3">3px</option>
<option value="4">5px</option>
</select><br>
<b>容错级别:</b>
<select class="form-control" name="errorCorrectionLevel" id="errorCorrectionLevel">
<option value="L">Low (7%)</option>
<option value="M" selected="selected">Medium (15%)</option>
<option value="Q">Quartile (25%)</option>
<option value="H">High (30%)</option>
</select><br>
<b>二维码内容:</b>
<input type="text" name = "content"> <br>
<b>二维码logo:</b>
<input type="file" name = "test" /><br><br>
<input type="submit" value = "生成二维码">
</form>
<img src="{$img}" alt="">
控制器:IndexController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
$config = array(
'maxSize' => 3145728,
'rootPath' => './upload/',
'savePath' => '',
'saveName' => array('uniqid',''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date','Ymd'),
);
$upload = new \Think\Upload($config);// 实例化上传类
// 上传单个文件
$info = $upload->uploadOne($_FILES['test']);
if(!$info) {// 上传错误提示错误信息
$qrcode_path_new = './Public/Home/images/code'.'_'.date("Ymdhis").'.png';
$content = $_POST['content'];
$matrixPointSize = $_POST['matrixPointSize'];
$matrixMarginSize = $_POST['matrixMarginSize'];
$errorCorrectionLevel = $_POST['errorCorrectionLevel'];
makecode_no_pic($content,$qrcode_path_new,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel);
$this->assign('img',$qrcode_path_new);
}else{
$qrcode_path = "./upload/".$info['savepath'].$info['savename'];
$content = $_POST['content'];
$matrixPointSize = $_POST['matrixPointSize'];
$matrixMarginSize = $_POST['matrixMarginSize'];
$errorCorrectionLevel = $_POST['errorCorrectionLevel'];
$url = "./upload/qrcode/".date("YmdHis").".png";
makecode($qrcode_path,$content,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel,$url);
$this->assign('img',$url);
}
$this->display();
}
}
然后在项目Application/Home/Common下新建function.php
<?php
function makecode($qrcode_path,$content,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel,$url){
/** 参数详情:
* $qrcode_path:logo地址
* $content:需要生成二维码的内容
* $matrixPointSize:二维码尺寸大小
* $matrixMarginSize:生成二维码的边距
* $errorCorrectionLevel:容错级别
* $url:生成的带logo的二维码地址
* */
ob_clean ();
Vendor('phpqrcode.phpqrcode');
$object = new \QRcode();
$qrcode_path_new = './Public/Home/images/code'.'_'.date("Ymdhis").'.png';//定义生成二维码的路径及名称
$object::png($content,$qrcode_path_new, $errorCorrectionLevel, $matrixPointSize, $matrixMarginSize);
$QR = imagecreatefromstring(file_get_contents($qrcode_path_new));//imagecreatefromstring:创建一个图像资源从字符串中的图像流
$logo = imagecreatefromstring(file_get_contents($qrcode_path));
$QR_width = imagesx($QR);// 获取图像宽度函数
$QR_height = imagesy($QR);//获取图像高度函数
$logo_width = imagesx($logo);// 获取图像宽度函数
$logo_height = imagesy($logo);//获取图像高度函数
$logo_qr_width = $QR_width / 4;//logo的宽度
$scale = $logo_width / $logo_qr_width;//计算比例
$logo_qr_height = $logo_height / $scale;//计算logo高度
$from_width = ($QR_width - $logo_qr_width) / 2;//规定logo的坐标位置
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
/** imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
* 参数详情:
* $dst_image:目标图象连接资源。
* $src_image:源图象连接资源。
* $dst_x:目标 X 坐标点。
* $dst_y:目标 Y 坐标点。
* $src_x:源的 X 坐标点。
* $src_y:源的 Y 坐标点。
* $dst_w:目标宽度。
* $dst_h:目标高度。
* $src_w:源图象的宽度。
* $src_h:源图象的高度。
* */
Header("Content-type: image/png");
//$url:定义生成带logo的二维码的地址及名称
imagepng($QR,$url);
}
function makecode_no_pic($content,$qrcode_path_new,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel){
ob_clean ();
Vendor('phpqrcode.phpqrcode');
$object = new \QRcode();
$object::png($content,$qrcode_path_new, $errorCorrectionLevel, $matrixPointSize, $matrixMarginSize);
}
在没有图片上传的情况下,生成我二维码只是单纯的二维码,只有在有logo上传的时候,才会生成带logo的二维码。
如下图,即没有logo时生成的二维码:

下图即在有图片被上传的时候生成的二维码:

案例源码下载:ThinkPHP_3.2.2.zip
pgpqrcode下载:phpqrcode.rar
Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例的更多相关文章
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一 ...
- QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)
原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) http://blog.csdn.net/johnsu ...
- windows phone 生产含logo的二维码
这几天了解二维码了解的比较多,不过就是没深入了解.google了一下生产含logo二维码的思路,就是把logo给画到生成的二维码上,还是因为二维码的纠错能力足够好啊,用Graphics对图片进行操作? ...
- Android Multimedia框架总结(二十三)MediaCodec补充及MediaMuxer引入(附案例)
请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53729575 前言:前面几章都是 ...
- phpqrcode 生成二维码
这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...
- ThinkPHP框架整合phpqrcode生成二维码DEMO
ThinkPHP框架发展到今天功能已经变得是非常强大了,但是ThinkPHP框架中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能.想使用phpqrcode首先就要把p ...
- 使用phpqrcode生成二维码
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手.然而,我们可以使用php ...
- phpqrcode生成动态二维码简单实例
这是一个利用phpqrcode生成动态二维码简单实例,比微信官方提供的接口还要好用.二维码是动态的,不用生成图片,可自定义二维码大小,间隙,跳转地址等. 参数设置: include_once 'php ...
- 使用PHP类库PHPqrCode生成二维码
PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, 查看地址:http://phpqrcode.sourceforge.net/. 下载官 ...
随机推荐
- 初学python类
边看python官方2.7的文档,一边动手测试了一些例子加深自己的印象. 官方文档的网址:http://python.usyiyi.cn/python_278/tutorial/classes.htm ...
- Run Performance Testing Which Was Distributed To Multiple Test Agents
How to solve the VS installed machine cannot run performance testing by .testsettings file, which wi ...
- ubuntu安装mysql可视化工具MySQL-workbench及简单操作
一.使用命令行在ubuntu下安装mysql可视化工具MySQL-workbench Step1:安装MySQL-workbench 方案一:如果你已经装好mysql的相关服务,那么直接使用如下命令即 ...
- SqlBulkCopy 批量insert
1.获取要插入的数据datatable /// <summary> /// 从FMS取银行信息 /// </summary> /// <returns></r ...
- Struts2学习笔记(一)——环境搭建
1.创建Web项目并导入Struts2的主要jar包 在MyEclipse中新建Web项目,然后在lib目录下添加必须的jar包: 2.创建jsp页面 1).创建test.jsp页面: <bod ...
- C4.5算法(摘抄)
1. C4.5算法简介 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C ...
- The C++ Programming Language 学习笔记 第7章 函数
1.关于内联函数(inline) 借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); } inline描述符给编译器一个提示,要求 ...
- Android Studio的Terminal配置
1.首先检查你的setting设置如下图 2.如果是已经ok的,请在你的Android sdk的文件夹目录下找到adb.exe,并配置环境变量 3.重启as,在terminal内输入 -adb hel ...
- 读取xml文件中节点
/// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...
- Windows上安装nvm--nodejs版本管理器
nvm最新的下载地址 Node版本管理器--nvm,可以运行在多种操作系统上.nvm for windows 是使用go语言编写的软件. 我电脑使用的是Windows操作系统,所以我要记录下在此操作系 ...