/* 下載二維碼 */
public function 測試(){
// 接收傳遞的參數(shù)
$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']){
/* 參數(shù)說明:
* 參數(shù)1:二維碼需要保持的值
* 參數(shù)2:false代表直接輸出,其他則是生成的文件名
* 參數(shù)3:糾錯級別:L、M、Q、H
* 參數(shù)4:點的大小,數(shù)值越大圖片越大
* */
\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);
}
// 如果存在銀聯(lián)云閃付二維碼,則生成銀聯(lián)云閃付二維碼圖片
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); // 得到字符串中的字數(shù)量
preg_match_all("/[a-zA-Z]{1}/",$res['bName'],$len2); // 得到字符串中的字母數(shù)量
preg_match_all("/([\x{4e00}-\x{9fa5}]){1}/u",$res['bName'],$len3); // 得到字符串中的中文數(shù)量
$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']);
}
// 添加銀聯(lián)云閃付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);
}
/* 生成圖片前 拼接數(shù)據(jù) */
public function download($data){
$tool = D('Tool');
// 得到公共類
$mysql = M();
$admin = I('session.admin');
/* 拼接url,方便以下錯誤時,跳轉(zhuǎn)使用 */
$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'];
// 如果傳遞了銀聯(lián)云閃付
if($data['keys']['unicon']) $show['url'].= 'unicon='.$data['keys']['unicon'];
// 如果傳遞了推廣二維碼
if($data['keys']['brid'])
$show['url'].= 'brid='.$data['keys']['brid'];
// 調(diào)用上部方法得到數(shù)據(jù)
$data = $this->seebrcode($data,$tool,$mysql,$admin,false);
if(!is_array($data)){ return ['error'=>$data,'url'=>$show['url']]; }
/* 得到要展示的數(shù)據(jù)
*/
$show['bgimg']
= './Public/img/qrcode/qrcode.png';
// 背景圖片地址
$show['logo']
= './Public/img/qrcode/logo.png';
// 掃碼123的logo地址
$show['union']
= './Public/img/qrcode/unionPay.png';
// 銀聯(lián)logo地址
$show['codeimg']
= './Public/img/qrcode/code.png';
// 普通二維碼生成的保存地址
$show['paycodeimg'] = './Public/img/qrcode/paycode.png';
// 銀聯(lián)二維碼生成的保存地址
$show['bridimg']
= './Public/img/qrcode/brid.png';
// 商戶推廣二維碼圖片的保存地址
$show['filename']
= '掃碼123收款二維碼';
// 二維碼名稱
// 掃碼123二維碼內(nèi)容
$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'] : '';
// 銀聯(lián)二維碼
$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']); // 刪除舊的銀聯(lián)云閃付二維碼圖片
if(is_file($res['paycodeimg'])) unlink($res['paycodeimg']); // 刪除舊的商戶推廣二維碼圖片
return $show;
}
以上所述是小編給大家介紹的php生成帶二維碼圖片并強制下載實現(xiàn)代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!