首先,下载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 如何在一个for循环中遍历两个列表

    是我在看<笨方法学python>过程中发现有一行代码看不懂--" for sentence in snippet, phrase:",所以研究了半天,感觉挺有收获的.所 ...

  2. JVM命令工具开发

    1.查看tomcat7_8080的gc状态 $ jps -v | awk '/tomcat7_8080/{print $1}' | xargs jstat -gcutil 2.查看tomcat7_80 ...

  3. [js高手之路]this知多少

    this关键字在javascript中的变化非常的灵活,如果用的不好就非常恶心,用的好,程序就非常的优雅,灵活,飘逸.所以掌握this的用法,是每一个前端工程师必知必会的.而且这个也是一些大公司笔试中 ...

  4. JAVA奇技淫巧简化代码之lombok

    背景 最近在做一个小功能,又不想在原有体态臃肿的项目中追加,为了调试方便并且可以快速开发就采用了springboot.由于使用了JPA,建了几个类,然后通过IDE去生成其属性的构造器.getter.s ...

  5. Struts配置的各种视图转发类型

    上面是struts1的视图转发2中类型:1.内部请求转发(来定向到某个视图):2.浏览器重定向(来定向到某个视图). 浏览器重定向(直接访问路径)不能访问WEB-INF的jsp文件,只有服务器内部转发 ...

  6. Thread.interrupt()方法理解

    原博客地址: 多线程编程 实战篇 (四) 不客气地说,至少有一半人认为,线程的"中断"就是让线程停止. 如果你也这么认为,那你对多线程编程还没有入门. 在java中,线程的中断(i ...

  7. node.js后台快速搭建在阿里云(一)(express篇)

    前期准备 阿里云服务器 node.js pm2 express nginx linux(推荐教程:鸟哥的私房菜) 简介 嗯……我只是个前端而已 前段时间写过一个.net mvc的远程发布,关于.net ...

  8. AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析

    先看个效果图: 上一篇中,我们留了问题,在 Tv Home 界面这种很常见聚焦卡位放大动画效果,我们这一篇就来看看 Leanback 库是怎么实现的. 如果要我们自己实现的话,思路应该不难,就是写个放 ...

  9. php 数据访问练习:租房查询页面

    <html> <head> <title></title> <meta charset="UTF-8"/> <li ...

  10. iOS 环信集成单聊界面,出现消息重复问题

    解决办法很简单,数据重复就是EaseMessageViewController和ChatViewController重复调用了这个吧?//通过会话管理者获取收发消息 [self tableViewDi ...