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

2018-09-07 13:39

阅读:267

  本文主要和大家分享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生成带二维码图片并强制下载实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


评论


亲,登录后才可以留言!