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