pc端js根据图片url进行下载单张图片以及批量下载到本地

1、单张下载

单张下载到本地主要实现方式是
1.使用cavans把图片转化未base64格式
2.创建a标签然后创建一个点击事件进行下载到本地
主要代码如下

loadCode(imgsrc, name ) {
      let image = new Image();
      // 解决跨域 Canvas 污染问题
      image.setAttribute("crossOrigin", "anonymous");
      image.onload = function () {
        let canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        let context = canvas.getContext("2d");
        context.drawImage(image, 0, 0, image.width, image.height);
        let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
        let a = document.createElement("a"); // 生成一个a元素
        let event = new MouseEvent("click"); // 创建一个单击事件
        a.download = name || "code"; // 设置图片名称
        a.href = url; // 将生成的URL设置为a.href属性
        a.dispatchEvent(event); // 触发a的单击事件
      };
      image.src = imgsrc;
    },
loadCode('https://ns-strategy.cdn.bcebos.com/ns-strategy/upload/fc_big_pic/part-00423-3446.jpg','风景')

如果下载的格式不是图片格式,那么很有可能就是你的命名那里有特殊符号,这样我们就需要进行筛选掉特殊符号

    // 过滤特殊字符串
    foramtStr(s) {
      var pattern = new RegExp(
        "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()&mdash;—|{}【】‘;:”“'。,、?]"
      );
      var rs = "";
      for (var i = 0; i < s.length; i++) {
        rs = rs + s.substr(i, 1).replace(pattern, "");
      }
      return rs;
    },

2、批量下载压缩包

1、需要遍历把图片改为base64
2、创建文件夹
3、创建压缩包并下载

首先下载两个插件
file-saver和jszip,我使用的版本分别是
“file-saver”: “^2.0.5”,
“jszip”: “^3.6.0”,
页面引用
import JSZip from “jszip”;
import FileSaver from “file-saver”;

    // 图片转64进制
    getBase64Image(src) {
      return new Promise(function (resolve, reject) {
        var canvas = document.createElement("canvas"),
          ctx = canvas.getContext("2d"),
          img = new Image();
        img.crossOrigin = "Access-Control-Allow-Origin";
        img.onload = function () {
          canvas.height = img.height;
          canvas.width = img.width;
          ctx.drawImage(img, 0, 0);
          var dataURL = canvas.toDataURL("image/png");
          let deleDataHeader = dataURL.split(",")[1];
          resolve(deleDataHeader);
          canvas = null;
        };
        //这个很重要
        img.src =src;
      });
    },
    // 批量下载图片
    downLoad() {
      let urls = [
      'https://ns-strategy.cdn.bcebos.com/ns-strategy/upload/fc_big_pic/part-00423-3446.jpg',
      'https://ns-strategy.cdn.bcebos.com/ns-strategy/upload/fc_big_pic/part-00423-3446.jpg',
      'https://ns-strategy.cdn.bcebos.com/ns-strategy/upload/fc_big_pic/part-00423-3446.jpg'
      ];
          let promises = [];
          urls.map((item) => {
            promises.push(this.getBase64Image(item));
          });

          Promise.all(promises)
            .then((result) => {
              let zip = new JSZip();// 创建压缩包
              let img = zip.folder("文件夹名称"); // 创建文件夹
              let number = 0;
              result.map((p) => {
                let i = number++;
                img.file(`${i}.png`, p, {
                  base64: true,
                });
              });
              zip.generateAsync({ type: "blob" }).then(function (content) {
                // see FileSaver.js
                FileSaver.saveAs(content, "下载名称.zip");
              });
            })
            .catch((err) => {});
        } 
    },

如果你进行下载的时候遇到跨域,那么就是这样图片你没权限下载,需要后端技术人员添加cors头

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现指定微信群图片批量下载保存,可以通过调用本地微信PC实现。以下是一种可能的解决方案: 1. 安装itchat库,该库可以通过Python调用本地微信PC。 ```python pip install itchat ``` 2. 通过itchat库登录微信PC。 ```python import itchat itchat.auto_login(hotReload=True) # hotReload=True表示热重载,避免多次扫码登录 ``` 3. 获取指定微信群的群聊对象,并获取所有图片消息的消息ID和下载链接。 ```python # 获取指定微信群的群聊对象 chatrooms = itchat.search_chatrooms(name='群聊名称') chatroom_name = chatrooms[0]['UserName'] chatroom = itchat.update_chatroom(chatroom_name, detailedMember=True) # 获取所有图片消息的消息ID和下载链接 msg_ids = [] img_urls = [] for msg in chatroom['MemberList']: if msg['MsgType'] == 3: # MsgType=3表示图片消息 msg_ids.append(msg['MsgId']) img_urls.append(msg['ImgUrl']) ``` 4. 根据图片下载链接,使用requests库下载图片并保存到本地。 ```python import requests # 下载图片并保存到本地 for url in img_urls: response = requests.get(url) with open('images/' + url.split('/')[-1], 'wb') as f: f.write(response.content) ``` 完整代码如下: ```python import itchat import requests itchat.auto_login(hotReload=True) # 获取指定微信群的群聊对象 chatrooms = itchat.search_chatrooms(name='群聊名称') chatroom_name = chatrooms[0]['UserName'] chatroom = itchat.update_chatroom(chatroom_name, detailedMember=True) # 获取所有图片消息的消息ID和下载链接 msg_ids = [] img_urls = [] for msg in chatroom['MemberList']: if msg['MsgType'] == 3: # MsgType=3表示图片消息 msg_ids.append(msg['MsgId']) img_urls.append(msg['ImgUrl']) # 下载图片并保存到本地 for url in img_urls: response = requests.get(url) with open('images/' + url.split('/')[-1], 'wb') as f: f.write(response.content) ``` 需要注意的是,该方法只能下载微信群中已经发送的图片消息,不能下载未发送的图片。同时,需要注意图片重名的问题,可以在保存图片时对图片文件名进行处理,避免重名覆盖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值