Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码)

首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下。
Index_index.html(模板可自行配置)

  1. <form action="{:U('index/index')}" enctype="multipart/form-data"  method = "post">

  2.     <b>尺寸大小:</b>

  3.         <input type="text" name = "matrixPointSize">    <br>

  4.     <b>边距大小:</b>

  5.         <select class="form-control" name="matrixMarginSize" >

  6.             <option value="1" selected="selected">1px</option>

  7.             <option value="2">2px</option>

  8.             <option value="3">3px</option>

  9.             <option value="4">5px</option>

  10.         </select><br>

  11.     <b>容错级别:</b>

  12.         <select class="form-control" name="errorCorrectionLevel" id="errorCorrectionLevel">

  13.         <option value="L">L - Low (7%)</option>

  14.         <option value="M" selected="selected">M - Medium (15%)</option>

  15.         <option value="Q">Q - Quartile (25%)</option>

  16.         <option value="H">H - High (30%)</option>

  17.         </select><br>

  18.     <b>二维码内容:</b>

  19.         <input type="text" name = "content">    <br>

  20.     <b>二维码logo:</b>

  21.         <input type="file" name = "test" /><br><br>

  22.     <input type="submit" value = "生成二维码">

  23. </form>

  24. <img src="{$img}" alt="">

控制器:IndexController.class.php

  1. <?php

  2. namespace Home\Controller;

  3. use Think\Controller;

  4. class IndexController extends Controller {

  5.     public function index(){

  6.         $config = array(

  7.             'maxSize'    =>    3145728,

  8.             'rootPath'   =>    './upload/',

  9.             'savePath'   =>    '',

  10.             'saveName'   =>    array('uniqid',''),

  11.             'exts'       =>    array('jpg', 'gif', 'png', 'jpeg'),

  12.             'autoSub'    =>    true,

  13.             'subName'    =>    array('date','Ymd'),

  14.         );

  15.         $upload = new \Think\Upload($config);// 实例化上传类

  16.         // 上传单个文件

  17.         $info   =   $upload->uploadOne($_FILES['test']);

  18.         if(!$info) {// 上传错误提示错误信息

  19.             $qrcode_path_new = './Public/Home/images/code'.'_'.date("Ymdhis").'.png';

  20.             $content = $_POST['content'];

  21.             $matrixPointSize = $_POST['matrixPointSize'];

  22.             $matrixMarginSize = $_POST['matrixMarginSize'];

  23.             $errorCorrectionLevel = $_POST['errorCorrectionLevel'];

  24.             makecode_no_pic($content,$qrcode_path_new,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel);

  25.             $this->assign('img',$qrcode_path_new);

  26.         }else{

  27.             $qrcode_path = "./upload/".$info['savepath'].$info['savename'];

  28.             $content = $_POST['content'];

  29.             $matrixPointSize = $_POST['matrixPointSize'];

  30.             $matrixMarginSize = $_POST['matrixMarginSize'];

  31.             $errorCorrectionLevel = $_POST['errorCorrectionLevel'];

  32.             $url = "./upload/qrcode/".date("YmdHis").".png";

  33.             makecode($qrcode_path,$content,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel,$url);

  34.             $this->assign('img',$url);

  35.             }

  36.         $this->display();

  37.     }

  38. }

在项目Application/Home/Common下新建function.php

  1. <?php

  2. function makecode($qrcode_path,$content,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel,$url){

  3.         /**     参数详情:$qrcode_path:logo地址; $content:需要生成二维码的内容;$matrixPointSize:二维码尺寸大小;$matrixMarginSize:生成二维码的边距;$errorCorrectionLevel:容错级别;$url:生成的带logo的二维码地址* */

  4.         ob_clean ();

  5.         Vendor('phpqrcode.phpqrcode');

  6.         $object = new \QRcode();

  7.         $qrcode_path_new = './Public/Home/images/code'.'_'.date("Ymdhis").'.png';//定义生成二维码的路径及名称

  8.         $object::png($content,$qrcode_path_new, $errorCorrectionLevel, $matrixPointSize, $matrixMarginSize);

  9.         $QR = imagecreatefromstring(file_get_contents($qrcode_path_new));//imagecreatefromstring:创建一个图像资源从字符串中的图像流

  10.         $logo = imagecreatefromstring(file_get_contents($qrcode_path));

  11.         $QR_width = imagesx($QR);// 获取图像宽度函数

  12.         $QR_height = imagesy($QR);//获取图像高度函数

  13.         $logo_width = imagesx($logo);// 获取图像宽度函数

  14.         $logo_height = imagesy($logo);//获取图像高度函数

  15.         $logo_qr_width = $QR_width / 4;//logo的宽度

  16.         $scale = $logo_width / $logo_qr_width;//计算比例

  17.         $logo_qr_height = $logo_height / $scale;//计算logo高度

  18.         $from_width = ($QR_width - $logo_qr_width) / 2;//规定logo的坐标位置

  19.         imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);

  20. /**     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 )

  21.          *      参数详情:$dst_image:目标图象连接资源。$src_image:源图象连接资源。$dst_x:目标 X 坐标点。 $dst_y:目标 Y 坐标点。 $src_x:源的 X 坐标点。$src_y:源的 Y 坐标点。$dst_w:目标宽度。$dst_h:目标高度。$src_w:源图象的宽度。$src_h:源图象的高度。

  22.          * */

  23. Header("Content-type: image/png");

  24.         //$url:定义生成带logo的二维码的地址及名称

  25.         imagepng($QR,$url);

  26.     }

  27.     function makecode_no_pic($content,$qrcode_path_new,$matrixPointSize,$matrixMarginSize,$errorCorrectionLevel){

  28.         ob_clean ();

  29.         Vendor('phpqrcode.phpqrcode');

  30.         $object = new \QRcode();

  31.         $object::png($content,$qrcode_path_new, $errorCorrectionLevel, $matrixPointSize, $matrixMarginSize);

  32.     }

  33. ?>

感谢原文作者:http://www.thinkphp.cn/topic/51726.html