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);
}
/ 生成图片前 拼接数据 / 总结以上所述是小编给大家介绍的php生成带二维码图片并强制下载实现代码,希望对大家有所帮助。程序员遇到问题都会上(编程之家52php.cn)查找问题解答方法!如果觉得站点还不错,随手转发给程序员朋友一下! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |