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