本文目录导读:

我来介绍几种在PHP项目中生成二维码的常用方法:
使用第三方库(推荐)
PHP QR Code(最流行)
// 1. 安装(使用Composer)
composer require phpqrcode/phpqrcode
// 2. 使用
require_once 'vendor/autoload.php';
// 生成二维码图片
QRcode::png('https://example.com', 'qrcode.png');
// 直接输出到浏览器
QRcode::png('https://example.com');
// 带参数的二维码
QRcode::png(
'https://example.com',
false,
QR_ECLEVEL_L, // 纠错级别
10, // 大小
2 // 边距
);
Endroid QR Code(功能更强大)
// 1. 安装
composer require endroid/qr-code
// 2. 使用
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
$qrCode = QrCode::create('https://example.com')
->setSize(300)
->setMargin(10)
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 保存到文件
$result->saveToFile('qrcode.png');
// 输出到浏览器
header('Content-Type: '.$result->getMimeType());
echo $result->getString();
使用API服务(最简单)
Google QR Code API
function generateQRCode($data, $size = 200) {
$url = "https://api.qrserver.com/v1/create-qr-code/?size={$size}x{$size}&data=" . urlencode($data);
return '<img src="' . $url . '" alt="QR Code">';
}
// 使用
echo generateQRCode('https://example.com', 300);
其他免费API
// API Ninjas
function qrCodeApiNinjas($text, $size = 150) {
$url = "https://api.qrserver.com/v1/create-qr-code/?size={$size}x{$size}&data=" . urlencode($text);
return $url;
}
// 显示图片
echo '<img src="' . qrCodeApiNinjas('https://example.com') . '">';
完整示例:包含各种功能
<?php
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\SvgWriter;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
class QRCodeGenerator {
/**
* 生成二维码并保存为文件
*/
public function generateFile($data, $filename, $size = 300) {
$qrCode = QrCode::create($data)
->setSize($size)
->setMargin(10)
->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH))
->setEncoding(new Encoding('UTF-8'))
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
$writer = new PngWriter();
$result = $writer->write($qrCode);
$result->saveToFile($filename);
return $filename;
}
/**
* 直接输出二维码到浏览器
*/
public function outputQRCode($data, $size = 300) {
$qrCode = QrCode::create($data)
->setSize($size)
->setMargin(10);
$writer = new PngWriter();
$result = $writer->write($qrCode);
header('Content-Type: '.$result->getMimeType());
header('Content-Disposition: inline; filename="qrcode.png"');
echo $result->getString();
}
/**
* 生成带Logo的二维码
*/
public function generateWithLogo($data, $logoPath, $size = 300) {
$qrCode = QrCode::create($data)
->setSize($size)
->setMargin(10);
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 合并Logo(需要GD库)
$qrImage = imagecreatefromstring($result->getString());
$logo = imagecreatefrompng($logoPath);
$qrWidth = imagesx($qrImage);
$qrHeight = imagesy($qrImage);
$logoWidth = imagesx($logo);
$logoHeight = imagesy($logo);
// Logo居中
$logoX = ($qrWidth - $logoWidth) / 2;
$logoY = ($qrHeight - $logoHeight) / 2;
imagecopy($qrImage, $logo, $logoX, $logoY, 0, 0, $logoWidth, $logoHeight);
ob_start();
imagepng($qrImage);
$imageData = ob_get_clean();
imagedestroy($qrImage);
imagedestroy($logo);
return $imageData;
}
/**
* 生成SVG格式二维码
*/
public function generateSVG($data, $size = 300) {
$qrCode = QrCode::create($data)
->setSize($size)
->setMargin(10);
$writer = new SvgWriter();
$result = $writer->write($qrCode);
return $result->getString();
}
}
// 使用示例
$generator = new QRCodeGenerator();
// 1. 生成并保存文件
$generator->generateFile('https://example.com', 'qrcode.png');
// 2. 输出到浏览器
$generator->outputQRCode('https://example.com');
// 3. 带Logo的二维码
$qrWithLogo = $generator->generateWithLogo('https://example.com', 'logo.png');
header('Content-Type: image/png');
echo $qrWithLogo;
// 4. SVG格式
$svgCode = $generator->generateSVG('https://example.com');
echo $svgCode;
Web界面实现
<!DOCTYPE html>
<html>
<head>二维码生成器</title>
</head>
<body>
<form method="POST" action="generate.php">
<input type="text" name="data" placeholder="输入要编码的内容" required>
<select name="size">
<option value="200">200x200</option>
<option value="300" selected>300x300</option>
<option value="400">400x400</option>
<option value="500">500x500</option>
</select>
<select name="format">
<option value="png">PNG</option>
<option value="svg">SVG</option>
</select>
<button type="submit">生成二维码</button>
</form>
</body>
</html>
// generate.php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = $_POST['data'] ?? '';
$size = $_POST['size'] ?? 300;
$format = $_POST['format'] ?? 'png';
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\SvgWriter;
$qrCode = QrCode::create($data)->setSize($size)->setMargin(10);
if ($format === 'svg') {
$writer = new SvgWriter();
header('Content-Type: image/svg+xml');
} else {
$writer = new PngWriter();
header('Content-Type: image/png');
}
$result = $writer->write($qrCode);
echo $result->getString();
}
推荐方案
- 简单需求:使用Google QR Code API
- 生产环境:使用Endroid QR Code库
- 旧项目:使用PHP QR Code库
- 需要Logo:使用Endroid QR Code + GD库
选择哪个方案取决于你的具体需求,如是否需要离线生成、性能要求、是否需要Logo等。