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

PHP 生成二維碼兩大方案:Google Chart API 快速整合 與 PHP QR Code 類庫離線生成

     編輯:PHP 相關知識

PHP 生成二維碼兩大方案:Google Chart API 快速整合 與 PHP QR Code 類庫離線生成

二維碼(QR Code)廣泛應用於行動支付、登入驗證、產品追溯、活動報名等場景。PHP 生成二維碼主要有兩條路徑:**呼叫外部 API(如 Google Chart)** 快速原型、**本地類庫(PHP QR Code)** 離線可控。本文詳細對比兩者優劣、參數細節、POST/GET 兩種請求方式、完整可執行代碼與部署建議。

方案一:Google Chart API(已停止維護,僅供參考/舊專案相容)

⚠️ 注意:Google 於 2019 年正式關閉 Image Charts API,以下代碼**僅供歷史參考**,新專案請改用方案二或其他現代 API(如 goqr.me、api.qrserver.com、自建服務)。

GET 請求(最簡單)

<?php
function generateQRfromGoogle($data, $widthHeight = 150, $EC_level = 'L', $margin = 0) {
    $url = urlencode($data);
    echo '';
}

// 使用
$data = '版權所有:https://www.example.com';
generateQRfromGoogle($data);
?>

POST 請求(繞過 URL 長度限制,適合大量資料)

<?php
function qrcodePost($width, $height, $string) {
    $post = [
        'cht' => 'qr',
        'chs' => "{$width}x{$height}",
        'chl' => $string,
        'choe' => 'UTF-8'
    ];
    $ch = curl_init('https://chart.googleapis.com/chart');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query($post),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER => false,
    ]);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result; // 回傳二進位圖片資料
}

// 使用:直接輸出圖片
header('Content-Type: image/png');
echo qrcodePost(300, 300, '版權所有:https://www.example.com');
?>

方案二:PHP QR Code 類庫(推薦、離線、無外部依賴)

專案地址:sourceforge.net/projects/phpqrcode(LGPL 授權)

安裝與引入

  1. 下載壓縮包,解壓至專案目錄(如 `vendor/phpqrcode/`)。
  2. 核心檔案:`phpqrcode.php`(或 `qrlib.php`)。

基本生成範例

<?php
include 'vendor/phpqrcode/phpqrcode.php'; // 或 qrlib.php

$data = '版權所有:https://www.example.com';
$errorCorrectionLevel = 'L'; // L(7%) M(15%) Q(25%) H(30%)
$matrixPointSize = 4;        // 模組大小(像素),建議 3~10
$margin = 2;                 // 邊距(模組數)

// 直接輸出至瀏覽器
QRcode::png($data, false, $errorCorrectionLevel, $matrixPointSize, $margin);

// 或儲存檔案
QRcode::png($data, 'qrcode.png', $errorCorrectionLevel, $matrixPointSize, $margin);
?>

參數詳細說明

參數類型說明建議值
$textstring編碼內容(URL、文字、JSON 等)視需求
$outfilestring/false儲存路徑;false 直接輸出false / 'path.png'
$levelstring糾錯等級:L/M/Q/HL (一般)、H (戶外/易損)
$sizeint模組像素大小4~6
$marginint邊距模組數2~4
$saveandprintbool是否同時儲存並輸出false
$back_colorarray背景色 RGB (0-255)[255,255,255]
$fore_colorarray前景色 RGB[0,0,0]

進階:自訂顏色、加入 Logo(需自行合成)

<?php
include 'vendor/phpqrcode/phpqrcode.php';

$data = 'https://www.example.com';
$tempFile = 'qr_raw.png';
QRcode::png($data, $tempFile, 'H', 6, 2); // 高糾錯為了嵌入 Logo

// 使用 GD 合成 Logo
$qr = imagecreatefrompng($tempFile);
$logo = imagecreatefrompng('logo.png');
$qrW = imagesx($qr); $qrH = imagesy($qr);
$logoW = imagesx($logo); $logoH = imagesy($logo);
$dstX = ($qrW - $logoW) / 2;
$dstY = ($qrH - $logoH) / 2;
imagecopy($qr, $logo, $dstX, $dstY, 0, 0, $logoW, $logoH);
header('Content-Type: image/png');
imagepng($qr);
imagedestroy($qr); imagedestroy($logo);
unlink($tempFile);
?>

方案選型建議

維度Google Chart API (已停用)PHP QR Code現代替代 API (goqr.me 等)
離線可用❌✅❌
資料隱私❌ 經過第三方✅ 本地生成❌
生成速度網路延遲極快 (ms)網路延遲
自訂樣式有限支援顏色/Logo 合成部分支援
維護狀態已關閉社群維護商業/開源
推薦度⭐ (僅舊專案)⭐⭐⭐⭐⭐⭐⭐⭐

現代替代方案速查

  • goqr.me:https://api.qrserver.com/v1/create-qr-code/?data=...&size=200x200
  • Endroid/QrCode (Composer):composer require endroid/qrcode,現代 PHP 封裝、支援 Twig、Symfony、Laravel 整合。
  • BaconQrCode:底層庫,Endroid 依賴之一,純 PHP 實作、效能佳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved