PHP QRCode 是廣泛使用的二維碼生成庫,預設僅支援黑白輸出。實務上常需依品牌識別產生彩色二維碼,甚至嵌入 Logo、自定義背景。本文整理並優化了支援多色、多格式(PNG/GIF/JPEG)、Logo 嵌入與背景圖的完整呼叫介面,並說明各參數用法。
QRcode::IMGout(
$text, // 編碼內容字串
$outfile = false, // 輸出檔案路徑;false 直接輸出到瀏覽器
$level = QR_ECLEVEL_L, // 容錯等級:L(7%) M(15%) Q(25%) H(30%)
$size = 3, // 每個模組像素大小
$col = array( // 顏色陣列(RGB)
array(255,255,255), // [0] 背景色
array(0,0,0), // [1] 左上角定位點外框
array(0,0,0), // [2] 右上角定位點外框
array(0,0,0), // [3] 左下角定位點外框
array(0,0,0), // [4] 左上角定位點中心
array(0,0,0), // [5] 右上角定位點中心
array(0,0,0), // [6] 左下角定位點中心
array(0,0,0), // [7] 資料區顏色
false // [8] 保留:資料區漸層(未實作)
),
$margin = 2, // 邊距(模組數)
$saveandprint = false, // outfile 為 true 時是否同時輸出瀏覽器
$logo = false, // Logo 圖片路徑或 GD 資源
$bg = false, // 背景圖設定陣列
$type = 'png' // 輸出格式:png、gif、jpg
);
$col 詳細對照表| 索引 | 對應區域 | 說明 |
|---|---|---|
| 0 | 背景色 | 整張圖最底層顏色 |
| 1 | 左上角定位點外框 | 外圈 8 模組寬度 |
| 2 | 右上角定位點外框 | 同上 |
| 3 | 左下角定位點外框 | 同上 |
| 4 | 左上角定位點中心 | 內圈 3x3 模組 |
| 5 | 右上角定位點中心 | 同上 |
| 6 | 左下角定位點中心 | 同上 |
| 7 | 資料區(編碼內容) | 所有非定位點模組 |
| 8 | 保留 | 未來擴展漸層用 |
提示: 若只想改資料區顏色,可僅設定 $col[7],其餘沿用預設黑白。
$logo 與背景參數 $bgimagecreatefrompng() 等回傳的資源。$bg 陣列結構$bg = array(
'path/to/bg.jpg', // [0] 背景圖路徑
0, // [1] 背景寬度(0 保持原比)
0, // [2] 背景高度(0 保持原比)
0.8, // [3] Logo 佔背景短邊比例(0.8 = 80%)
0, // [4] Logo 距左邊距(0 置中)
0 // [5] Logo 距上邊距(0 置中)
);
require_once 'phpqrcode/qrlib.php'; // 載入優化後的庫
$text = 'https://example.com/product/12345';
$logo = __DIR__ . '/assets/logo.png';
$bg = array(
__DIR__ . '/assets/bg_pattern.jpg',
400, 400, 0.25, 0, 0
);
$col = array(
array(255, 255, 255), // 白底
array(0, 51, 102), // 定位點外框:深藍
array(0, 51, 102),
array(0, 51, 102),
array(255, 255, 255), // 定位點中心:白
array(255, 255, 255),
array(255, 255, 255),
array(0, 102, 204), // 資料區:品牌藍
false
);
QRcode::IMGout($text, false, QR_ECLEVEL_H, 4, $col, 2, false, $logo, $bg, 'png');
執行後直接輸出 PNG 到瀏覽器,掃碼即可驗證。
IMGout(),並指定 $outfile 為不同檔名;注意釋放 GD 記憶體 imagedestroy()。endroid/qrcode 等現代套件。