1. 程式人生 > >thinkphp 使用phpqrcode生成帶logo二維碼 並生成海報

thinkphp 使用phpqrcode生成帶logo二維碼 並生成海報

1-下載類庫

composer require aferrandini/phpqrcode -vvv

2-common的方法

//$text  文字的內容
//$logo  logo圖片
function code($text,$logo){
    //二維碼圖片儲存路徑
    $pathname = APP_PATH . '/../Public/upload/';
    if(!is_dir($pathname)) { //若目錄不存在則建立之
        mkdir($pathname);
    }
    vendor("phpqrcode.phpqrcode");

//二維碼圖片儲存路徑(若不生成檔案則設定為false)
    $filename = $pathname . "/qrcode_" . time() . ".png";
//二維碼容錯率,預設L
    $level = "L";
//二維碼圖片每個黑點的畫素,預設4
    $size = '10';
//二維碼邊框的間距,預設2
    $padding = 2;
//儲存二維碼圖片並顯示出來,$filename必須傳遞檔案路徑
    $saveandprint = true;

//生成二維碼圖片
    \PHPQRCode\QRcode::png($text,$filename,$level,$size,$padding,$saveandprint);

//二維碼logo
    $QR = imagecreatefromstring(file_get_contents($filename));
    $logo = imagecreatefromstring(file_get_contents($logo));
    $QR_width = imagesx($QR);
    $QR_height = imagesy($QR);
    $logo_width = imagesx($logo);
    $logo_height = imagesy($logo);
    $logo_qr_width = $QR_width / 5;
    $scale = $logo_width / $logo_qr_width;
    $logo_qr_height = $logo_height / $scale;
    $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,$filename);
return $filename;
}

3--控制器

    public function code(){
        $logo=request()->file("file");
        $pathImg="";
        //移動檔案到框架應用更目錄的public/uploads/
        $info = $logo->move(ROOT_PATH . 'public' . DS . 'upload' . DS . 'admin' . DS . date('Y') . DS . date('m-d'),md5(microtime(true)));
        if ($info) {
            $pathImg = "./public/upload/admin/" . date('Y') . '/' . date('m-d') . '/' . $info->getFilename();
        } else {
            //錯誤提示使用者
            return $this->error($logo->getError());
        }
        $logo=$pathImg;
        //二維碼URL引數
        $text = "http://www.baidu.com";

        $filename=code($text,$logo);

        echo "<img src='$filename'>";



        $image = \think\Image::open('./public/images/q.png');
        // 給原圖居中新增透明度為100的水印並儲存到$a.png
        $a="./public/upload/11.jpg";
        $image->water('./public/upload/qrcode_1536730572.png',\think    \Image::WATER_CENTER,100)->save($a);

    }