php实现生成带二维码图片并强制下载功能

前端之家收集整理的这篇文章主要介绍了php实现生成带二维码图片并强制下载功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文主要和大家分享PHP生成二维码图片并强制下载实现代码,希望能帮助到大家实现一个自己的二维码

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,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,70,700,666,$bg_info[0],$bg_info[1]-36); } // 如果存在银联云闪付二维码,则生成银联云闪付二维码图片 if('' != $res['codeb']){ \QRcode::png($res['codeb'],$res['paycodeimg'],18); $codeimg = imagecreatefromstring(file_get_contents($res['paycodeimg']));// 拿到二维码图片 $bg_info = getimagesize($res['paycodeimg']); // 得到原二维码图片的大小 imagecopyresized($bgimg,236,536,80,750,670,$bg_info[1]-80); } // 如果存在商户推广二维码,则生成商户推广二维码图片 if('' != $res['codec']){ \QRcode::png($res['codec'],$res['bridimg'],18); $codeimg = imagecreatefromstring(file_get_contents($res['bridimg'])); // 拿到二维码图片 $bg_info = getimagesize($res['bridimg']); // 得到原二维码图片的大小 imagecopyresized($bgimg,1375,1288,230,$bg_info[1]); } // 如果存在商户名称 if('' != $res['bName']){ // 为了让文字居中,需要计算左偏移量 preg_match_all("/[0-9]{1}/",$res['bName'],$len1); // 得到字符串中的字数量 preg_match_all("/[a-zA-Z]{1}/",$len2); // 得到字符串中的字母数量 preg_match_all("/([\x{4e00}-\x{9fa5}]){1}/u",$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,$left,480,$black,'./Public/font/msyh.ttf',$res['bName']); } // 如果存在二维码编号,则写入二维码编号 if('' != $res['brid']){ $black = imagecolorallocate($bgimg,0x3e,0x75,0xc7); //字体颜色 imagefttext($bgimg,30,1720,1190,$res['brid']); } // 添加银联云闪付logo $codeimg = imagecreatefromstring(file_get_contents($res['union'])); // 拿到二维码图片 $bg_info = getimagesize($res['union']); // 得到原logo图片的大小 imagecopyresized($bgimg,760,120,120*$bg_info[1]/$bg_info[0],$bg_info[1]); // 添加添加扫码123logo $codeimg = imagecreatefromstring(file_get_contents($res['logo'])); // 拿到二维码图片 $bg_info = getimagesize($res['logo']); // 得到原logo图片的大小 imagecopyresized($bgimg,1805,770,$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生成二维码图片并强制下载实现代码,希望对大家有所帮助。程序员遇到问题都会上(编程之家jb51.cc)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下!

原文链接:https://www.f2er.com/php/16287.html

猜你在找的PHP相关文章