本文主要和大家分享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; }
相關推薦:
Laravel使用PHPQRCODE產生具有LOGO的二維碼圖片
#以上是php產生帶二維碼圖片並強制下載實現代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版
視覺化網頁開發工具