thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)

1、 PHPQRCode 是什么?php

PHPQRCode 基于 libqrencode 的 C 库开发, 提供建立二维码的 API.html

注意: PHPQRCode 的实现必须开启支持 GD2 扩展库 (通常状况下都是开启状态)thinkphp

2、如何安装?数组

  • 项目下经过 composer 安装

composer require endroid/qrcodeapp

  • 手动下载复制到 tp 项目下表明第三方类库目录 vendor 里.

下载地址: https://sourceforge.net/projects/phpqrcode/files/composer

3、实现过程函数

  • 使用到 vendor\aferrandini\phpqrcode\lib\PHPQRCode 下的 png 方法

public static function png($text, $outfile = false, $level = Constants::QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    {
        $enc = QRencode::factory($level, $size, $margin);
        return $enc->encodePNG($text, $outfile, $saveandprint=false);
    }
  • 建立一个控制层文件 index.php
<?php

// index.php

namespace app\index\controller;

class Index
{
    public function index()
    {
        $content = "thinkphp + Qrcode 类库内容测试";
        $outfile = "./static/" . date('Ymd', time()) . '.jpg';
        $level   = "L";
        $size    = "14";
        $margin  = 12;
        $save    = true;
        \PHPQRCode\QRcode::png($content, $outfile, $level, $size, $margin, $save);
         return view('index'); // 没有继承系统控制层基类, 因此用 view 渲染输出
    }
}
  • 生成二维码保存到 public/static 下后, 建立对应视图层文件 index.html 显示图片
<!-- index.html -->

<img src="./static/20190211.jpg" alt="Qrcode 类库测试图片">

4、测试结果测试

  • 访问网站获得的效果图以下:

  • 扫二维码效果图获得以下内容:

5、原始的二维码已经生成成功了, 但如何在原来的二维码基础加上 logo, 以加强宣传效果?网站

  • 我在 index.php 控制器文件新增个 test 方法用来测试

原理: 用 php 图像生成和处理相关函数组合处理 logo 图和已生成的二维码图成一张新的二维码图ui

函数 做用
imagecreatefromstring 根据字符串中的图像流建立一个新的图像, 也能检测图片格式, 条件是 php环境支持 JPEG,PNG,GIF,WBMP 和 GD2
file_get_contents 将文件写到一个字符串中
imagesx 获取图像宽度
imagesy 获取图像高度
imagecopyresampled 从新组合图片并调整大小
public function test()
    {
        $logo               = './static/2.jpg'; // logo 图
        $QR                 = './static/20190211.jpg'; // 已经生成的原始二维码图
        if ($logo) {
            $QR             = imagecreatefromstring(file_get_contents($QR)); // 检测是不是图片
            $logo           = imagecreatefromstring(file_get_contents($logo));
            $QR_width       = imagesx($QR); // 二维码图片宽度
            $QR_height      = imagesy($QR); // 二维码图片高度
            $logo_width     = imagesx($logo); // logo 图片宽度
            $logo_height    = imagesy($logo); // logo 图片高度
            $logo_qr_width  = $QR_width / 10; // 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, $from_width, $from_width, 0, 0, $logo_qr_width,
                $logo_qr_height, $logo_width, $logo_height);
        }
		
        imagepng($QR, './static/logo.png'); // 保存最终生成的二维码到本地
    }

6、logo 二维码测试结果

  • 调用 test 方法获得 logo 二维码
  • 扫二维码能够获得同样的测试内容
相关文章
相关标签/搜索