您好,登錄后才能下訂單哦!
小編給大家分享一下php中如何實現生成帶二維碼圖片并強制下載功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
本文主要和大家分享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中如何實現生成帶二維碼圖片并強制下載功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。