/* 下载二维码  */
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 生成图片带二维码,并且强制用户下载相关推荐

  1. vue 制作带二维码的海报并下载 。 (html2canvas转为图片不显示文字的方法)

    效果图如上 1.安装依赖 npm install qrcode (生成二维码) html2canvas (截取html元素生成图片) (引入依赖) import qrcode from "q ...

  2. 前端Vue H5生成带二维码的分享海报,实现长按保存到手机相册

    前端Vue H5生成带二维码的分享海报,实现长按保存到手机相册 前言:关于H5分享海报的需求,经常会遇到,通常就是一个分享的二维码+分享文案,生成一张图片,供用户在手机上长按保存到手机,然后就可以将保 ...

  3. thinkphp生成带二维码的海报

    阿里云搞活动,想要抓紧买 用thinkphp生成带二维码的海报功能. 准备:公众号二维码图片一张 背景图片一张 将二维码和背景图片合成的方法,可添加到common/common/function.ph ...

  4. PHP生成带二维码的分享图片

    综述 项目开发中需求,要求在APP中进行分享的时候可以分享图片,图片由美工进行设计,其上带有二维码,分享给别人可以直接长按图片进行识别.这种方式在分享中用户体验更好,首先图片由美工设计很好看,其次这种 ...

  5. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  6. 安卓手机扫二维码从FTP服务器下载apk

    安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...

  7. SpringBoot生成二维码 扫描并可下载文件

    生成二维码 扫描并可下载文件 pom.xml 依赖 application.yaml Controller ImageBuilderUtils 工具类 适当根据自己的业务需求变通,然后就能轻松使用了, ...

  8. 使用 OpenCV 构建带有二维码扫描仪的用户认证系统

    计算机视觉开辟了 许多可能性,最简单和最受欢迎的日常应用之一是使用二维码和条形码扫描仪. 当你在超市收银台结账时会发生什么? 收银员使用设备扫描你购物篮中的每件商品,然后将价格自动记录在系统中以生成你 ...

  9. 利用zxing源码包批量生成二维码,压缩并下载到本地

    在日常生活中,经常会使用手机扫各种二维码,或进行手机支付,但对于二维码是如何生成的,我做了小小的总结. 此处借用实际项目中业务进行说明:对每个重点部位(实体类:AppKeyPart)生成二维码,并实现 ...

最新文章

  1. Android:学习AIDL,这一篇文章就够了(上)
  2. 计算机英语复习,计算机英语期末复习
  3. linux-centos下源代码安装subversion (svn)
  4. sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器
  5. Android 系统 (79)---Android应用程序安装过程解析
  6. 软考信息系统项目管理师_信息化与信息系统4_软件工程_新一代信息技术---软考高级之信息系统项目管理师006
  7. 剑指offer面试题[49]-把字符串转化为整型
  8. 黑苹果能安装mysql吗_黑苹果安装与踩坑记
  9. 集线器(hub),交换机以及路由器异同;冲突域和广播域详解
  10. linux下sd分区扩容,实用技巧:Linux系统分区容量扩充的方法
  11. 李开复《人工智能》读后感
  12. 格兰杰检验的基本步骤_如何用格兰杰检验、协整对数据进行分析_格兰杰因果检验...
  13. java 微信 jar_weixin-java-tools
  14. android html footer 固定,HTML5+CSS把footer固定在底部
  15. FPGA数字时钟(可暂停调数,含代码)
  16. RV32I 基本指令集汇编解析
  17. ARM的大端格式big endian、小端格式little endian和字word
  18. python 多线程实现多任务,多进程实行多任务
  19. Texstudio的下载
  20. 字号、PX像素、PT点数、em、CM厘米、MM毫米之间的换算

热门文章

  1. Java框架之Struts2(六)
  2. MFC打印及打印预览
  3. 成为云计算产品经理的前提
  4. 设计大牛不愿意告诉小白的6款设计软件
  5. debian linux镜像下载,Debian Wheezy 7.7 发布,已提供镜像下载更新
  6. API 网关 (API Gataway)
  7. 体验篇 - 部署以太坊私有链 (PoA)
  8. 镜像与复制有什么区别_开发者如何快速精简容器云镜像?| 技术头条
  9. spring学习总结(二)
  10. SpringBoot实现每天给对象发送情话