PHP根据指定url生成二维码图片

一、composer安装

http://packagist.p2hp.com/packages/codeitnowin/barcode

 

二、使用

调用generateQrCode()方法即可实现生成二维码图片并输出下载给用户

<?php
namespace manage\Test;use CodeItNow\BarcodeBundle\Utils\QrCode;
use common\extensions\Helper;
use yii\helpers\FileHelper;class TestService
{/*** 生成二维码图片* @return array* @throws \yii\base\Exception*/public function generateQrCode($uid = 400570){// 进行基础定义$url = 'http://www.xiaobudiu.top?uid=' . $uid;//定义需要生成二维码图片的url$out_put_file_name = '小卜丢饭团子'.date('His');//定义生成的二维码图片名称$tmp_path = \Yii::$app->basePath.'/runtime/tmp_file/';// 定义存储临时文件的临时文件夹路径// 判断如果临时文件夹不存在,则创建临时文件夹(用于存储生成的临时二维码图片)$generate_res = $this->generateDir($tmp_path);if (!$generate_res) {return Helper::msg('0', '创建图片临时文件夹失败');}// 根据url生成二维码图片base64 str$image_base64_str = $this->generateImgBase64Str($url);// 将base64转图片格式,并将图片存储到指定文件夹(返回值为图片的绝对路径)$file = $this->base64_to_img($image_base64_str, $tmp_path, 'admin_');if (!$file) {return Helper::msg('0', '生成二维码图片失败');}// 设置请求头header('Content-Disposition:attachment;filename='.$out_put_file_name.'.png');header('Content-Length:' . filesize($file));// 读取文件并写入到输出缓冲readfile($file);// 为了节省本地资源,删除临时图片(可选)unlink($file);}/*** 判断目录是否存在,如果不存在,则创建,存在则返回* @param $path* @return mixed* @throws \yii\base\Exception*/public static function generateDir($path){if (FileHelper::createDirectory($path, 0775, true)) {return $path;}return false;}/*** 根据url生成二维码图片base64 str*/public function generateImgBase64Str($url){$qr_code = new QrCode();$image_base64_str = $qr_code->setText($url)->setImageType(QrCode::IMAGE_TYPE_PNG)->generate();// 生成图片base64 strreturn $image_base64_str;}/*** base64转图片格式,并将图片存储到指定文件夹*/public function base64_to_img($base64_str, $path, $prefix = null){if($base64_str != ''){$output_file_name = $prefix.time().rand(100,999).'.png';$path .= $output_file_name;$file_handle = fopen($path, "wb");fwrite($file_handle, base64_decode($base64_str));fclose($file_handle);return($path);}return false;}# -------------------------- 备注方法,给不使用yii的同学参考 -------------------------/*** yii框架中的创建文件夹方法,即上面调用的同名方法* @param $path* @param int $mode* @param bool $recursive* @return bool* @throws \yii\base\Exception*/public function createDirectory($path, $mode = 0775, $recursive = true){if (is_dir($path)) {return true;}$parentDir = dirname($path);// recurse if parent dir does not exist and we are not at the root of the file system.if ($recursive && !is_dir($parentDir) && $parentDir !== $path) {static::createDirectory($parentDir, $mode, true);}try {if (!mkdir($path, $mode)) {return false;}} catch (\Exception $e) {if (!is_dir($path)) {// throw new \yii\base\Exception("Failed to create directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);throw new \Exception("Failed to create directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);}}try {return chmod($path, $mode);} catch (\Exception $e) {// throw new \yii\base\Exception("Failed to change permissions for directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);throw new \Exception("Failed to change permissions for directory \"$path\": " . $e->getMessage(), $e->getCode(), $e);}}
}

 

3、效果

浏览器直接进行下载:

打开下载的图片,效果:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CA 周记 - 派福利!通过 Azure 零成本进入 CUDA 编程

我们在配置深度学习环境的时候&#xff0c;除了安装各种库和框架外&#xff0c;如果需要 GPU 加速&#xff0c;还需要配置 CUDA 。那 CUDA 是什么 &#xff1f;它的作用是什么 &#xff1f;CUDA 编程介绍01什么是 CUDA&#xff1f;CUDA (Compute Unified Device Architecture) …

《视图更新与关系数据库理论》——2.1 关系和关系变量

本节书摘来自异步社区出版社《视图更新与关系数据库理论》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;【美】C.J. Date&#xff08;达特&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.1 关系和关系变量 每一个关系都有一…

PHP格式化全国省市区列表

一、代码部分 /*** 获取全国省市区列表&#xff08;格式化后&#xff09;*/public function getRegionList(){$data CoreRegion::find()->select([national_code, region_name, parent_id, region_level])->asArray()->all();$data $this->assembleRegionData($…

从 C# 崩溃异常 中研究 页堆 布局

一&#xff1a;背景 1.讲故事最近遇到一位朋友的程序崩溃&#xff0c;发现崩溃点在富编辑器 msftedit 上&#xff0c;这个不是重点&#xff0c;重点在于发现他已经开启了 页堆 &#xff0c;看样子是做了最后的挣扎。0:000> !analyze -v EXCEPTION_RECORD: (.exr -1) Except…

Win10笔记本不显示wifi列表

一、问题描述 1、连接有线网络时&#xff0c;只显示连接到的有线网络&#xff0c;而不显示wifi列表 2、不连接有线网络时&#xff0c;同样不显示wifi列表 二、解决方案 1、Win R 打开运行&#xff0c;并输入services.msc 2、回车确定&#xff0c;找到WLAN AutoConfig项&…

搭建WeApacheb网站服务器

本地yum源安装mkdir /opt/dvd (先用mkdir去根下opt目录下建一个名字叫dvd的目录)mount /dev/sr0 /opt/dvd (用mount命令&#xff0c;挂载光盘设备&#xff08;/dev/sr0&#xff09;,将光盘挂载到刚刚建立的dvd目录下&#xff08;/opt/dvd&#xff09;)写yum源配置文件|-cd…

PHP的构成及生命周期

一、PHP开源源代码下载地址&#xff1a; https://github.com/php/php-src.git 二、PHP的构成 1、目录结构 2、目录分析 &#xff08;1&#xff09;sapi目录是PHP的应用接口层。 &#xff08;2&#xff09;main为php的主要代码&#xff0c;主要是输入/输出、Web通信、PHP框架…

《Adobe After Effects CS6完全剖析》——动画:最重要的是关系

本节书摘来自异步社区《Adobe After Effects CS6完全剖析》一书中的第2章&#xff0c;动画&#xff1a;最重要的是关系&#xff0c;作者 【美】Mark Christiansen&#xff08;马克克里斯琴森&#xff09;&#xff0c;译者 苗玉敏&#xff0c;郭圣路&#xff0c;曹玉臣&#xff…

Oracle即将发布的全新Java垃圾收集器 ZGC

Java 11的特性集合已经确定&#xff0c;其中包含了一些非常棒的特性。新版本提供了一个全新的垃圾回收器ZGC&#xff0c;它由甲骨文开发&#xff0c;承诺在TB级别的堆上实现非常低的停顿时间。在本文中&#xff0c;我们将介绍甲骨文开发ZGC的动机、ZGC的技术概览以及ZGC带来的一…

如何获取 OSS AccessKeyId、AccessKeySecret

开通阿里云oss&#xff1a;https://www.aliyun.com/product/oss 1、点击概览 — AccessKey 注&#xff1a;官方链接 2、出现下图&#xff0c;选择“开始使用子用户Access Key” 3、填写用户名&#xff0c;并点击确定 4、这时会给你的手机发送验证码确定是本人操作&#xff0c;…

【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 2017-10-15 1、引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求。urllib是目前最常用的做法&#xff0c;然而Requests会比urlib更加方便&#xff0c;能…

《零信任的基石:使用 SPIFFE 为基础设施创建通用身份》翻译电子书分享

国庆假期除了去浙江和安徽玩了一圈欣赏江南山水和徽派建筑之外&#xff0c;还抽空翻译了一本电子书。本书译自 Solving the Bottom Turtle — a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity。你可以选择在线阅读&#xff08;推荐&#xff09…

《Outlook时间整理术》一创建和使用自己的文件夹结构

本节书摘来异步社区《Outlook时间整理术》一书中的第1章&#xff0c;作者&#xff1a; 【德】Lothar Seiwert , Holger Woeltje 译者&#xff1a; 欧阳宇&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 创建和使用自己的文件夹结构 花费约两小时为电子邮件…

《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点

本节书摘来自华章出版社《实用软件架构&#xff1a;从系统环境到软件部署》一书中的第2章&#xff0c;第2.4节&#xff0c;作者&#xff1a;[印]蒂拉克米特拉&#xff08;Tilak Mitra&#xff09;著&#xff0c;爱飞翔 译&#xff0c;更多章节内容可以访问云栖社区“华章计算机…

TCP:当初取代NCP,如今害怕被取代

我叫TCP&#xff08;Transmission Control Protocol&#xff09;也叫传输控制协议。不觉回忆1983年&#xff0c;亲手将NCP协议淘汰&#xff0c;取而代之的是我&#xff0c;成了火遍大江南北的网络红人之一。现如今&#xff0c;我感受到前所未有的恐惧&#xff0c;因为我一生的敌…

批处理中的IF详解

在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法&#xff1a;IF [NOT] ERRORLEVEL number command 这种用法现在很少用了&#xff0c;因为它需要使用到CHOICE命令&#xff0c;这个命令现在被set /p代替了&#xff0c;它是判断CHOICE命令选择的选项的&…

fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

女子篮球运动员比赛期间的心率、血乳酸浓度和时间-运动分析—摘要—本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式。在九场正式比赛中&#xff0c;对九名大学代表队队员进行了研究。每场比赛都被录像以确定主要动作的频率&#xff0c;连续记录心率&am…

《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些

本节书摘来异步社区《JavaScript机器人编程指南》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a;【美】Kassandra Perch&#xff08;珀芝&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 NodeBot是什么&#xff0c;基本词…

解决在Python中使用Win32api报错的问题,No module named win32api

一、系统环境 操作系统: Win7 64位 Python&#xff1a;3.7.0 二、在使用import win32api时&#xff0c;报错:No module named win32api 网上查到有下面解决办法&#xff1a; 方法1&#xff1a;pip install pypiwin32或pip3 install pypiwin32 或 python -m pip install pypiwin…

《Python游戏编程入门》——1.2 初识Python

本节书摘来自异步社区《Python游戏编程入门》一书中的第1章&#xff0c;第1.2节&#xff0c;作者[美]Jonathan S. Harbour &#xff0c;李强 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 初识Python Python既是一个软件工具包&#xff0c;也是一种…