php 生成图片带二维码,并且强制用户下载
/* 下载二维码 */
public function 测试(){
// 接收传递的参数
$data['keys'] = [ 'b01id'=>trim(I('get.b01id')),
'b02id'=>trim(I('get.b02id')),
'b03id'=>trim(I('get.b03id')),
'brid'=>trim(I('get.brid')),
'unicon'=>trim(I('get.unicon'))];
if(empty($data['keys']['b01id'])) $this->error('商户不存在',U('Seller/index'),3);
$res = D('Sellerbrcode')->download($data); //方法在下面
if(!is_array($res)) $this->error($res,U('Seller/index'),3);
if(!empty($res['error'])) $this->error($res['error'],U('Seller/seebrcode?'.$res['url']),3);
// 制作扫码牌
$bgimg = imagecreatefromstring(file_get_contents($res['bgimg'])); // 拿到背景图做画布
import('Component/phpqrcode',APP_PATH,'.php'); // 引入二维码生成类
// 如果有扫码123二维码,则生成扫码123二维码
if('' != $res['codea']){
/* 参数说明:
* 参数1:二维码需要保持的值
* 参数2:false代表直接输出,其他则是生成的文件名
* 参数3:纠错级别:L、M、Q、H
* 参数4:点的大小,数值越大图片越大
* */
\QRcode::png($res['codea'], $res['codeimg'], 'H', 18);
/* 使用图片缩放方法
bool imagecopyresized($dst_im,$src_im,$dst_x,$dst_y,$src_x,$src_y,$dst_w,$dst_h,$src_w,$src_h)
dst_im 目标图像链接的资源。
src_im 源图像链接的资源。
dst_x X坐标的目的地。
dst_y y坐标目的地。
src_x X坐标的源点。
src_y y坐标源点。
dst_w 目的地宽度。
dst_h 目标高度。
src_w 源宽度。
src_h 源高度。
* */
$codeimg = imagecreatefromstring(file_get_contents($res['codeimg'])); // 拿到二维码图片
$bg_info = getimagesize($res['codeimg']); // 得到原二维码图片的大小
imagecopyresized($bgimg,$codeimg,1520,550,0,70,700,666,$bg_info[0],$bg_info[1]-36);
}
// 如果存在银联云闪付二维码,则生成银联云闪付二维码图片
if('' != $res['codeb']){
\QRcode::png($res['codeb'], $res['paycodeimg'], 'H', 18);
$codeimg = imagecreatefromstring(file_get_contents($res['paycodeimg']));// 拿到二维码图片
$bg_info = getimagesize($res['paycodeimg']); // 得到原二维码图片的大小
imagecopyresized($bgimg,$codeimg,236,536,0,80,750,670,$bg_info[0],$bg_info[1]-80);
}
// 如果存在商户推广二维码,则生成商户推广二维码图片
if('' != $res['codec']){
\QRcode::png($res['codec'], $res['bridimg'], 'H', 18);
$codeimg = imagecreatefromstring(file_get_contents($res['bridimg'])); // 拿到二维码图片
$bg_info = getimagesize($res['bridimg']); // 得到原二维码图片的大小
imagecopyresized($bgimg,$codeimg,1375,1288,0,0,230,230,$bg_info[0],$bg_info[1]);
}
// 如果存在商户名称
if('' != $res['bName']){
// 为了让文字居中,需要计算左偏移量
preg_match_all("/[0-9]{1}/",$res['bName'],$len1); // 得到字符串中的字数量
preg_match_all("/[a-zA-Z]{1}/",$res['bName'],$len2); // 得到字符串中的字母数量
preg_match_all("/([\x{4e00}-\x{9fa5}]){1}/u",$res['bName'],$len3); // 得到字符串中的中文数量
$left = 610 - (count($len1[0]) * 16) - (count($len2[0]) * 15) - (count($len3[0]) * 28);
$res['filename'] .= '_' . $res['bName']; // 追加二维码名称
$black = imagecolorallocate($bgimg, 0x20, 0x57, 0xa0); // 字体颜色
imagefttext($bgimg, 42, 0, $left, 480, $black,'./Public/font/msyh.ttf',$res['bName']);
}
// 如果存在二维码编号,则写入二维码编号
if('' != $res['brid']){
$black = imagecolorallocate($bgimg, 0x3e, 0x75, 0xc7); //字体颜色
imagefttext($bgimg, 30, 0, 1720,1190, $black,'./Public/font/msyh.ttf',$res['brid']);
}
// 添加银联云闪付logo
$codeimg = imagecreatefromstring(file_get_contents($res['union'])); // 拿到二维码图片
$bg_info = getimagesize($res['union']); // 得到原logo图片的大小
imagecopyresized($bgimg,$codeimg,550,760,0,0,120,120*$bg_info[1]/$bg_info[0],$bg_info[0],$bg_info[1]);
// 添加添加扫码123logo
$codeimg = imagecreatefromstring(file_get_contents($res['logo'])); // 拿到二维码图片
$bg_info = getimagesize($res['logo']); // 得到原logo图片的大小
imagecopyresized($bgimg,$codeimg,1805,770,0,0,120,120*$bg_info[1]/$bg_info[0],$bg_info[0],$bg_info[1]);
$res['filename'] .= '_' . date('Y-m-d',time()) . '.png'; // 追加二维码名称
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.$res['filename'].'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
imagepng($bgimg);
}
/* 生成图片前 拼接数据 */
public function download($data){
$tool = D('Tool'); // 得到公共类
$mysql = M();
$admin = I('session.admin');
/* 拼接url,方便以下错误时,跳转使用 */
$show['url'] = 'b01id='.$data['keys']['b01id'];
// 如果传递了用户id,那么判断该用户是否属于该商户
if($data['keys']['b03id']) $show['url'].= '&b03id='.$data['keys']['b03id'];
// 如果传递了二维码id
if($data['keys']['b02id']) $show['url'].= '&b02id='.$data['keys']['b02id'];
// 如果传递了银联云闪付
if($data['keys']['unicon']) $show['url'].= '&unicon='.$data['keys']['unicon'];
// 如果传递了推广二维码
if($data['keys']['brid']) $show['url'].= '&brid='.$data['keys']['brid'];
// 调用上部方法得到数据
$data = $this->seebrcode($data,$tool,$mysql,$admin,false);
if(!is_array($data)){ return ['error'=>$data,'url'=>$show['url']]; }
/* 得到要展示的数据 */
$show['bgimg'] = './Public/img/qrcode/qrcode.png'; // 背景图片地址
$show['logo'] = './Public/img/qrcode/logo.png'; // 扫码123的logo地址
$show['union'] = './Public/img/qrcode/unionPay.png'; // 银联logo地址
$show['codeimg'] = './Public/img/qrcode/code.png'; // 普通二维码生成的保存地址
$show['paycodeimg'] = './Public/img/qrcode/paycode.png'; // 银联二维码生成的保存地址
$show['bridimg'] = './Public/img/qrcode/brid.png'; // 商户推广二维码图片的保存地址
$show['filename'] = '扫码123收款二维码'; // 二维码名称
// 扫码123二维码内容
$show['codea'] = (!$data['keys']['b02id']) ? '' : isset($data['qrcode'][$data['keys']['b02id']]) ? $data['url1'].$data['qrcode'][$data['keys']['b02id']]['brCode'] : '';
// 扫码123二维码编号
$show['brid'] = (!$data['keys']['b02id']) ? '' : isset($data['qrcode'][$data['keys']['b02id']]) ? 'NO.'.$data['keys']['b02id'] : '';
// 银联二维码
$show['codeb'] = (!$data['keys']['unicon']) ? '' : isset($data['qrcode'][$data['keys']['unicon']]) ? $data['qrcode'][$data['keys']['unicon']]['brCode'] : '';
// 商户推广二维码
$show['codec'] = (!$data['keys']['brid']) ? '' : isset($data['download'][$data['keys']['brid']]) ? $data['url2'].$data['download'][$data['keys']['brid']]['brCode'] : '';
// 商户名称
$show['bName'] = empty($data['seller']['bShortName']) ? (empty($data['seller']['bName']) ? (empty($data['seller']['bCode']) ? $data['seller']['b01id'] : $data['seller']['bCode']) : $data['seller']['bName'] ) : $data['seller']['bShortName'];
/* 如果存在旧图片,则删除旧图片 */
if(is_file($res['codeimg'])) unlink($res['codeimg']); // 删除旧的扫码123二维码图片
if(is_file($res['paycodeimg'])) unlink($res['paycodeimg']); // 删除旧的银联云闪付二维码图片
if(is_file($res['paycodeimg'])) unlink($res['paycodeimg']); // 删除旧的商户推广二维码图片
return $show;
}
php 生成图片带二维码,并且强制用户下载相关推荐
- vue 制作带二维码的海报并下载 。 (html2canvas转为图片不显示文字的方法)
效果图如上 1.安装依赖 npm install qrcode (生成二维码) html2canvas (截取html元素生成图片) (引入依赖) import qrcode from "q ...
- 前端Vue H5生成带二维码的分享海报,实现长按保存到手机相册
前端Vue H5生成带二维码的分享海报,实现长按保存到手机相册 前言:关于H5分享海报的需求,经常会遇到,通常就是一个分享的二维码+分享文案,生成一张图片,供用户在手机上长按保存到手机,然后就可以将保 ...
- thinkphp生成带二维码的海报
阿里云搞活动,想要抓紧买 用thinkphp生成带二维码的海报功能. 准备:公众号二维码图片一张 背景图片一张 将二维码和背景图片合成的方法,可添加到common/common/function.ph ...
- PHP生成带二维码的分享图片
综述 项目开发中需求,要求在APP中进行分享的时候可以分享图片,图片由美工进行设计,其上带有二维码,分享给别人可以直接长按图片进行识别.这种方式在分享中用户体验更好,首先图片由美工设计很好看,其次这种 ...
- PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现
PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...
- 安卓手机扫二维码从FTP服务器下载apk
安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...
- SpringBoot生成二维码 扫描并可下载文件
生成二维码 扫描并可下载文件 pom.xml 依赖 application.yaml Controller ImageBuilderUtils 工具类 适当根据自己的业务需求变通,然后就能轻松使用了, ...
- 使用 OpenCV 构建带有二维码扫描仪的用户认证系统
计算机视觉开辟了 许多可能性,最简单和最受欢迎的日常应用之一是使用二维码和条形码扫描仪. 当你在超市收银台结账时会发生什么? 收银员使用设备扫描你购物篮中的每件商品,然后将价格自动记录在系统中以生成你 ...
- 利用zxing源码包批量生成二维码,压缩并下载到本地
在日常生活中,经常会使用手机扫各种二维码,或进行手机支付,但对于二维码是如何生成的,我做了小小的总结. 此处借用实际项目中业务进行说明:对每个重点部位(实体类:AppKeyPart)生成二维码,并实现 ...
最新文章
- Android:学习AIDL,这一篇文章就够了(上)
- 计算机英语复习,计算机英语期末复习
- linux-centos下源代码安装subversion (svn)
- sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器
- Android 系统 (79)---Android应用程序安装过程解析
- 软考信息系统项目管理师_信息化与信息系统4_软件工程_新一代信息技术---软考高级之信息系统项目管理师006
- 剑指offer面试题[49]-把字符串转化为整型
- 黑苹果能安装mysql吗_黑苹果安装与踩坑记
- 集线器(hub),交换机以及路由器异同;冲突域和广播域详解
- linux下sd分区扩容,实用技巧:Linux系统分区容量扩充的方法
- 李开复《人工智能》读后感
- 格兰杰检验的基本步骤_如何用格兰杰检验、协整对数据进行分析_格兰杰因果检验...
- java 微信 jar_weixin-java-tools
- android html footer 固定,HTML5+CSS把footer固定在底部
- FPGA数字时钟(可暂停调数,含代码)
- RV32I 基本指令集汇编解析
- ARM的大端格式big endian、小端格式little endian和字word
- python 多线程实现多任务,多进程实行多任务
- Texstudio的下载
- 字号、PX像素、PT点数、em、CM厘米、MM毫米之间的换算