本文目录导读:

我来介绍几种在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等。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播