php 生成分享二维码


//调用方法:
PHPQrcode::generateQrcode($res,1);


//下方文件放在extend/service目录下,PHPQrcode.php
<?php
namespace service;

use think\Env;

require("./../extend/qrcode/phpqrcode.php");

/**
 * 生成二维码
 */
class PHPQrcode
{
    /**
     * 二维码生成
     */
    public function generateQrcode($request=array(),$type)
    {
        // 模拟参数
//        $request = array(
//            'imgUrl' => 'http://www.baidu.com',
//            'params' => array(
//                'params' => 'LTy02jzt7G5jWitTIWIga2znpik9uAwi6hz%252B6yI%252ByRM%253D',
//                'filePath' => 'partners/bbb/123456',
//                //'partner_id' => '123456',
//            ),
//            'user_id'=>1,
//            'goods_id'=>3,
//        );
        //二维码生成地址
        $request['filePath'] = ROOT_PATH.'public/qrcode/';

        // 检测参数
        if(empty($request['imgUrl']) || !filter_var($request['imgUrl'],FILTER_VALIDATE_URL)){
            return false;
        }

        // url处理
        $content = $request['imgUrl'];
        if(!empty($request['params'])){
            $content = $request['imgUrl'] . "?" . http_build_query($request['params']);
        }
//        \think\Log::write($content, date('Y年m月d日 H:i:s').'参数', true, 'Content/');


            if($type == 1){
                $filename = 'user'.$request['id'].'.png';
            }else{
                $filename = 'teamlist'.$request['id'].'.png';
            }

        \QrCode::png($content, $request['filePath'].$filename, 'L', '6'); // 生成二维码内容

//        return config('web_site_domain') . '/qrcode/'.$filename ;
        return   'qrcode/'.$filename ;
        // $codeUpload  = json_decode(action('channel/Qiniu/uploads',['request'=>[
        //     'filePath' => file_get_contents($filename),
        //     'uploadsImgType' => 'BASE64', // 上传图片类型(URL:URL类型上传 BASE64:BASE64类型上传)*
        //     'ext' => 'png', // 文件后缀(BASE64类型必传)
        //     'fileName' => $request['params']['fillePath'].'qrcode'.$request['params']['partner_id'],
        // ]]), true);
        // if($codeUpload['status'] == '2000'){
        //     // unlink($filename);
        //     return $this->parse_data();
        // }else{
        //     return $this->parse_data('5000','失败!');
        // }
    }

    /**
     * 带logo的二维码生成
     */
    public function generateQrcodeLogo($request=array(),$type=1)
    {
        // 模拟参数
/*         $request = array(
             'imgUrl' => 'http://www.chaojizhangdan.com',
        'apiHost' => 'http://xinyong.chaojizhangdan.com',
             'params' => array(
                 'username' => 'zneghu',
                 'password' => '1231434',
             ),
         );*/
//        $request = request()->param();
        // 检测参数
        // 检测参数 @get_headers($request['imgUrl'])
/*        if(empty($request['imgUrl']) || !filter_var($request['imgUrl'],FILTER_VALIDATE_URL)){
            return false;
            return $this->parse_data('5000','URL参数错误,不存在或者未书写全,支持http|https!');
        }*/

        // url处理
        $content = $request['imgUrl'];
/*        if(!empty($request['params'])){
            $request['params']['params'] = urlencode($request['params']['params']);
            $params = $this->opensslEncrypt($request['params'],'',$request['params']['strs']); // 加密
            $content = $request['imgUrl'] . "?params=" . $params;
        }*/
        // 创建生成二维码对象
        $filename = \Env::get("runtime_path") . 'qrcode/';
        if(!is_dir($filename)) mkdir($filename, 0777, true);
        if (!is_readable($filename)) chmod($filename, 0777);
        $filename = $filename . rand(10000,99999) .'.png';  // 生成二维码存储位置
        \QrCode::png($content, $filename, 'H', '6'); // 生成二维码内容
        $logo = ROOT_PATH.'public/qrcode/logo.png'; // 准备好的logo图片public/logo.png
        if(file_exists($logo)){
            $QR = imagecreatefromstring(file_get_contents($filename)); // 目标图象连接资源。
            $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 / 4; // 组合之后logo的宽度(占二维码的1/5)
            $scale = $logo_width/$logo_qr_width; // logo的宽度缩放比(本身宽度/组合后的宽度)
            $logo_qr_height = $logo_height/$scale; // 组合之后logo的高度
            $from_width = ($QR_width - $logo_qr_width) / 2; // 组合之后logo左上角所在坐标点

            //重新组合图片并调整大小 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
            imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
        }

        // 输出图片
//        empty($request['params']['partner_id']) ?  $logofile = false : $logofile = $request['params']['partner_id'].'.png';
//        $logofilename = $request['uid'].'-'.$request['activity_id'].'-'.$request['goods_id'].'-'.$request['sku_id'].'.png';
        if($type == 1){
            $logofilename = 'user'.$request['id'].'.png';
        }else{
            $logofilename = 'teamlist'.$request['id'].'.png';
        }


        $logofile = ROOT_PATH.'public/qrcode/'.$logofilename;
        imagepng($QR, $logofile);
        imagedestroy($QR);
        imagedestroy($logo);

        return '/qrcode/'.$logofilename;
        /*        $codeUpload  = json_decode(action('channel/Qiniu/uploads',['request'=>[
                    'filePath' => file_get_contents($logofile),
                    'uploadsImgType' => 'BASE64', // 上传图片类型(URL:URL类型上传 BASE64:BASE64类型上传)*
                    'ext' => 'png', // 文件后缀(BASE64类型必传)
                    'fileName' => $request['params']['fillePath'].'qrcode'.$request['params']['partner_id'],
                ]]), true);*/

        /*        if($codeUpload['status'] == '2000'){
                    unlink($logofile);
                    return $this->parse_data();
                }else{
                    return $this->parse_data('5000','失败!');
                }*/
        // $html =  '<body style="text-align:center"><img src="qrcode.png" /></body>';
        // return $html;
    }

}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765205.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[DataWhale大模型应用开发]学习笔记1-尝试搭建向量数据库

