PHP使用phpqrcode库生成带Logo的二维码

Owen
Owen
发布时间:2026-10-13| 4人浏览过
原创

本文详解如何使用PHP及phpqrcode库生成带有自定义Logo的二维码。核心流程分为两步:首先利用QRcode::png生成不含Logo的标准二维码底图,接着通过PHP GD库加载Logo并进行等比缩放与图像合成,最后保存结果。

实现原理

生成带Logo的二维码并非简单地在图片上叠加,而是需要处理两个关键技术点:

  1. 容错率(纠错级别):由于Logo覆盖了二维码中心区域,必须提高二维码的纠错级别(如 M 或 Q),以确保手机扫描时仍能识别被遮挡的部分。
  2. 图像缩放与合成:使用PHP内置的GD库函数,将Logo按一定比例缩小,并精准居中覆盖到底图上,避免破坏二维码边缘的信息结构。

环境准备

  • PHP 环境(建议 PHP 7.0 及以上版本)。
  • 已安装并启用的 GD 扩展。
  • 下载 phpqrcode.php 类库文件并放入项目目录。

操作步骤

第1步:初始化参数与生成基础二维码

目的:创建不含Logo的标准二维码作为背景层。

入口:phpqrcode 类库。

<?php
include ('phpqrcode.php');

// 1. 定义二维码内容
$value = 'http://www.codesc.net'; // 扫码后跳转的链接或文本

// 2. 设置纠错级别(关键:含Logo建议至少用 M 或 Q)
$errorCorrectionLevel = 'M';

// 3. 设置点的大小(矩阵点像素尺寸)
$matrixPointSize = 10;

// 4. 生成不带Logo的中间文件
QRcode::png(
    $value,
    'ewm.png',           // 中间文件名
    $errorCorrectionLevel,
    $matrixPointSize,    
    2                    // 白边宽度
);  
echo "标准二维码已生成" . "<br />";
?>

第2步:加载图片资源

目的:获取基础二维码数据和待插入的Logo图像。

$logo = 'emwlogo.gif'; // Logo图片路径(支持png/gif/jpg)
$QR = 'ewm.png';        // 上一步生成的二维码图片

if ($logo !== FALSE) {
    // 使用 imagecreatefromstring 从文件中创建图像资源
    $QR = imagecreatefromstring(file_get_contents($QR));
    $logo = imagecreatefromstring(file_get_contents($logo));
}

第3步:计算Logo尺寸并居中放置

目的:防止Logo过大导致二维码不可扫,保持视觉平衡。

if ($logo !== FALSE) {
    // 获取图像宽高
    $QR_width = imagesx($QR);
    $QR_height = imagesy($QR);
    $logo_width = imagesx($logo);
    $logo_height = imagesy($logo);

    // 计算Logo在二维码中的显示宽度(例如二维码宽度的 1/5)
    $logo_qr_width = $QR_width / 5;
    
    // 根据宽度计算高度,保持Logo原比例
    $scale = $logo_width / $logo_qr_width;
    $logo_qr_height = $logo_height / $scale;

    // 计算Logo左上角坐标(水平垂直居中)
    $from_width = ($QR_width - $logo_qr_width) / 2;

    // 执行重采样复制(保证清晰度)
    imagecopyresampled(
        $QR,         // 目标图像(二维码)
        $logo,       // 源图像(Logo)
        $from_width, $from_width, // 目标X, Y偏移
        0, 0,        // 源X, Y起点
        $logo_qr_width, $logo_qr_height, // 目标宽度, 高度
        $logo_width, $logo_height      // 源宽度, 高度
    );
}

第4步:保存最终结果

目的:将合成后的图像输出到硬盘。

// 保存为带Logo的二维码
imagepng($QR, 'ewmlogo.png');
echo "带Logo的二维码已成功保存!";

注意事项

  • 格式兼容性:虽然上述代码演示中使用 gif 格式的Logo,但在实际Web开发中,建议Logo和二维码均使用 png 格式,以便更好地支持透明通道,视觉效果更佳。
    修改方法:将 $logo = 'emwlogo.gif' 改为 .png 路径,并在输出时使用 imagepng() 即可。
  • Logo颜色:若Logo底色较深,务必确保Logo背景是透明的PNG,否则会遮挡二维码关键的黑白模块。
  • 性能优化:对于高并发场景,生成的二维码图片应当缓存存储,无需每次请求都重新计算合成。
以上就是PHP基于phpqrcode生成带LOGO图像的二维码的详细内容,更多关于PHP二维码开发的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。