使用PHP生成二維碼的二種方法(帶logo圖像)

   分享下如何使用PHP生成二維碼,以及如何生成中間帶LOGO圖像的二維碼php

1、利用Google API生成二維碼
 Google提供了較爲完善的二維碼生成接口,調用API接口很簡單,如下是調用代碼:
html

01 $urlToEncode="http://www.jbxue.com";
02 generateQRfromGoogle($urlToEncode);
03 /**
04  * google api 二維碼生成【QRcode能夠存儲最多4296個字母數字類型的任意文本,具體能夠查看二維碼數據格式】
05  * @param string $chl 二維碼包含的信息,能夠是數字、字符、二進制信息、漢字。
06  不能混合數據類型,數據必須通過UTF-8 URL-encoded
07  * @param int $widhtHeight 生成二維碼的尺寸設置
08  * @param string $EC_level 可選糾錯級別,QR碼支持四個等級糾錯,用來恢復丟失的、讀錯的、模糊的、數據。
09  *       L-默認:能夠識別已損失的7%的數據
10  *       M-能夠識別已損失15%的數據
11  *       Q-能夠識別已損失25%的數據
12  *       H-能夠識別已損失30%的數據
13  * @param int $margin 生成的二維碼離圖片邊框的距離
14  */
15 function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0')
16 {
17  $chl = urlencode($chl);
18  echo '<img src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'
19  &cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.'
20  " widhtHeight="'.$widhtHeight.'"/>';
21 }


2、使用PHP二維碼生成類庫PHP QR Code生成二維碼
 
PHP QR Code是一個PHP二維碼生成類庫,利用它能夠輕鬆生成二維碼,官網提供了下載和多個演示demo,查看地址:http://phpqrcode.sourceforge.net/
下載官網提供的類庫後,只須要使用phpqrcode.php就能夠生成二維碼了,固然您的PHP環境必須開啓支持GD2。 phpqrcode.php提供了一個關鍵的png()方法,其中參數$text表示生成二位的的信息文本;參數$outfile表示是否輸出二維碼圖片 文件,默認否;參數$level表示容錯率,也就是有被覆蓋的區域還能識別,分別是 L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%); 參數$size表示生成圖片大小,默認是3;參數$margin表示二維碼周圍邊框空白區域間距值;參數$saveandprint表示是否保存二維碼並 顯示。
web

1 public static function png($text$outfile=false, $level=QR_ECLEVEL_L, $size=3, $margin=4,
2 $saveandprint=false)
3 {
4  $enc = QRencode::factory($level$size$margin);
5  return $enc->encodePNG($text$outfile$saveandprint=false);
6 }

調用PHP QR Code很是簡單,以下代碼便可生成一張內容爲"http://www.jbxue.com"的二維碼.
Php代碼  
include 'phpqrcode.php';   
QRcode::png('http://www.jbxue.com');   
 
那麼實際應用中,咱們會在二維碼的中間加上本身的LOGO,已加強宣傳效果。那如何生成含有logo的二維碼呢?其實原理很簡單,先使用PHP QR Code生成一張二維碼圖片,而後再利用php的image相關函數,將事先準備好的logo圖片加入到剛生成的原始二維碼圖片中間,而後從新生成一張新 的二維碼圖片。
api

01 include 'phpqrcode.php';
02 $value 'http://www.jbxue.com'; //二維碼內容
03 $errorCorrectionLevel 'L';//容錯級別
04 $matrixPointSize = 6;//生成圖片大小
05 //生成二維碼圖片
06 QRcode::png($value'qrcode.png'$errorCorrectionLevel$matrixPointSize, 2);
07 $logo 'logo.png';//準備好的logo圖片
08 $QR 'qrcode.png';//已經生成的原始二維碼圖
09
10 if ($logo !== FALSE) {
11  $QR = imagecreatefromstring(file_get_contents($QR));
12  $logo = imagecreatefromstring(file_get_contents($logo));
13  $QR_width = imagesx($QR);//二維碼圖片寬度
14  $QR_height = imagesy($QR);//二維碼圖片高度
15  $logo_width = imagesx($logo);//logo圖片寬度
16  $logo_height = imagesy($logo);//logo圖片高度
17  $logo_qr_width $QR_width / 5;
18  $scale $logo_width/$logo_qr_width;
19  $logo_qr_height $logo_height/$scale;
20  $from_width = ($QR_width $logo_qr_width) / 2;
21  //從新組合圖片並調整大小
22  imagecopyresampled($QR$logo$from_width$from_width, 0, 0, $logo_qr_width,
23  $logo_qr_height$logo_width$logo_height);
24 }
25 //輸出圖片
26 imagepng($QR'helloweba.png');
27 echo '<img src="helloweba.png">';


下面是參考上面的代碼,不生產圖片文件,方便調用的,將下面的代碼保存爲img.php

函數

01 <?php
02 include 'phpqrcode.php';
03 $value $_GET['url'];//二維碼內容
04 $errorCorrectionLevel 'L';//容錯級別
05 $matrixPointSize = 6;//生成圖片大小
06 //生成二維碼圖片
07 QRcode::png($value'qrcode.png'$errorCorrectionLevel$matrixPointSize, 2);
08 $logo 'jb51.png';//準備好的logo圖片
09 $QR 'qrcode.png';//已經生成的原始二維碼圖
10
11 if ($logo !== FALSE) {
12  $QR = imagecreatefromstring(file_get_contents($QR));
13  $logo = imagecreatefromstring(file_get_contents($logo));
14  $QR_width = imagesx($QR);//二維碼圖片寬度
15  $QR_height = imagesy($QR);//二維碼圖片高度
16  $logo_width = imagesx($logo);//logo圖片寬度
17  $logo_height = imagesy($logo);//logo圖片高度
18  $logo_qr_width $QR_width / 5;
19  $scale $logo_width/$logo_qr_width;
20  $logo_qr_height $logo_height/$scale;
21  $from_width = ($QR_width $logo_qr_width) / 2;
22  //從新組合圖片並調整大小
23  imagecopyresampled($QR$logo$from_width$from_width, 0, 0, $logo_qr_width,
24  $logo_qr_height$logo_width$logo_height);
25 }
26 //輸出圖片
27 Header("Content-type: image/png");
28 ImagePng($QR);

調用方法:google

<img src=http://test.jbxue.com:8080/qr/img.php?url=http://www.xue.com/1.rar>url

因爲二維碼容許有必定的容錯性,通常的二維碼即便在遮住部分但仍然可以解碼,常常咱們掃描二維碼的時候掃描到甚至不到一半時就能解碼掃描結果,這是由於生成器會將部分信息重複表示來提升其容錯度,這就是爲何咱們在二維碼中間加個LOGO圖片並不影響解碼結果的緣由。spa

您可能感興趣的文章:

相關文章
相關標籤/搜索