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

PHP QRCode 產生彩色二維碼完整實作指南

     編輯:PHP 綜合知識

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 參數 $logo 與背景參數 $bg

Logo 參數

  • 字串:圖片絕對/相對路徑(支援 PNG、JPG、GIF)。
  • GD 資源:直接傳入 imagecreatefrompng() 等回傳的資源。
  • 自動處理:長寬不等時會自動裁剪為正方形;支援透明通道。

背景圖參數 $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 置中)
);

四、完整範例:產生帶 Logo 的品牌色二維碼

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 到瀏覽器,掃碼即可驗證。

五、線上工具與資源下載

六、常見問題 FAQ

Q: 產生的二維碼掃不出來?
A: 檢查容錯等級是否過低(建議 H)、Logo 面積是否過大(建議 ≤ 30%)、顏色對比度是否足夠(資料區與背景色差 > 50%)。
Q: 如何批量產生?
A: 迴圈呼叫 IMGout(),並指定 $outfile 為不同檔名;注意釋放 GD 記憶體 imagedestroy()。
Q: 支援 SVG 輸出嗎?
A: 目前版本僅支援位圖格式;若需向量圖可考慮 endroid/qrcode 等現代套件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved