php利用phpqrcode生成二維碼,並將二維碼蓋在一張圖上實現美化
阿新 • • 發佈:2019-01-08
這兩天在開發一個支付寶授權功能,因為要用到二維碼分享掃描功能,每條記錄都有專屬的二維碼,所以需要生成專屬二維碼並且這個二維碼還得有些引導功能,所以需要將生成的二維碼放在實現準備好的圖片上面。
我們先來建立我們的專案結構,生成二維碼我們用的是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); }
這樣我們便最終生成我們的最終二維碼,大家可以試試~
更多文章請關注微信公眾號