首先,下载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的二维码),附案例的更多相关文章

  1. QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)

    原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一 ...

  2. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)  http://blog.csdn.net/johnsu ...

  3. windows phone 生产含logo的二维码

    这几天了解二维码了解的比较多,不过就是没深入了解.google了一下生产含logo二维码的思路,就是把logo给画到生成的二维码上,还是因为二维码的纠错能力足够好啊,用Graphics对图片进行操作? ...

  4. Android Multimedia框架总结(二十三)MediaCodec补充及MediaMuxer引入(附案例)

    请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53729575 前言:前面几章都是 ...

  5. phpqrcode 生成二维码

    这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...

  6. ThinkPHP框架整合phpqrcode生成二维码DEMO

    ThinkPHP框架发展到今天功能已经变得是非常强大了,但是ThinkPHP框架中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能.想使用phpqrcode首先就要把p ...

  7. 使用phpqrcode生成二维码

    使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手.然而,我们可以使用php ...

  8. phpqrcode生成动态二维码简单实例

    这是一个利用phpqrcode生成动态二维码简单实例,比微信官方提供的接口还要好用.二维码是动态的,不用生成图片,可自定义二维码大小,间隙,跳转地址等. 参数设置: include_once 'php ...

  9. 使用PHP类库PHPqrCode生成二维码

    PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, 查看地址:http://phpqrcode.sourceforge.net/.    下载官 ...

随机推荐

  1. 初学python类

    边看python官方2.7的文档,一边动手测试了一些例子加深自己的印象. 官方文档的网址:http://python.usyiyi.cn/python_278/tutorial/classes.htm ...

  2. 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 ...

  3. ubuntu安装mysql可视化工具MySQL-workbench及简单操作

    一.使用命令行在ubuntu下安装mysql可视化工具MySQL-workbench Step1:安装MySQL-workbench 方案一:如果你已经装好mysql的相关服务,那么直接使用如下命令即 ...

  4. SqlBulkCopy 批量insert

    1.获取要插入的数据datatable /// <summary> /// 从FMS取银行信息 /// </summary> /// <returns></r ...

  5. Struts2学习笔记(一)——环境搭建

    1.创建Web项目并导入Struts2的主要jar包 在MyEclipse中新建Web项目,然后在lib目录下添加必须的jar包: 2.创建jsp页面 1).创建test.jsp页面: <bod ...

  6. C4.5算法(摘抄)

    1. C4.5算法简介 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法.它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类.C ...

  7. The C++ Programming Language 学习笔记 第7章 函数

    1.关于内联函数(inline)      借用一下书中的例子. inline int fac(int n) { ) ? :n*fac(n-); }      inline描述符给编译器一个提示,要求 ...

  8. Android Studio的Terminal配置

    1.首先检查你的setting设置如下图 2.如果是已经ok的,请在你的Android sdk的文件夹目录下找到adb.exe,并配置环境变量 3.重启as,在terminal内输入 -adb hel ...

  9. 读取xml文件中节点

    /// <summary> /// /// </summary> /// <param name="xmlpath">节点路径</para ...

  10. Windows上安装nvm--nodejs版本管理器

    nvm最新的下载地址 Node版本管理器--nvm,可以运行在多种操作系统上.nvm for windows 是使用go语言编写的软件. 我电脑使用的是Windows操作系统,所以我要记录下在此操作系 ...