phpqrcode参数有哪些?如何配置使用?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 参数 正文

PHPQRCode 是一个非常流行的、用 PHP 编写的二维码生成库,它基于著名的 libqrencode C 语言库,并将其封装成了易于在 PHP 项目中使用的类。

核心类

PHPQRCode 的核心是 QRcode 类,位于 phpqrcode.php 文件中,我们主要使用它的 png() 静态方法来生成二维码图片。


QRcode::png() 方法详解

这是最常用、最核心的方法,用于直接输出一个 PNG 格式的二维码图片。

方法签名

public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint = false)

参数详解

下面我们逐一解释每个参数的含义和可选值。


$text (必需)

  • 类型: string
  • 说明: 这是你要编码生成二维码的文本内容,可以是网址、文本、电子邮件地址、电话号码等任何信息。
  • 示例:
      $text = 'https://www.example.com'; // 网址
      $text = '你好,世界!';              // 中文文本
      $text = 'mailto:someone@example.com'; // 邮箱

$outfile (可选)

  • 类型: stringboolean

  • 说明: 这个参数控制二维码的输出方式。

    • false (默认值): 直接将二维码图片以二进制流的形式输出到浏览器,当你想在网页上直接显示二维码时使用此选项。
    • string (文件路径): 将二维码图片保存到指定的服务器路径下。'qrcodes/my_qr_code.png',如果目录不存在,你需要确保 PHP 有权限创建它。
  • 示例:

      // 直接输出到浏览器
      QRcode::png($text);
      // 保存到服务器文件
      QRcode::png($text, './my_qr.png');

$level (可选)

  • 类型: stringinteger
  • 说明: 定义二维码的容错级别,容错级别越高,二维码在被部分遮挡或损坏时就越容易被扫描成功,但这也会导致二维码数据密度增加,在相同尺寸下能存储的信息变少。
  • 可选值:
    • QR_ECLEVEL_L (或 'L'): 低 (~7%),默认值,适用于对容错要求不高的场景。
    • QR_ECLEVEL_M (或 'M'): 中 (~15%),最常用的级别,在纠错能力和信息容量之间取得了很好的平衡。
    • QR_ECLEVEL_Q (或 'Q'): 四分 (~25%)
    • QR_ECLEVEL_H (或 'H'): 高 (~30%),适用于打印在易被刮花或不平整的表面(如包装箱、金属牌)。
  • 示例:
      // 使用中等容错级别
      QRcode::png($text, false, QR_ECLEVEL_M);

$size (可选)

  • 类型: integer
  • 说明: 定义二维码中每个小黑点(模块)的像素尺寸
    • 注意: 这个值不是二维码最终输出的宽高,而是单个模块的大小,二维码的总宽高 = (模块数量 + 边距) * $size
    • 值越大,二维码图片越大,也越清晰,但过大的值可能导致二维码在尺寸有限的屏幕上显示不全。
    • 有效值通常为 1 到 10 之间的整数。
  • 示例:
      // 每个模块用 5 个像素点绘制
      QRcode::png($text, false, QR_ECLEVEL_M, 5);

$margin (可选)

  • 类型: integer
  • 说明: 定义二维码的空白边距大小,单位是模块数(不是像素),边距是二维码周围一圈的空白区域,有助于扫描设备识别二维码的边界。
    • 值越大,二维码周围的空白越多。
    • 根据二维码规范,最小边距为 4 个模块,所以此参数的最小有效值通常是 4。
  • 示例:
      // 设置边距为 8 个模块
      QRcode::png($text, false, QR_ECLEVEL_M, 4, 8);

$saveandprint (可选)

  • 类型: boolean
  • 说明: 这个参数只在 $outfile 不为 false(即指定了保存路径)时才有效。
    • false (默认值): 仅将二维码保存到 $outfile 指定的文件中。
    • true: 在将二维码保存到文件的同时,还会将图片直接输出到浏览器,这在某些需要同时保存和预览的场景下很有用。
  • 示例:
      // 保存到文件,并同时显示在浏览器上
      QRcode::png($text, './my_qr.png', QR_ECLEVEL_M, 4, 4, true);