1.词向量 1.定义 词向量&#xff08;Word Vector&#xff09;是将单词表示为向量形式的技术&#xff0c;是自然语言处理&#xff08;NLP&#xff09;中的一种常用方法。通过将单词转化为向量&#xff0c;计算机能够更好地理解和处理语言。简单来说&#xff0c;词向量就是将单…

Cocos制作抖音小游戏接入侧边栏复访接口实例

本篇文章主要讲解&#xff0c;使用cocos接入抖音小游戏侧边栏接口的实例教程。 日期&#xff1a;2024年7月1日 作者&#xff1a;任聪聪 教程实例&#xff1a;https://download.csdn.net/download/hj960511/89509196 下载后可直接导入运行 上传游戏后抖音预审不通过 注意&#x…

win10下安装PLSQL14连接Oracle数据库

问题背景 在使用Oracle开发过程中&#xff0c;经常会使用工具来连接数据库&#xff0c;方便查询、处理数据。其中有很多工具可以使用&#xff0c;比如dbeaver、plsql等。本文主要介绍在win10环境下&#xff0c;plsql14的安装步骤以及安装过程中遇到的一些问题。 安装步骤及问题…

TensorRT学习(二)TensorRT使用教程(Python版)

本文适合快速了解TensorRT使用的整体流程,具体细节还是建议参考TensorRT的官方文档。 加速原理: 加速原理比较复杂,它将会根据显卡来优化算子,以起到加速作用(如下图所示)。简单的来说,就是类似于你出一个公式1+1+1,而你的显卡支持乘法,直接给你把这个公式优化成了1*…

scikit-learn教程

scikit-learn&#xff08;通常简称为sklearn&#xff09;是Python中最受欢迎的机器学习库之一&#xff0c;它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程&#xff0c;涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…

controller不同的后端路径对应vue前端传递数据发送请求的方式,vue请求参数 param 与data 如何对应后端参数

目录 案例一&#xff1a; 为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 补充&#xff1a;后端controller 参数上如果没写任何注解&#xff0c…

【附精彩文章合辑】为何选择TypeScript?转变的驱动力:Rust的魅力何在?

在探讨一个开发者团队耗时18个月从TypeScript转向Rust&#xff0c;并随后对TypeScript进行严厉批评的情境时&#xff0c;我们首先需要认识到&#xff0c;任何技术栈的选择与转换都是基于一系列复杂的考量&#xff0c;包括但不限于项目需求、性能瓶颈、团队技能、长期可维护性以…

