1. 程式人生 > >php利用phpqrcode生成二維碼,並將二維碼蓋在一張圖上實現美化

php利用phpqrcode生成二維碼,並將二維碼蓋在一張圖上實現美化

       這兩天在開發一個支付寶授權功能,因為要用到二維碼分享掃描功能,每條記錄都有專屬的二維碼,所以需要生成專屬二維碼並且這個二維碼還得有些引導功能,所以需要將生成的二維碼放在實現準備好的圖片上面。

       我們先來建立我們的專案結構,生成二維碼我們用的是phpqrcode庫進行生成,我們先建立我們的圖片存放資料夾img資料夾,並將phpqrcode庫放到我們專案中,程式碼結構如下:

 

       img資料夾是我們用來存放生成的二維碼圖片,以及存放我們實現準備的底圖,comm.php檔案是我們的公共方法,待會將二維碼放在底圖的方法我們會寫在這裡,getQrcode.php是我們生成二維碼的方法檔案。

       我們先來建立我們的二維碼,程式碼如下:

<?php
header('Access-Control-Allow-Origin:*');
// 響應型別  
header('Access-Control-Allow-Methods:POST');
// 響應頭設定  
header('Access-Control-Allow-Headers:x-requested-with,content-type');

header('Content-Type:application/json; charset=utf-8');

include 'phpqrcode.php';
include 'comm.php';
@$id = $_GET['id']; //連結獲取引數
$errorCorrentionLevel = 'L'; //容錯級別
$matrixPoinSize = 6; //生成圖片大小
#拼接URL
$value = 'url'      //跳轉地址 
//本地文件相對路徑
$url = 'img/';
//定義糾錯級別
$errorLevel = "L";
//定義生成圖片的寬度和高度,預設為3
$size = 3;
//呼叫Qrcode類的靜態png方法生成二維碼團
QRcode::png($value, $url . $id . '.png', $errorCorrentionLevel, $matrixPoinSize, 2);
//新圖片
$img = '圖片存放具體路徑+名字'.png';
//輸出圖片處理圖片
dealImage($img);    //將二維碼放在底圖某個位置上
//header('location:' . $img);

?>

        這樣就會生成一張二維碼的圖片。

        我們接下來再來封裝將二維碼放在底圖位置上的方法,方法寫在comm.php中,程式碼如下:

<?php
/**
 * 圖片處理公共方法
 * Created by PhpStorm.
 * User: p
 * Date: 2018/10/25
 * Time: 20:53
 */

function dealImage($src_path){
    $dst_path = '底部圖片具體路徑';    //底部圖片
//建立圖片的例項
    $dst = imagecreatefromstring(file_get_contents($dst_path));
    $src = imagecreatefromstring(file_get_contents($src_path));

//獲取水印圖片的寬高
    list($src_w, $src_h) = getimagesize($src_path);

//將水印圖片複製到目標圖片上,最後個引數50是設定透明度,這裡實現半透明效果
    imagecopymerge($dst, $src, 190, 350, 0, 0, $src_w, $src_h, 100);
//如果水印圖片本身帶透明色,則使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);

//輸出圖片
    list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
    switch ($dst_type) {
        case 1://GIF
            header('Content-Type: image/gif');
            imagegif($dst);
            break;
        case 2://JPG
            header('Content-Type: image/jpeg');
            imagejpeg($dst);
            break;
        case 3://PNG
            header('Content-Type: image/png');
            imagepng($dst);
            break;
        default:
            break;
    }
    imagedestroy($dst);
    imagedestroy($src);
}

       這樣我們便最終生成我們的最終二維碼,大家可以試試~

       更多文章請關注微信公眾號