您现在的位置是:首页 > 前端 > 网站首页前端

风三郎 2021-07-21 13:55:46 1737人次围观
风三郎   javascript   css   php  
简介 最近公司有一个项目要二维码批量打包下载的功能,由于之前二维码都不是生成好的,之前的二维码都是去点击通过php来生成的。现在客户的需求是通过选中的id编号来生成相关的二维码 想到的思路有两种 1.是通过后台php来生成图片实现打包压缩 2.直接通过前端来实现这一个功能

最近公司有一个项目要二维码批量打包下载的功能,由于之前二维码都不是生成好的,之前的二维码都是去点击通过php来生成的。现在客户的需求是通过选中的id编号来生成相关的二维码 想到的思路有两种 
1.是通过后台php来生成图片实现打包压缩
2.直接通过前端来实现这一个功能

后台的就不详细说了现在来说说前端我是如何生成的

1.通过 jquery.qrcode.js 、qrcode.js 、utf.js --生成二维码的插件 

2.FileSaver.js   jszip.js---图片压缩的插件

图片实现循环下载的功能(这种效果不太好 )

$(document).on("click", ".btn-download", function() {
   var $status = $(this).attr("data-status");
   var $selectall = $('#bs-table{$tablefix}').bootstrapTable('getAllSelections');
   var $ids = [];
   for (var i in $selectall) {
      $ids.push($selectall[i]['id']);
   }
   if ($ids.length == 0) {
      alerterr('请至少选择一项');
      return false;
   } else {
      layer.msg('正在导出中', { icon: 16,shade: [0.8, '#393D49'],shadeClose:false,time:60000 });
      //alertloading('正在导出中');
      $.post("{:url('base/getdevice')}",{ids:$ids.join(',')},function (res){
         //console.log(77);

         setTimeout(() => {
            zipqrcode(res.data);
            //createqrcode(res.data);
         }, 100)
      },'JSON');

   }
});

//进行压缩
function zipqrcode(qrcodedata){
   var zip = new JSZip();
   const img = zip.folder("qrCode"); //zip的文件名称
   var imgbase64=[]; //base64位图片信息
   var imgname=[];

   $.each(qrcodedata,function (k,v){
      var qrcode=$("#qrcode").qrcode({
         render:'canvas',
         width: 200, //宽度
         height:200, //高度
         text: "device_"+v['id'] //任意内容
      }).hide();
      var canvas=qrcode.find('canvas').get(0);

      var name='ID:'+v['id']+'--'+v['title']+'_'+v['sn'];
      imgbase64.push(canvas.toDataURL('image/jpg'));
      imgname.push(name);
      qrcode.find('canvas').remove();       //如果有循环,此句必不可少
   });

   for (let i = 0; i < imgbase64.length; i++) {
      // const basePic = item.url.replace(/^data:image\/(png|jpg);base64,/, "");  // 生成base64图片数据
      img.file(imgname[i]+'.png', imgbase64[i].replace(/^data:image\/(png|jpg);base64,/, ""), { base64: true });  // 将图片文件加入到zip包内
   }
   zip.generateAsync({ type: "blob" })   // zip下载
         .then(function (content) {
            // see FileSaver.js
            saveAs(content, "二维码.zip");  // zip下载后的名字
         });
   //关闭所有的
   layer.closeAll();
}
//生成二维码并且输出
function  createqrcode(data){

   $.each(data,function (k,v){
      var qrcode=$("#qrcode").qrcode({
         render:'canvas',
         width: 200, //宽度
         height:200, //高度
         text: "device_"+v['id'] //任意内容
      }).hide();
      var canvas=qrcode.find('canvas').get(0);
      qrcode.find('canvas').remove();       //如果有循环,此句必不可少
      //var imgdata = canvas.toDataURL('image/jpg');
      //saveFile(imgdata,v['name']);
      //downLoadImage(canvas,v['name'], v['id']);
      var name=v['title']+'_'+v['sn'];
      downLoadImage(canvas,name);
      //qrcode.find('canvas').remove();


   });
}
var m = 0
//第二种写法
function downLoadImage(canvas,name) {
   $.ajax({
      type: "POST",
      url: "{:url('ajaximg')}",
      data:{filename:name},
      async: false,
      success:function (res){

         var imgdata=canvas.toDataURL('image/jpg');
         saveFile(imgdata,name);
      }
   })
   // var a = document.createElement("a");
   // a.href = canvas.toDataURL('image/jpg');
   // a.download = name;
   // a.click();
   // a.remove();

}
//向浏览器输出图片
function saveFile(data,filename){
   var save_link=document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
   save_link.href=data;
   save_link.download=filename;
   var event=document.createEvent('MouseEvents');
   event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);
   save_link.dispatchEvent(event);
};

 

 

 

 

文章评论

来说点儿什么吧...

评论内容:

客服在线

服务时间

周一至周日 08:00-22:00

登录与注册