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

一、 PHPQRCode 是什么?

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

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

二、如何安装?

  • 项目下通过 composer 安装

composer require endroid/qrcode

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

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

三、实现过程

  • 使用到 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 类库测试图片">

四、测试结果

  • 访问网站得到的效果图如下:

  • 扫二维码效果图得到如下内容:

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

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

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

函数作用
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'); // 保存最终生成的二维码到本地
    }

六、logo 二维码测试结果

  • 调用 test 方法得到 logo 二维码
  • 扫二维码可以得到一样的测试内容

转载于:https://my.oschina.net/u/4054189/blog/3009010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值