生成带logo的微信二维码详解

在做项目时候研究了好久希望大家都能用到嘻嘻!!!

1.首先封装二维码生成函数

//生成二维码
    public function getQrcode(){
        $access_token = (new WeiXin)->AccessToken();
        $scene='扫码传过去的参数';
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$access_token}";
        $qrcode = '{"action_name":"QR_LIMIT_STR_SCENE","action_info":{"scene": {"scene_str":"'.$scene.'"}}}';
        $result = $this->https_request($url,$qrcode);
        $jsoninfo = json_decode($result,true);
        $ticket = $jsoninfo['ticket'];
        $url2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket";
        return $url2;
    }
    // 发送接口请求
    private function https_request($url,$data = null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;

    }

2.再封装一个生成LOGO的函数

//生成二维码图片
    private function createcode($qrcodeurl){
    $createcode=Yii::$app->params['imgUploadUrl'].'/store/code/'.$storeIdImg;
    if(!is_dir($codeurl)) mkdir($codeurl,0777,true);
    file_put_contents($createcode, file_get_contents($qrcodeurl));
    return $createcode;
    }
    //生成logo图片
    private function createlogo(){
    $createlogo=Yii::$app->params['imgUploadUrl'].'/store/logo/'.$logoIdImg;
    $store_door_img=Yii::$app->session->get('store')['store_door_img'];
    $store_logo=Yii::$app->session->get('store')['store_logo'];
    if($store_door_img){
    $logo=Yii::$app->params['imgUrl'].$store_door_img;
    }elseif($store_logo){
    $logo=Yii::$app->params['imgUrl'].$store_logo;
    }else{
    $logo=Yii::$app->params['imgUrl'].'/logo.png';
    }
    if(!is_dir($logourl)) mkdir($logourl,0777,true);
    file_put_contents($createlogo, file_get_contents($logo));
    $createlogo=Yii::$app->params['imgUrl'].'/store/logo/'.$logoIdImg;
    return $createlogo;

    }

3.通过函数合成logo

public function actionMyqrcode(){


    //生成logo
    $logo=$this->createlogo();
    $a=Yii::$app->params['imgUrl'].'/store/code/'.Yii::$app->session['store']['store_id'].'.png';
    if(@file_get_contents($a)){
    $codelogo=$this->createlogocode($a,$logo);
    return $this->renderPartial('myqrcode',['logo'=>$logo,'code'=>$codelogo]);
    }
    //生成微信二维码
    $qrcodeurl = $this->getQrcode();
    $QR=$this->createcode($qrcodeurl);
    //生成中间带logo的二维码
    $codelogo=$this->createlogocode($QR,$logo);
    return $this->renderPartial('myqrcode',['logo'=>$logo,'code'=>$codelogo]);

    }

//生成中间带logo的二维码
    private function createlogocode($QR,$logo){
    $storeUrl = Yii::$app->params['imgUploadUrl'].'/store/';
    $codeurl = $storeUrl.'storecode/';
    $storeIdImg = Yii::$app->session['store']['store_id'].'.png';
    $createcode=Yii::$app->params['imgUploadUrl'].'/store/storecode/'.$storeIdImg;
    $bcornerUpload=Yii::$app->params['imgUploadUrl'].'/store/corner.png';
    $bcorner=Yii::$app->params['imgUrl'].'/store/corner.png';


    if(!is_dir($codeurl)) mkdir($codeurl,0777,true);
        $QR = imagecreatefromstring(file_get_contents($QR));
    $logo = imagecreatefromstring(file_get_contents($logo));
    $QR_width = imagesx($QR);
    $QR_height = imagesy($QR);


    if(!@file_get_contents($bcorner)){
    file_put_contents($bcornerUpload,file_get_contents('".$_SERVER['SERVER_NAME']."/images/corner.png'));
    }
//圆角图片
$corner = imagecreatefromstring(file_get_contents($bcorner));
$corner_width = imagesx($corner);
$corner_height = imagesy($corner);


//计算圆角图片的宽高及相对于二维码的摆放位置,将圆角图片拷贝到二维码中央
$corner_qr_height = $corner_qr_width = $QR_width/5;
$from_width = ($QR_width-$corner_qr_width)/2;
imagecopyresampled($QR, $corner, $from_width, $from_width, 0, 0, $corner_qr_width, $corner_qr_height, $corner_width, $corner_height);


    $logo_width = imagesx($logo);
    $logo_height = imagesy($logo);
$logo_qr_height = $logo_qr_width = $QR_width/5 - 6;
$from_width = ($QR_width-$logo_qr_width)/2;
    imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
imagepng($QR,$createcode);
    return Yii::$app->params['imgUrl'].'/store/storecode/'.$storeIdImg;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值