編碼的世界 / 優質文選 / 文明

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


2022年3月31日
-   

       這兩天在開發一個支付寶授權功能,因為要用到二維碼分享掃描功能,每條記錄都有專屬的二維碼,所以需要生成專屬二維碼並且這個二維碼還得有些引導功能,所以需要將生成的二維碼放在實現准備好的圖片上面。
       我們先來創建我們的項目結構,生成二維碼我們用的是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);
}

       這樣我們便最終生成我們的最終二維碼,大家可以試試~
       更多文章請關注微信公眾號
 

熱門文章