VGPU的使用

&#xff08;作者&#xff1a;陈玓玏&#xff09; 开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/data-infra/cube-studio 训练AI模型以及部署模型推理服务时&#xff0c;GPU往往是必不可少的&#xff0c;但当我们机器上没有足够的GPU卡可使用时&#xf…

探索未来远程调试新纪元——《串口网口远程调试软件》:无缝连接,高效调试

文章目录 前言一、无缝连接&#xff0c;突破距离限制二、高效调试&#xff0c;提升工作效率三、安全可靠&#xff0c;保护数据安全四、用户友好&#xff0c;简化操作流程五、软件地址六、远程调试软件 七、基本操作1、订阅主题2、连接3、串口调试4、网口调试 八、软件地址结束语…

【问题记录】如何在xftp上查看隐藏文件。

显示隐藏的文件夹 用xftp连接到服务器后&#xff0c;发现有些隐藏的文件夹并未显示出来&#xff0c;通过以下配置&#xff0c;即可使隐藏的文件夹给显示出来。 1.点击菜单栏的"小齿轮"按钮&#xff1a; 2.勾选显示隐藏的文件夹&#xff1a; 3.点击确定即可。

MES系统如何帮助企业提高生产效率

万界星空科技推出的制造执行MES系统&#xff0c;通过一系列先进的技术手段和管理理念&#xff0c;显著提高了制造业工厂的生产效率。以下是MES系统帮助提高生产效率的详细分析&#xff1a; 一、实时监控与快速响应 实时监控生产状态&#xff1a;MES系统能够实时采集生产线上的…

java 代码块

Java中的代码块主要有三种类型&#xff1a;普通代码块、静态代码块、构造代码块。它们的用途和执行时机各不相同。 普通代码块&#xff1a;在方法内部定义&#xff0c;使用一对大括号{}包围的代码片段。它的作用域限定在大括号内&#xff0c;每当程序执行到该代码块时就会执行其…

SpringMVC的基本使用

SpringMVC简介 SpringMVC是Spring提供的一套建立在Servlet基础上&#xff0c;基于MVC模式的web解决方案 SpringMVC核心组件 DispatcherServlet&#xff1a;前置控制器&#xff0c;来自客户端的所有请求都经由DispatcherServlet进行处理和分发Handler&#xff1a;处理器&…

linux中如何启动python虚拟环境

找到python虚拟环境所在目录 执行下面的命令即可 source auth_python/bin/activate

linux 下neo4j的安装

一、neo4j简介 Neo4j 是一个高性能的 NoSQL 图形数据库,它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j 也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。 neo4j与jdk版本对应 neo4j的版本需要与jdk版本相适配,否则容易出现安装失…

数据库原理之数据库基本概念

目录 前言 基本概念 数据库完整性 前言 今天我们来看看数据库的基本概念&#xff0c;帮助大家对数据库有一点点最基本的了解 基本概念 4个基本概念 数据data&#xff1a;描述事物的符号&#xff0c;数据库中存储的基本对象。 数据库Database&#xff1a;长期存储在计算机…

CentOS 7 搭建rsyslog日志服务器

CentOS 7 搭建rsyslog日志服务器 前言一、IP地址及主机名称规划1.修改主机名 二、配置rsyslog日志服务器1.安装rsyslog服务2.编辑/etc/rsyslog.conf 文件3.启动并启用rsyslog服务4.验证端口是否侦听 三、在rsyslog日志服务器上配置firewalld防火墙四、配置rsyslog日志客户端1.编…

25考研:今年初试时间比去年更早了?

过去5年考研初试时间安排如下&#xff1a; 24考研&#xff1a;2023年12月23-24日&#xff08;倒数第二个周末&#xff09; 23考研&#xff1a;2022年12月24-25日&#xff08;倒数第二个周末&#xff09; 22考研&#xff1a;2021年12月25-26日&#xff08;最后一个周末&#xf…

opencascade AIS_InteractiveContext源码学习7 debug visualization

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

数据加密解密和哈希的解析

[S1301]数据的加解密 对提供的原始数据&#xff08;字符串或者二进制数组&#xff09;进行加密是数据保护框架体提供的基本功能&#xff0c;接下来我们利用一个简单的控制台程序来演示一下加解密如何实现。数据的加解密均由IDataProtector对象来完成&#xff0c;而该对象由IDa…