thinkphp用phpqrcode生成二维码(含中间带logo、临时二维码)或生成微信二维码海报的方法

前期准备:
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)

    /**

  1.      * 生成二维码图片(可生成带logo的二维码)
  2.      *
  3.      * @param string $data 二维码内容
  4.      *         示例数据:weixin://wxpay/bizpayurl?pr=0tELnh9
  5.      * @param string $saveDir 保存路径名(示例:Qrcode)
  6.      * @param string $logo 图片logo路径
  7.      *         示例数据:./Public/Default/logo.jpg
  8.      *         注意事项:1、前面记得带点(.);2、建议图片Logo正方形,且为jpg格式图片;3、图片大小建议为xx*xx
  9.      * 
  10.      * 注意:一般用于生成带logo的二维码
  11.      * 
  12.      * @return
  13.      */
  14.     public function createQrcode($data,$saveDir="Qrcode",$logo = "")
  15.     {
  16.         $rootPath = C("IMAGE_ROOT_PATH");
  17.         $path = $saveDir.'/'.date("Y-m-d").'/';
  18.         $fileName = uniqid();
  19.         if (!is_dir($rootPath.$path))
  20.         {
  21.             mkdir($rootPath.$path,0777,true);
  22.         }
  23.         $originalUrl = $path.$fileName.'.png';
  24.         
  25.         Vendor('phpqrcode.phpqrcode');
  26.         $object = new \QRcode();
  27.         $errorCorrectionLevel = 'L';    //容错级别
  28.         $matrixPointSize = 20;            //生成图片大小(这个值可以通过参数传进来判断)
  29.         $object->png($data,$rootPath.$originalUrl,$errorCorrectionLevel, $matrixPointSize, 2);
  30.         
  31.         //判断是否生成带logo的二维码
  32.         if(file_exists($logo))
  33.         {
  34.             $QR = imagecreatefromstring(file_get_contents($rootPath.$originalUrl));        //目标图象连接资源。
  35.             $logo = imagecreatefromstring(file_get_contents($logo));    //源图象连接资源。
  36.             
  37.             $QR_width = imagesx($QR);            //二维码图片宽度
  38.             $QR_height = imagesy($QR);            //二维码图片高度
  39.             $logo_width = imagesx($logo);        //logo图片宽度
  40.             $logo_height = imagesy($logo);        //logo图片高度
  41.             $logo_qr_width = $QR_width / 4;       //组合之后logo的宽度(占二维码的1/5)
  42.             $scale = $logo_width/$logo_qr_width;       //logo的宽度缩放比(本身宽度/组合后的宽度)
  43.             $logo_qr_height = $logo_height/$scale;  //组合之后logo的高度
  44.             $from_width = ($QR_width - $logo_qr_width) / 2;   //组合之后logo左上角所在坐标点
  45.             
  46.             //重新组合图片并调整大小
  47.             //imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
  48.             imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
  49.             
  50.             //输出图片
  51.             imagepng($QR, $rootPath.$originalUrl);
  52.             imagedestroy($QR);
  53.             imagedestroy($logo);
  54.         }
  55.         
  56.         $result['errcode'] = 0;
  57.         $result['errmsg'] = 'ok';
  58.         $result['data'] = $originalUrl;
  59.         return $result;
  60.     
  61.     }
  62.     
  63.     /**
  64.      * 生成临时二维码图片
  65.      * 这里返回的是base64进制图片
  66.      * 一般用于微信扫码支付二维码生成场景
  67.      *
  68.      * @param string $data 二维码内容
  69.      *         示例数据:http://www.tf4.cn或weixin://wxpay/bizpayurl?pr=0tELnh9
  70.      *
  71.      * @return
  72.      */
  73.     public function createTempQrcode($data)
  74.     {
  75.         Vendor('phpqrcode.phpqrcode');
  76.         $object = new \QRcode();
  77.         $errorCorrectionLevel = 'L';    //容错级别
  78.         $matrixPointSize = 5;            //生成图片大小
  79.         
  80.         //打开缓冲区
  81.         ob_start();
  82.         //生成二维码图片
  83.         $returnData = $object->png($data,false,$errorCorrectionLevel, $matrixPointSize, 2);
  84.         //这里就是把生成的图片流从缓冲区保存到内存对象上,使用base64_encode变成编码字符串,通过json返回给页面。
  85.         $imageString = base64_encode(ob_get_contents());
  86.         //关闭缓冲区
  87.         ob_end_clean();
  88.         $base64 = "data:image/png;base64,".$imageString;
  89.         
  90.         $result['errcode'] = 0;
  91.         $result['errmsg'] = 'ok';
  92.         $result['data'] = $base64;
  93.         return $result;
  94.     }

 

//生成海报把图片 $originalUrl 放到背景海报$timg1上
$timg1='./timg.jpg';

$timg= imagecreatefromstring(file_get_contents($timg1));        //目标图象连接资源。
$originalUrl = imagecreatefromstring(file_get_contents($originalUrl));    //源图象连接资源。
            $QR_width1 = imagesx($timg);            //背景海报图片宽度
            $QR_height1 = imagesy($timg);            //背景海报图片高度
            $logo_width1 = imagesx($originalUrl);        //logo图片宽度
            $logo_height1 = imagesy($originalUrl);        //logo图片高度
            $logo_qr_width1 = $QR_width1/ 4;       //组合之后logo的宽度(占二维码的1/5)
            $scale1 = $logo_width1/$logo_qr_width1;       //logo的宽度缩放比(本身宽度/组合后的宽度)
            $logo_qr_height1 = $logo_height1/$scale1;  //组合之后logo的高度
            $from_width1 = ($QR_width1 - $logo_qr_width1)/4 ;   //组合之后logo左上角所在坐标点
            
            //重新组合图片并调整大小
            //imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
            imagecopyresampled($timg, $originalUrl, $from_width1, $from_width1, 0, 0, $logo_qr_width1,$logo_qr_height1, $logo_width1, $logo_height1);
            //输出图片
            imagepng($timg,'./'.rand(1,100).'.jpg');
//$pic='./'.rand(1,100).'.jpg';//'生成后的图片重命名地址'
//imagepng($timg,$pic);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值