本文目录导读:

- 使用第三方库 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,因为它功能更丰富且维护良好。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播