一、使用谷歌Chart API生成URL二維碼
完整的API地址:
https://chart.googleapis.com/chart?cht=qr&chs=寬x高&chld=等級|邊距&choe=字符編碼&chl=內容
參數說明:
cht - 指定一個QR碼
chs - 圖像大小,單位是像素,是寬x高
choe - 字符編碼,默認UTF-8
chld - 分兩部分,格式為等級 | 邊距。前者是錯誤校正等級,默認7% L-默認糾錯水平,可以識別已損失的7%的數據;M-可以識別已損失15%的數據;Q-可以識別已損失25%的數據;H-可以識別已損失30%的數據;后者是生成的二維碼離圖片邊框的距離,可自行調節。
chl - 生成二維碼的內容。包含中文時需使用UTF-8編碼漢字,否則將出現問題。
實現:
function createQRbyGoogle($data, $width = '200', $height ='200', $choe = 'UTF-8', $EC_level = 'L', $margin= '0') {
$chl = urlencode($data);
return '<img src="http://chart.apis.google.com/chart?cht=qr&chs='.$width.'x'.$height. '&choe='.$choe .'&chld='.$EC_level.'|'.$margin.'&chl='.$chl . '" />';
}
$url = 'https://secure.php.net/';
$qrcode = createQRbyGoogle($url);
echo $qrcode; // 直接在瀏覽器中顯示二維碼
二、使用PHP QRCode類庫生成二維碼
前提:PHP需開啟GD2擴展。
從官網
http://phpqrcode.sourceforge.net/下載PHP QR Code類庫,目錄結構如下:

使用時引用phpqrcode.php即可。
phpqrcode.php提供了一個方法png(),代碼如下:
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);
}
其中:
$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 - 是否保存二維碼並顯示,默認為false(不是很理解這個參數的作用,改為true也沒見其他二維碼生成)。
實現:
① 瀏覽器輸出二維碼:
include "phpqrcode/phpqrcode.php";
$value='
https://secure.php.net/';
$errorCorrectionLevel = "L";
$matrixPointSize = "4";
QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
② 文件輸出二維碼(瀏覽器不顯示):
include "phpqrcode/phpqrcode.php";
$value='
https://secure.php.net/';
$filename = 'qrcode_' . time();
$errorCorrectionLevel = "L";
$matrixPointSize = "4";
$margin = 2;
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, $margin);
③ 生成帶logo的二維碼:
先使用PHP QR Code生成一張二維碼圖片,再利用PHP的image相關函數,將事先准備好的logo圖片加入到剛生成的原始二維碼圖片中間,重新生成一張新的二維碼圖片。
include('phpqrcode/phpqrcode.php');
$value='
https://secure.php.net/';
$filename = 'qrcode_' . time() . '.png';
$errorCorrectionLevel = 'L';
$matrixPointSize = 10;
$margin = 2;
QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, $margin); // 這里參數filename不能為false,必須輸出二維碼文件
$logo = 'logo.jpg'; //logo的圖片地址
$QR = $filename; //前面生成二維碼圖片的地址
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_height = imagesy($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);
}
$finalName = 'final.png'; // 帶logo二維碼的文件名
imagepng($QR, $finalName); // 最后生成兩個二維碼,一個為先前生成的不帶logo的二維碼,如qrcode_1505115861.png,一個為帶logo的二維碼,即final.png
上述代碼最后生成兩個二維碼,一個為不帶logo的二維碼,如qrcode_1505115861.png,一個為帶logo的二維碼,即final.png。
如果想在瀏覽器中顯示二維碼,則將上述代碼中最后兩句改為:
header("Content-type:image/png");
imagepng($QR);
則在瀏覽器中顯示帶logo的二維碼,但依然會生成一個不帶logo的如qrcode_1505115861.png的二維碼。
原文:https://www.cnblogs.com/sunshineliulu/p/7505591.html