利用phpqrcode二維碼生成類庫合成帶logo的二維碼並且用合成的二維碼生成海報(二)


前期准備

1、利用phpqrcode生成二維碼:

原理分析:

下載下來的類文件是一個壓縮包,包含很多文件和演示程序,我們只需要里邊的phpqrcode.php

這一個文件就可以生成二維碼了,它是一個多個類的集合文件,我們需要用到里邊的QRcode類png()方法:

//測試生成帶頭像的網站二維碼海報
    public function ce_haibao_qrcode(){
        $codeurl = "https://www.baidu.com";

        Vendor('PHPQRcode.class#phpqrcode');

        $logoQR = "http://thirdwx.qlogo.cn/mmopen/vi_32/icaYhiapVcmsyGnHouHeSvYiaz8yxtvfBicgx5x8joGh4uNiaibp8skQf8Uv4CNtibsJDndbOQwI9LSvDQP6slFQaLy4g/132";

        $level=3;
        $size=6;
        $errorCorrectionLevel =intval($level) ;//容錯級別
        $matrixPointSize = intval($size);//生成圖片大小

        $dirPath ='./Uploads/qrcode/'.date('Y-m-d').'/';//保存二維碼路徑
        $dirPath_B ='/Uploads/qrcode/'.date('Y-m-d').'/';//保存二維碼路徑
        if(!file_exists($dirPath)){
            mkdir($dirPath, 0777);
        }
        $tmpName = time().".png"; //保存在服務器上的二維碼名稱
        $qrcodeName = $dirPath .$tmpName; //保存在服務器上的二維碼路徑
        $qrcodeName_B = $dirPath_B .$tmpName; //保存在服務器上的二維碼路徑

        //生成二維碼圖片
        $object = new \QRcode();
        $object->png($codeurl, $qrcodeName, $errorCorrectionLevel, $matrixPointSize, 2);
        //$QR = imagecreatefrompng($qrcodeName);
        $QR = $qrcodeName;

        $QRlogoPath = './Uploads/qrcode/qrlogo/'.date('Y-m-d').'/';
        $QRlogoPath_B = '/Uploads/qrcode/qrlogo/'.date('Y-m-d').'/';
        if(!file_exists($QRlogoPath)){
            mkdir($QRlogoPath, 0777);
        }
        $qrcode = time().'.png';
        $QRlogo = $QRlogoPath .$qrcode;
        $QRlogo_B = $QRlogoPath_B .$qrcode;
        if($logoQR !==FALSE){
            $QR = imagecreatefromstring(file_get_contents($QR));
            $logo = imagecreatefromstring(file_get_contents($logoQR));

            $QR_width = imagesx($QR);//二維碼圖片寬度
            $QR_height = imagesy($QR);//二維碼圖片高度
            $logo_width = imagesx($logo);//logo圖片寬度
            $logo_height = imagesy($logo);//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);
            header('Content-type: image/png');
       //合成帶logo的二維碼 ImagePng(
$QR,$QRlogo); $dst_path = './Uploads/haibao/haibao.png';//海報素材底圖 $src_path = $QRlogo; //覆蓋圖,用上面的那張圖QRlogo $haibaoPath = './Uploads/qrcode/haibao/'.date('Y-m-d').'/'; //$haibaoPath_B = '/Uploads/qrcode/haibao/'.date('Y-m-d').'/'; if(!file_exists($haibaoPath)){ mkdir($haibaoPath, 0777); } $haibao = time().'.png'; $haibao = $haibaoPath .$haibao; //$haibao_B = $haibaoPath_B .$haibao; //創建圖片實例 $dst = imagecreatefromstring(file_get_contents($dst_path));//海報 $src = imagecreatefromstring(file_get_contents($src_path));//二維碼 //獲取覆蓋圖的寬高 list($src_w, $src_h) = getimagesize($src_path); //獲取海報的寬高 list($dst_w, $dst_h) = getimagesize($dst_path); // imagecopymerge($dst, $src, 20, 120, 0, 0, $src_w, $src_h, 100); imagecopymerge($dst, $src, ($dst_w-$src_w)/2, $dst_h-100-$src_h, 0, 0, $src_w, $src_h, 100); list($dst_w, $dst_h) = getimagesize($dst_path); imagepng($dst,$haibao);//生成圖片並保存到服務器上 合成的海報 imagedestroy($dst); imagedestroy($src); $haibao = substr($haibao,1);//去掉左邊第一個小點 $arr['msg'] = $haibao; echo json_encode($arr);exit; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM