首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 產生 QR Code 完整範例:使用 PHP QR Code 庫

     編輯:PHP 相關知識

QR Code(快速回應碼)廣泛應用於行動支付、網址分享、登入驗證、資訊標籤等場景。本文示範使用 PHP QR Code 庫(基於 libqrencode)快速生成 QR Code 圖片,支援容錯等級、尺寸、輸出路徑自訂。

環境準備

  1. 下載 PHP QR Code 庫,解壓至專案目錄。
  2. 確保 PHP 支援 GD 擴展(`extension=gd`)。
  3. 建立可寫入的暫存目錄(如 `temp/`)。

核心程式碼

<?php
ini_set('display_errors', 'on');

// 目錄設定
$PNG_TEMP_DIR = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR;
$PNG_WEB_DIR = 'temp/';

// 引入庫檔
include "qrlib.php";

// 參數設定
$data = 'https://example.com/demo?qrcode=123'; // 編碼內容
$ecc = 'H'; // 容錯等級:L(7%) M(15%) Q(25%) H(30%)
$size = 10; // 模組大小:1-10(圖片寬高 = size * 37 + 8*size 約略)
$margin = 2; // 邊距(靜默區模組數)

// 產生檔案名
$filename = $PNG_TEMP_DIR . 'qrcode_' . time() . '.png';

// 生成 QR Code
QRcode::png($data, $filename, $ecc, $size, $margin);

// 設定權限(視伺服器環境)
chmod($filename, 0644);

// 輸出圖片標籤
echo 'QR Code';
?>

參數詳細說明

進階應用範例

1. 直接輸出圖片串流(不存檔)

<?php
include "qrlib.php";
header('Content-Type: image/png');
QRcode::png('https://example.com', false, 'H', 8, 2); // false 直接輸出

2. 批次生成多組 QR Code

<?php
include "qrlib.php";
$items = [
    'PROD001' => 'https://shop.example.com/p/001',
    'PROD002' => 'https://shop.example.com/p/002',
    'PROD003' => 'https://shop.example.com/p/003',
];
foreach ($items as $sku => $url) {
    $file = "temp/qrcode_{$sku}.png";
    QRcode::png($url, $file, 'M', 6, 2);
    echo "$sku ";
}

3. 內嵌 Logo(需 GD 進階處理)

<?php
include "qrlib.php";
$data = 'https://example.com';
$qr_file = 'temp/qr_raw.png';
$logo_file = 'logo.png';
$out_file = 'temp/qr_with_logo.png';

QRcode::png($data, $qr_file, 'H', 10, 2); // H 等級容錯支援遮蓋

$qr = imagecreatefrompng($qr_file);
$logo = imagecreatefrompng($logo_file);

$qr_w = imagesx($qr);
$qr_h = imagesy($qr);
$logo_w = imagesx($logo);
$logo_h = imagesy($logo);

// Logo 置中,佔 QR Code 20% 面積
$dst_x = ($qr_w - $logo_w) / 2;
$dst_y = ($qr_h - $logo_h) / 2;
imagecopy($qr, $logo, $dst_x, $dst_y, 0, 0, $logo_w, $logo_h);

imagepng($qr, $out_file);
imagedestroy($qr);
imagedestroy($logo);
echo "";

常見問題排查

  • 圖片不顯示:檢查 `temp/` 目錄權限、Web 根目錄對應路徑、GD 擴展是否載入。
  • 中文亂碼:確保 PHP 檔案儲存為 UTF-8 無 BOM,`$data` 為 UTF-8 編碼。
  • 掃描失敗:提高容錯等級至 `H`、增加 `size`、確保 `margin ≥ 2`、避免 Logo 遮蓋定位點。
  • 大量生成效能:單次生成約 10-50ms,批次建議非同步處理或使用 `exec` 呼叫 `qrencode` 指令列工具。

替代方案

參數型別範圍/選項說明
$datastring-編碼內容,建議 < 2KB
$eccstringL, M, Q, H容錯等級:H 最高,適合有 Logo 覆蓋場景
$sizeint1-10每個模組像素大小,越大圖片越清晰
$marginint0-10四周靜默區寬度(模組數),掃描器需要
$saveandprintbooltrue/falsetrue 存檔並輸出,false 僅存檔
$back_colorarray[R,G,B]背景色,預設白色 [255,255,255]
$fore_colorarray[R,G,B]前景色,預設黑色 [0,0,0]

PHP QR Code 庫輕量易用,適合中小專案快速整合 QR Code 生成功能;大型或高併發系統建議評估 endroid/qrcode 或離線生成 + CDN 快取架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點
PHP QR Code (libqrencode)純 PHP、無系統依賴、易部署效能一般、功能基礎
endroid/qrcode (Composer)現代物件導向、支援 Logo、標籤、擴展性佳需 Composer、依賴 GD/Imagick
qrencode 指令列工具極高效能、功能完整、可管線化需安裝系統套件、跨平台部署較複雜
Google Chart API (已停用)無伺服器負擔已關閉,不可用