thinphp 生成带头像的小程序码

    //获得二维码
    public function qrcode() {
            header('content-type:text/html;charset=utf-8');
            //配置APPID、APPSECRET
            $id=$_GET['uid'];
            $APPID = C('WX_APPID');
            $APPSECRET =C('WX_SECRET');  
            //获取access_token
            $access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";
            //缓存access_token
             session_start();
             $_SESSION['access_token'] = "";
             $_SESSION['expires_in'] = 0;
             $ACCESS_TOKEN = "";
             if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in'])){

                 $json =$this->httpRequest($access_token);
                 $json = json_decode($json,true);
                 // var_dump($json);
                 $_SESSION['access_token'] = $json['access_token'];
                 $_SESSION['expires_in'] = time()+7200;
                 $ACCESS_TOKEN = $json["access_token"];
             }else{

                 $ACCESS_TOKEN =  $_SESSION["access_token"];
             }

            $qcode = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$ACCESS_TOKEN;
            $data = array();
            $data['scene'] =$id;
            $data['page'] = 'pages/login/welcome';
            $data['width'] = "150";
            $param = json_encode($data);
            //POST参数
            $result = $this->httpRequest($qcode, $param,"POST");
            //生成二维码
            //$filename="/mnt/data/wwwroot/bzl/Qrcode/$id".".png";
            $filename="./Qrcode/$id".".png";
            $aa=file_put_contents($filename, $result);
               if($aa){

                //生成带水印的图片
                $image = new \Think\Image();
                //$img="https://".$_SERVER[SERVER_NAME]."/Qrcode/$id".".png";
                //$imgs="/mnt/data/wwwroot/bzl/Qrcode/$id".".png";
                 $imgs="./Qrcode/$id".".png"; //小程序码作为背景图
                //$bgm='./Public/heibeijingtu.jpg'; //
                //商品图
                $where['id']=$id;
                $user=M('user')->field('avatarurl')->where($where)->find();
                 $url=$user['avatarurl']; //用户微信头像
                 //将头像地址保存服务器文件
                 $img_file = file_get_contents($url);
                 $img_content= base64_encode($img_file);
                 //$new_file="/mnt/data/wwwroot/bzl/Public/avatarurl/$id".".png";
                  //$new_file"./aa-"."$id".".png";
                 $new_file= "./Public/avatarurl/$id".".png"; //微信头像保存的位置
                 if (file_put_contents($new_file, base64_decode($img_content)))
                 {  
                       //将头像缩放
                     $thumb="./Public/avatarurl/thumb-"."$id".".jpg"; //头像缩放保存位置
                     $image->open($new_file)->thumb(120, 120,\Think\Image::IMAGE_THUMB_FILLED)->save($thumb); //缩放头像
                     $res=$this->yuan_img($thumb); //生成圆形头像
                     $img_path="/mnt/data/wwwroot/bzl/Qrcode/circular/$id".".png";//圆形头像保存位置
                     $test=imagepng($res,$img_path);
                     $img="/mnt/data/wwwroot/bzl/Qrcode/watermark/$id".".png";//带圆形头像的二维码保存位置
                     $image->open($imgs)->water($img_path,\Think\Image::IMAGE_WATER_CENTER,100)->save($img);//圆形头像水印添加到二维码
                     $touxiang="https://".$_SERVER[SERVER_NAME]."/Qrcode/watermark/$id".".png"; //返回带头像的二维码
                     $touxiangs="https://".$_SERVER[SERVER_NAME]."/Qrcode/$id".".png";//返回二维码
                   $arr=array('msg'=>'成功','code'=>'0','img'=>$touxiang);
                   echo json_encode($arr,JSON_UNESCAPED_UNICODE);
                 }else{
                    $arr=array('msg'=>'成功','code'=>'0','img'=>$touxiangs);
                   echo json_encode($arr,JSON_UNESCAPED_UNICODE);
                 }
                
               }else{
                    $img="";
                    $arr=array('msg'=>'失败','code'=>'1','img'=>$img);
                    echo json_encode($arr,JSON_UNESCAPED_UNICODE);
               }
    }

 //生成圆形头像

    public function yuan_img($imgpath) {
        $ext     = pathinfo($imgpath);
        $src_img = null;
        switch ($ext['extension']) {
        case 'jpg':
            $src_img = imagecreatefromjpeg($imgpath);
            break;
        case 'png':
            $src_img = imagecreatefrompng($imgpath);
            break;
        }
        $wh  = getimagesize($imgpath);
        $w   = $wh[0];
        $h   = $wh[1];
        $w   = min($w, $h);
        $h   = $w;
        $img = imagecreatetruecolor($w, $h);
        //这一句一定要有
        imagesavealpha($img, true);
        //拾取一个完全透明的颜色,最后一个参数127为全透明
        $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
        imagefill($img, 0, 0, $bg);
        $r   = $w / 2; //圆半径
        $y_x = $r; //圆心X坐标
        $y_y = $r; //圆心Y坐标
        for ($x = 0; $x < $w; $x++) {
            for ($y = 0; $y < $h; $y++) {
                $rgbColor = imagecolorat($src_img, $x, $y);
                if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) {
                    imagesetpixel($img, $x, $y, $rgbColor);
                }
            }
        }

         return $img;
    }

    //把请求发送到微信服务器换取二维码
    public function httpRequest($url, $data='', $method='GET'){
        $curl = curl_init();  
        curl_setopt($curl, CURLOPT_URL, $url);  
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);  
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);  
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);  
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);  
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);  
        if($method=='POST') {
            curl_setopt($curl, CURLOPT_POST, 1);
            if ($data != '')  {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);  
            }
        }

        curl_setopt($curl, CURLOPT_TIMEOUT, 30);  
        curl_setopt($curl, CURLOPT_HEADER, 0);  
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
        $result = curl_exec($curl);  
        curl_close($curl);  
        return $result;
    }

    public function curl_get($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);
        return $data;
    }
    public function get_http_array($url,$post_data) {
        $ch = curl_init();        
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //没有这个会自动输出,不用print_r();也会在后面多个1
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $output = curl_exec($ch);        
        curl_close($ch);
        $out = json_decode($output);
        return $out;
    }

posted @ 2019-07-25 18:12  小强君  阅读(456)  评论(0编辑  收藏  举报