Thinkphp 生成二维码(PHP)

这篇博客介绍了如何在PHP项目中安装和使用Think-Qrcode库来生成带有logo和背景的二维码,包括命令行安装、Composer配置、自定义配置文件以及具体的使用方法。通过这个库,可以方便地在二维码中添加文字水印,调整颜色等,适用于各种场景的二维码生成需求。

一、安装

1、命令安装 

composer require dh2y/think-qrcode

2、require安装 

"require": {
"dh2y/think-qrcode":"*"
},

执行:

composer update

3、autoload psr-4标准安装 
(1)进入vendor/dh2y目录(没有自己创建)

(2)克隆

git clone https://github.com/cinaofdai/think-qrcode.git

(3)项目名称修改为think-qrcode
(4) 添加下面配置(composer.json文件)

"autoload": {
    "psr-4": {
        "dh2y\\qrcode\\": "vendor/dh2y/think-qrcode/src"
    }
},

执行:

composer update

二、添加配置文件(在config里自定义配置)

<?php
return [
    'cache_dir' => 'uploads/qrcode', //本地缓存地址
    'background'=> 'static/qrcode/background.png' //背景图
];

三、使用方法

$code = new QRcode();
$code_path =  $code->png($register_url)         //生成二维码
    ->logo('static/image/avatar-m.jpg')         //生成logo二维码
    ->background(180,500)                       //给二维码加上背景
    ->text($role,20,['center',740],'#ff4351')   //添加文字水印
    ->text($nick_name,20,['center',780],'#000000')
    ->getPath();                                //获取二维码生成的地址

直接显示: 

public function scerweima2($account = '', $pwd = '') {
	$value = 'http://xcx.aoyintl.cn/admin/Login/verify?type=200&account=' . $account . '&pwd=' . $pwd;                    //二维码内容
	//生成二维码图片
	$QR = (new \dh2y\qrcode\QRcode)->png($value, '', 9)->background(30, 30)->text('手机号:17614050603', 20, ['center', 500], '#000000')->text('hah', 20, ['center', 780], '#000000')->show();
	return $QR;
}

### ThinkPHP 生成二维码的方法及第三方库 在ThinkPHP框架中生成二维码,通常需要借助第三方库 `phpqrcode` 或其他类似工具。以下是详细的实现方法和代码示例: #### 方法一:使用 phpqrcode 库生成二维码 将 `phpqrcode.php` 文件放置到项目的第三方库目录中(例如 `vendor/`),然后通过控制器调用该库生成二维码。 以下是具体实现代码: ```php namespace app\index\controller; use think\Controller; class Qrcode extends Controller { public function generate() { $content = '要生成的内容'; // 二维码内容 $this->code($content); } public function code($info) { vendor('phpqrcode'); // 引入类库 $value = $info; // 二维码内容 $errorCorrectionLevel = 'L'; // 容错级别 $matrixPointSize = 5; // 生成图片大小 if (!is_dir("qrcode")) { // 判断是否有这个文件夹,没有则创建 mkdir("qrcode"); } $filename = 'qrcode/' . time() . rand(10000, 9999999) . '.png'; // 设置二维码文件名 \QRcode::png($value, $filename, $errorCorrectionLevel, $matrixPointSize, 2); // 生成二维码图片 $image_data = chunk_split(base64_encode(fread(fopen($filename, 'r'), filesize($filename)))); // 转换成base64数据 $domain = request()->domain(); // 获取当前域名 $url = $domain . '/' . $filename; return $url; } } ``` 上述代码实现了二维码生成,并将其保存为 PNG 文件[^1]。 #### 方法二:直接在视图中显示二维码 如果希望在页面中直接显示二维码,可以将二维码路径传递给视图层进行渲染。以下是一个简单的示例: 控制器代码: ```php namespace app\index\controller; use think\Controller; class Index extends Controller { public function index() { $fileName = createQRcode("https://www.baidu.com", 1); // 调用生成二维码函数 $this->assign('path', $fileName); // 将二维码路径赋值给模板变量 return $this->fetch(); // 渲染视图 } } ``` 视图代码(`index.html`): ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>二维码展示</title> </head> <body> <img src="{:path}" alt="二维码" /> </body> </html> ``` 此方法适用于需要在前端页面直接展示二维码的场景[^4]。 #### 方法三:带 Logo 的二维码生成 如果需要生成带 Logo 的二维码,可以通过修改 `phpqrcode` 的生成逻辑实现。以下是一个示例: ```php public static function pngWithLogo($text, $logoPath, $outfile = false, $level = Constants::QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint = false) { $enc = QRencode::factory($level, $size, $margin); $qrCodeImage = $enc->encodePNG($text, $outfile, $saveandprint); // 加载 Logo 图片并合并到二维码上 $qrCode = imagecreatefromstring(file_get_contents($qrCodeImage)); $logo = imagecreatefromstring(file_get_contents($logoPath)); $qrWidth = imagesx($qrCode); $logoWidth = imagesx($logo); $logoHeight = imagesy($logo); $logoPos = ($qrWidth - $logoWidth) / 2; imagecopyresampled($qrCode, $logo, $logoPos, $logoPos, 0, 0, $logoWidth, $logoHeight, $logoWidth, $logoHeight); imagepng($qrCode, $outfile); imagedestroy($qrCode); imagedestroy($logo); } ``` 上述代码实现了带 Logo 的二维码生成功能[^5]。 --- ### 注意事项 1. 确保已正确安装 `phpqrcode` 类库。 2. 如果使用 XAMPP 环境,需确保项目位于 `htdocs` 目录下,并通过命令行初始化 ThinkPHP 项目[^3]。 3. 根据实际需求调整二维码的尺寸、容错级别等参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值