本文目录导读:

我来帮你介绍几种 PHP 生成二维码的方案,从简单到高级都有。
使用第三方库(推荐)
使用 phpqrcode(最流行)
// 1. 下载 phpqrcode.php 文件
// 下载地址: https://sourceforge.net/projects/phpqrcode/
// 或使用 Composer: composer require aferrandini/phpqrcode
require_once('phpqrcode.php');
// 简单生成二维码
$content = "https://www.example.com";
$filename = 'qrcode.png';
// 生成二维码图片
QRcode::png($content, $filename, QR_ECLEVEL_L, 4, 2);
// 直接输出到浏览器
QRcode::png('Hello World', false, QR_ECLEVEL_M, 4, 2);
// 生成带 logo 的二维码
$content = 'https://www.example.com';
$filename = 'qrcode_with_logo.png';
$logo = 'logo.png';
QRcode::png($content, 'temp.png', QR_ECLEVEL_H, 10, 2);
// 合并 logo
$QR = imagecreatefromstring(file_get_contents('temp.png'));
$logo = imagecreatefromstring(file_get_contents($logo));
$QR_width = imagesx($QR);
$QR_height = imagesy($QR);
$logo_width = imagesx($logo);
$logo_height = imagesy($logo);
$logo_qr_width = $QR_width / 5;
$scale = $logo_width / $logo_qr_width;
$logo_qr_height = $logo_height / $scale;
$from_width = ($QR_width - $logo_qr_width) / 2;
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
imagepng($QR, $filename);
使用 endroid/qr-code(更现代)
// composer require endroid/qr-code
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
// 创建二维码
$qrCode = QrCode::create('https://www.example.com')
->setSize(300)
->setMargin(10);
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 保存到文件
$result->saveToFile('qrcode.png');
// 输出到浏览器
header('Content-Type: '.$result->getMimeType());
echo $result->getString();
使用 chillerlan/php-qrcode(功能全面)
// composer require chillerlan/php-qrcode
use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions;
$options = new QROptions([
'version' => 5,
'outputType' => QRCode::OUTPUT_MARKUP_IMG,
'eccLevel' => QRCode::ECC_L,
'scale' => 5,
'margin' => 4,
]);
// 生成二维码
$qrcode = (new QRCode($options))->render('https://www.example.com');
// 保存为 SVG 文件
$options->outputType = QRCode::OUTPUT_MARKUP_SVG;
$options->outputBase64 = false;
$qrcode = (new QRCode($options))->render('Hello World');
file_put_contents('qrcode.svg', $qrcode);
使用在线 API
// 使用 Google Chart API(简单但已弃用)
function generateQRCode($url, $size = '200x200') {
$url = urlencode($url);
return "https://chart.googleapis.com/chart?cht=qr&chs={$size}&chl={$url}";
}
// 使用 qrserver.com API
function generateQRFromAPI($url, $size = 200) {
return "https://api.qrserver.com/v1/create-qr-code/?size={$size}x{$size}&data=" . urlencode($url);
}
// 在页面中显示
echo '<img src="' . generateQRFromAPI('https://www.example.com') . '" alt="QR Code">';
完整示例:生成带样式的二维码
<?php
// 使用 endroid/qr-code 带颜色的二维码
require_once 'vendor/autoload.php';
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
function generateStyledQRCode($content, $options = []) {
// 默认配置
$defaults = [
'size' => 300,
'margin' => 10,
'foregroundColor' => '#000000',
'backgroundColor' => '#ffffff',
'logo' => null,
'label' => null,
'labelSize' => 16,
'filename' => 'qrcode.png'
];
$config = array_merge($defaults, $options);
// 解析颜色
$fg = sscanf($config['foregroundColor'], '#%02x%02x%02x');
$bg = sscanf($config['backgroundColor'], '#%02x%02x%02x');
$qrCode = QrCode::create($content)
->setSize($config['size'])
->setMargin($config['margin'])
->setForegroundColor(new Color($fg[0], $fg[1], $fg[2]))
->setBackgroundColor(new Color($bg[0], $bg[1], $bg[2]))
->setErrorCorrectionLevel(new ErrorCorrectionLevelLow());
// 添加标签
if ($config['label']) {
$qrCode->setLabel($config['label'], $config['labelSize']);
}
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 添加 logo
if ($config['logo'] && file_exists($config['logo'])) {
// 这里需要额外处理 logo 合并
$qrImage = imagecreatefromstring($result->getString());
$logo = imagecreatefromstring(file_get_contents($config['logo']));
$qrWidth = imagesx($qrImage);
$qrHeight = imagesy($qrImage);
$logoWidth = imagesx($logo);
$logoHeight = imagesy($logo);
$logoSize = $qrWidth / 5;
$x = ($qrWidth - $logoSize) / 2;
$y = ($qrHeight - $logoSize) / 2;
imagecopyresampled($qrImage, $logo, $x, $y, 0, 0, $logoSize, $logoSize, $logoWidth, $logoHeight);
// 保存图片
imagepng($qrImage, $config['filename']);
imagedestroy($qrImage);
} else {
// 直接保存
$result->saveToFile($config['filename']);
}
return $config['filename'];
}
// 使用示例
$filename = generateStyledQRCode('https://www.example.com', [
'size' => 400,
'foregroundColor' => '#007bff',
'backgroundColor' => '#ffffff',
'logo' => 'my-logo.png',
'label' => '扫描访问',
'filename' => 'my-qrcode.png'
]);
echo "二维码已生成: " . $filename;
?>
完整控制器示例
<?php
// QRCodeController.php
class QRCodeController {
// 生成并下载二维码
public function download($content) {
require_once('phpqrcode.php');
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="qrcode.png"');
QRcode::png($content, false, QR_ECLEVEL_L, 10, 2);
exit;
}
// 生成并保存二维码
public function generate($content, $filename = null) {
if ($filename === null) {
$filename = uniqid('qr_') . '.png';
}
require_once('phpqrcode.php');
QRcode::png($content, $filename, QR_ECLEVEL_L, 10, 2);
return $filename;
}
// 批量生成二维码
public function batchGenerate($items) {
$files = [];
foreach ($items as $item) {
$filename = $this->generate($item['content'], $item['filename']);
$files[] = [
'name' => $item['name'],
'file' => $filename
];
}
return $files;
}
}
// 使用示例
$controller = new QRCodeController();
$controller->download('https://www.example.com');
在 Laravel 中使用
<?php
// 安装依赖
// composer require endroid/qr-code
// 创建服务提供者或辅助函数
namespace App\Services;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter;
class QRCodeService {
public function generate($content, $options = []) {
$qrCode = QrCode::create($content)
->setSize($options['size'] ?? 300)
->setMargin($options['margin'] ?? 10);
$writer = new PngWriter();
$result = $writer->write($qrCode);
// 返回 base64 或保存到存储
return [
'data' => $result->getString(),
'base64' => 'data:' . $result->getMimeType() . ';base64,' . base64_encode($result->getString()),
'file' => $result->saveToFile(storage_path('app/qrcodes/' . uniqid() . '.png'))
];
}
}
// 在控制器中使用
class QrController extends Controller {
public function show($id) {
$qrService = new QRCodeService();
$qrResult = $qrService->generate('Product ' . $id, [
'size' => 200
]);
return response($qrResult['data'])
->header('Content-Type', 'image/png');
}
}
安装建议
推荐使用 Composer 安装:
# 选择其中之一安装 # 最轻量 composer require aferrandini/phpqrcode # 功能完整 composer require endroid/qr-code # 支持多种输出格式 composer require chillerlan/php-qrcode
注意事项
- 二维码大小长度调整尺寸
- 容错级别:L(7%), M(15%), Q(25%), H(30%)
- 生成带 logo:需要容错级别至少 M
- URL 编码:包含特殊字符时记得编码
- 缓存处理:频繁生成的二维码可以缓存
选择哪种方案取决于你的具体需求,如果需要简单快速,建议使用 phpqrcode;如果追求功能和美观,推荐 endroid/qr-code。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播