• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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生成带二维码图片并强制下载实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • PHP生成二维码与识别二维码的方法详解【附源码下载】
    • PHP实现的创建带logo图标二维码生成类详解
    • PHP生成(支持多模板)二维码海报代码
    • PHP基于phpqrcode类生成二维码的方法详解
    • 微信小程序 PHP生成带参数二维码
    • php生成二维码图片方法汇总
    • php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
    • php+laravel 扫码二维码签到功能
    上一篇:php递归函数怎么用才有效
    下一篇:PHP Post获取不到非表单数据的问题解决办法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    php实现生成带二维码图片并强制下载功能 php,实现,生成,带,二维,码,