其他常用功能(带参数)

除了 png() 方法,PHPQRCode 还提供了一些其他有用的静态方法,它们通常也有自己的参数。

QRcode::text() - 生成带 Logo 的二维码

这是一个非常实用的功能,但需要手动拼接图片,它本身不直接生成带 Logo 的二维码,而是返回二维码图片的资源流,供你后续处理。

工作流程:

  1. 使用 QRcode::png() 将二维码内容保存到一个临时变量(而不是直接输出)。
  2. 使用 PHP 的 GD 库函数(imagecreatefromstring, imagecreatefrompng 等)创建二维码和 Logo 的图像资源。
  3. 计算Logo的位置(通常在二维码中心)。
  4. 使用 imagecopy()imagecopyresampled() 将Logo图像“画”到二维码图像上。
  5. 使用 imagepng()imagejpeg() 将最终合成后的图像输出或保存。

示例代码:

// 1. 生成二维码数据
$text = 'https://www.example.com';
$qrcode_data = QRcode::png($text, false, QR_ECLEVEL_H, 10, 2); // false 表示返回数据流
// 2. 创建图像资源
$qrcode_img = imagecreatefromstring($qrcode_data);
$logo_img = imagecreatefrompng('path/to/your/logo.png'); // 你的Logo图片
// 3. 获取尺寸
$qrcode_width = imagesx($qrcode_img);
$qrcode_height = imagesy($qrcode_img);
$logo_width = imagesx($logo_img);
$logo_height = imagesy($logo_img);
// 4. 计算Logo位置(居中)
$logo_x = ($qrcode_width - $logo_width) / 2;
$logo_y = ($qrcode_height - $logo_height) / 2;
// 5. 合并图像
// imagecopy($qrcode_img, $logo_img, $logo_x, $logo_y, 0, 0, $logo_width, $logo_height);
// 为了让Logo更自然,可以先给Logo加个白色背景
$white_bg = imagecreatetruecolor($logo_width, $logo_height);
imagefill($white_bg, 0, 0, imagecolorallocate($white_bg, 255, 255, 255));
imagecopy($white_bg, $logo_img, 0, 0, 0, 0, $logo_width, $logo_height);
imagecopy($qrcode_img, $white_bg, $logo_x, $logo_y, 0, 0, $logo_width, $logo_height);
imagedestroy($white_bg);
// 6. 输出最终图片
header('Content-Type: image/png');
imagepng($qrcode_img);
// 7. 释放内存
imagedestroy($qrcode_img);
imagedestroy($logo_img);

完整示例代码

这是一个完整的、可以直接运行的 PHP 文件示例,它生成了一个二维码并显示在网页上。

<?php
// 引入 PHPQRCode 库
// 确保你的 phpqrcode.php 文件和这个脚本在同一目录下,或者提供正确的路径
include "phpqrcode.php";
// 1. 准备要编码的数据
$data = "https://github.com/treffynnon/PHPQRCode";
// 2. 设置二维码参数
// 文件名(false表示直接输出到浏览器)
$filename = false;
// 纠错级别
$errorCorrectionLevel = 'L';
// 二维码每个小点的像素尺寸
$PointSize = 10;
// 二维码的边距
$margin = 2;
// 3. 生成二维码
// 调用静态方法 QRcode::png() 来生成二维码
QRcode::png($data, $filename, $errorCorrectionLevel, $PointSize, $margin);
?>

将上述代码保存为 generate_qr.php,在浏览器中访问它,你就会看到一个二维码图片。

-- 展开阅读全文 --
头像
上海智能科技公司的核心技术是什么?
« 上一篇 今天
深圳 智能科技有限公司
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]