PHPAPI二维码怎么生成

wen PHP项目 5

本文目录导读:

PHPAPI二维码怎么生成

  1. 使用第三方库 phpqrcode(最简单)
  2. 使用 endroid/qr-code(推荐,功能强大)
  3. 使用 Google Charts API(无需安装库)
  4. 自定义二维码生成函数
  5. 带Logo的二维码(使用 endroid/qr-code 进阶版)
  6. 推荐选择
  7. 注意事项

在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();

推荐选择

  1. 简单使用:选择 phpqrcode,无需复杂配置
  2. 功能丰富:选择 endroid/qr-code,支持更多自定义选项
  3. 快速测试:使用 Google Charts API,无需安装任何库

注意事项

  • 确保服务器有 gd 库支持
  • 生产环境推荐使用 composer 管理依赖
  • 注意二维码纠错等级的选择:L(低)到H(高)
  • 大型项目建议缓存已生成的二维码图片

选择哪种方法取决于你的具体需求,一般推荐使用 endroid/qr-code,因为它功能更丰富且维护良好。

抱歉,评论功能暂时关闭!