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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、 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 方法

thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第1张图片

 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
  • 生成二维码保存到 public/static 下后, 创建对应视图层文件 index.html 显示图片


Qrcode 类库测试图片

thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第2张图片

四、测试结果

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

thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第3张图片

  • 扫二维码效果图得到如下内容:thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第4张图片

五、原始的二维码已经生成成功了, 但如何在原来的二维码基础加上 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 二维码 thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第5张图片
  • 扫二维码可以得到一样的测试内容 thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)_第6张图片

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

你可能感兴趣的:(thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码))