本文目录导读:

- 使用第三方库 phpqrcode(最简单)
- 使用 endroid/qr-code(推荐,功能强大)
- 使用 Google Charts API(无需安装库)
- 自定义二维码生成函数
- 带Logo的二维码(使用 endroid/qr-code 进阶版)
- 推荐选择
- 注意事项
在PHP中生成二维码有多种方法,我来介绍几种常用的方式:
使用第三方库 phpqrcode(最简单)
安装
composer require phpqrcode/phpqrcode
使用示例
<?php
require_once 'vendor/autoload.php';
// 包含库文件
include('phpqrcode/qrlib.php');
// 1. 直接输出二维码图片
QRcode::png('https://www.example.com');
// 2. 保存为文件
QRcode::png('https://www.example.com', 'qrcode.png');
// 3. 带参数的二维码
$text = '二维码内容';
$outfile = 'qrcode.png'; // 输出文件路径,false表示直接输出
$level = QR_ECLEVEL_L; // 纠错级别:L(7%), M(15%), Q(25%), H(30%)
$size = 10; // 大小:1-10
$margin = 4; // 边距
$saveAndPrint = false; // 是否保存并打印
QRcode::png($text, $outfile, $level, $size, $margin, $saveAndPrint);
使用 endroid/qr-code(推荐,功能强大)
安装
composer require endroid/qr-code
使用示例
<?php
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\Color\Color;
// 创建二维码
$qrCode = QrCode::create('https://www.example.com')
->setSize(300)
->setMargin(10)
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
// 写入PNG
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 输出到浏览器
header('Content-Type: ' . $result->getMimeType());
echo $result->getString();
// 或保存为文件
$result->saveToFile('qrcode.png');
使用 Google Charts API(无需安装库)
<?php
function generateQRCode($data, $size = '200x200') {
$url = 'https://chart.googleapis.com/chart';
$params = [
'cht' => 'qr', // 图表类型
'chs' => $size, // 尺寸
'chl' => urlencode($data), // 数据
'choe' => 'UTF-8', // 编码
'chld' => 'L|4' // 纠错级别和边距
];
return $url . '?' . http_build_query($params);
}
// 使用
$qrUrl = generateQRCode('https://www.example.com', '300x300');
echo '<img src="' . $qrUrl . '" alt="QR Code">';
自定义二维码生成函数
<?php
/**
* 生成二维码
* @param string $data 要编码的数据
* @param int $size 图片大小
* @param string $format 图片格式 (png, jpg)
* @param string $savePath 保存路径,空则直接输出
* @return mixed
*/
function createQRCode($data, $size = 300, $format = 'png', $savePath = '') {
// 使用 endroid/qr-code 库
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\JpegWriter;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelMedium;
$qrCode = QrCode::create($data)
->setSize($size)
->setMargin(10);
if ($format === 'jpg') {
$writer = new JpegWriter();
} else {
$writer = new PngWriter();
}
$result = $writer->write($qrCode);
if ($savePath) {
$result->saveToFile($savePath);
return $savePath;
} else {
header('Content-Type: ' . $result->getMimeType());
return $result->getString();
}
}
// 使用示例
// createQRCode('二维码内容', 300, 'png', 'qrcode.png'); // 保存文件
// createQRCode('二维码内容'); // 直接输出图片
带Logo的二维码(使用 endroid/qr-code 进阶版)
<?php
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
$qrCode = QrCode::create('https://www.example.com')
->setSize(400)
->setMargin(15)
->setErrorCorrectionLevel(new ErrorCorrectionLevelHigh());
// 添加Logo
$logo = Logo::create('path/to/logo.png')
->setResizeToWidth(60); // Logo大小
// 添加文字标签
$label = Label::create('扫描二维码')
->setTextColor(new Color(0, 0, 0));
$writer = new PngWriter();
$result = $writer->write($qrCode, $logo, $label);
// 输出
header('Content-Type: ' . $result->getMimeType());
echo $result->getString();
推荐选择
- 简单使用:选择
phpqrcode,无需复杂配置 - 功能丰富:选择
endroid/qr-code,支持更多自定义选项 - 快速测试:使用 Google Charts API,无需安装任何库
注意事项
- 确保服务器有
gd库支持 - 生产环境推荐使用
composer管理依赖 - 注意二维码纠错等级的选择:L(低)到H(高)
- 大型项目建议缓存已生成的二维码图片
选择哪种方法取决于你的具体需求,一般推荐使用 endroid/qr-code,因为它功能更丰富且维护良好。