PHP生成帶logo圖像二維碼的兩種方法

本文主要和你們分享PHP生成帶logo圖像二維碼的兩種方法,主要以文字和代碼的形式和你們分享,但願能幫助到你們。php

 

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

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


2、使用PHP二維碼生成類庫PHP QR Code生成二維碼

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

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

調用PHP QR Code很是簡單,以下代碼便可生成一張內容爲"http://www.jb51.net"的二維碼.
Php代碼 
include 'phpqrcode.php'; 
QRcode::png('http://www.jb51.net'); 

那麼實際應用中,咱們會在二維碼的中間加上本身的LOGO,已加強宣傳效果。那如何生成含有logo的二維碼呢?其實原理很簡單,先使用PHP QR Code生成一張二維碼圖片,而後再利用php的image相關函數,將事先準備好的logo圖片加入到剛生成的原始二維碼圖片中間,而後從新生成一張新 的二維碼圖片。api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
include 'phpqrcode.php' ;
$value = 'http://www.jb51.net' ; //二維碼內容
$errorCorrectionLevel = 'L' ; //容錯級別
$matrixPointSize = 6; //生成圖片大小
//生成二維碼圖片
QRcode::png( $value , 'qrcode.png' , $errorCorrectionLevel , $matrixPointSize , 2);
$logo = 'logo.png' ; //準備好的logo圖片
$QR = 'qrcode.png' ; //已經生成的原始二維碼圖
   
if ( $logo !== FALSE) {
  $QR = imagecreatefromstring( file_get_contents ( $QR ));
  $logo = imagecreatefromstring( file_get_contents ( $logo ));
  $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 );
}
//輸出圖片
imagepng( $QR , 'helloweba.png' );
echo '<img src="helloweba.png">' ;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
include 'phpqrcode.php' ;
$value = $_GET [ 'url' ]; //二維碼內容
$errorCorrectionLevel = 'L' ; //容錯級別
$matrixPointSize = 6; //生成圖片大小
//生成二維碼圖片
QRcode::png( $value , 'qrcode.png' , $errorCorrectionLevel , $matrixPointSize , 2);
$logo = 'jb51.png' ; //準備好的logo圖片
$QR = 'qrcode.png' ; //已經生成的原始二維碼圖
  
if ( $logo !== FALSE) {
  $QR = imagecreatefromstring( file_get_contents ( $QR ));
  $logo = imagecreatefromstring( file_get_contents ( $logo ));
  $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" );
ImagePng( $QR );

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

相關推薦:google

php實現帶logo二維碼類url

PHP生成微信二維碼實例spa

php二維碼的生產以及下載方法.net

以上就是PHP生成帶logo圖像二維碼的兩種方法的詳細內容,更多請關注php中文網其它相關文章!

相關文章
相關標籤/搜索