php实现生成带二维码图片并强制下载功能
本文主要和大家分享php生成带二维码图片并强制下载实现代码,希望能帮助到大家实现一个自己的二维码。
/*下载二维码*/
publicfunction测试(){
//接收传递的参数
$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);
/*使用图片缩放方法
boolimagecopyresized($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_xX坐标的目的地。
dst_yy坐标目的地。
src_xX坐标的源点。
src_yy坐标源点。
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');//nocache
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);
}
/*生成图片前拼接数据*/
publicfunctiondownload($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生成带二维码图片并强制下载实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。