首页 > 其他分享 >将dom转化为图片和批量下载

将dom转化为图片和批量下载

时间:2023-05-23 11:55:23浏览次数:42  
标签:canvas const 批量 dom height width let times 下载

利用 html2canvas 和 jszip 第三方库

import html2canvas from 'html2canvas'
import jszip from 'jszip'

具体实现:

downloadAll() {
      this.loading = true
      let _this = this
      const stations = document.getElementsByClassName('station_bar')
      let promises = []
      let zip = new jszip()
      for (let i = 0; i < stations.length; i++) {
        let element = stations[i]
        let times = 16
        const canvas = document.createElement('canvas')
        let canvasBox = element
        const width = parseInt(window.getComputedStyle(canvasBox).width)
        const height = parseInt(window.getComputedStyle(canvasBox).height)
        canvas.width = width * times
        canvas.height = height * times
        canvas.style.width = width + 'px'
        canvas.style.height = height + 'px'
        const context = canvas.getContext('2d')
        context.scale(times, times)
        const options = {
          backgroundColor: null,
          canvas: canvas,
          useCORS: true,
        }
        let promise = html2canvas(canvasBox, options).then((canvas) => {
          // toDataURL 图片格式转成 base64
          let dataURL = canvas.toDataURL('image/jpeg', 0.3)
          let fileName = `${this.stationData.StationName}_${
            i + 1
          }_${this.getCurrentDateTime()}.jpeg`
          zip.file(fileName, dataURL.split(',')[1], { base64: true })
        })
        promises.push(promise)
      }
      Promise.all(promises).then(function () {
        zip.generateAsync({ type: 'blob' }).then(function (content) {
          _this.loading = false
          // 创建下载链接
          var link = document.createElement('a')
          link.href = URL.createObjectURL(content)
          link.download = `${_this.stationData.StationName}_${_this.getCurrentDateTime()}_image.zip`
          link.click()
        })
      })
    },

下载单张:

 downloadPicture() {
      this.$emit('update:loading', true)
      let times = 16
      const canvas = document.createElement('canvas')
      let canvasBox = this.$refs.stationBarRef.$el
      const width = parseInt(window.getComputedStyle(canvasBox).width)
      const height = parseInt(window.getComputedStyle(canvasBox).height)
      canvas.width = width * times
      canvas.height = height * times
      canvas.style.width = width + 'px'
      canvas.style.height = height + 'px'
      const context = canvas.getContext('2d')
      context.scale(times, times)
      const options = {
        backgroundColor: null,
        canvas: canvas,
        useCORS: true,
      }
      html2canvas(canvasBox, options).then((canvas) => {
        this.$emit('update:loading', false)
        // toDataURL 图片格式转成 base64
        let dataURL = canvas.toDataURL('image/jpeg', 0.3)
        this.downloadImage(dataURL)
      })
    },
    downloadImage(url) {
      let a = document.createElement('a')
      a.href = url
      let name = `${this.data.StationName}_${this.index}_${this.getCurrentDateTime()}.jpeg`
      a.download = name
      a.click()
    },

标签:canvas,const,批量,dom,height,width,let,times,下载
From: https://www.cnblogs.com/baixi1271/p/17422955.html

相关文章

  • 使用pymongo批量清空表数据
    背景性能测试环境,有些入侵的表数据特别多(可能超过1000W),如果使用SQL删除会很慢。但是如果直接把表drop表,索引会丢失。可以写一个脚本,批量清空mongo表数据。实现思路说明:以下xx为对应的表名1、备份索引db.xx.getIndexes();2、删除表db.xx.drop();3、创建表db.create......
  • 苹果Mac电脑桌面下面Dock栏的下载不见了怎么办
    MACDock栏中的下载选项不见了,一般是以下两种: 1、首先请打开Finder窗口,可以在左窗格中看到“下载”栏目,我们可以直接把它拖动到Dock上。 2、我们可以看到“下载”栏目已经恢复到了Dock栏上,虽然是恢复了,但当我们点击预览时,结果发现它的显示方式和排......
  • The Foundry Nuke 14Mac软件安装包下载Nuke14Mac安装教程
    安装步骤:1,双击下载好的安装包,打开镜像2,然后选将nuke14直接拉到applications里面。3,返回镜像,选择FLT7.1v1-mac-x86...双击打开。4,点击允许。5,点击好。6,点击继续。7,继续。8,继续。9,点击同意。10,点击安装。11,输入电脑密码。12,安装结束点击关闭。13,打开foundrylicenseutility。14,123,按照......
  • VMware ESXi 6.0 U3 Final - ESXi 6 系列最终版下载
    VMwareESXi6.0U3Final-ESXi6系列最终版下载VMwareESXi6Standard请访问原文链接:https://sysin.org/blog/vmware-esxi-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVersionReleaseNameReleaseDateBuildNumberInstallerBuildNumberAvailab......
  • VMware ESXi 6.5 U3 Final - ESXi 6 系列最终版下载
    VMwareESXi6.5U3Final-ESXi6系列最终版下载VMwareESXi6Standard请访问原文链接:https://sysin.org/blog/vmware-esxi-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVersionReleaseNameReleaseDateBuildNumberInstallerBuildNumberAvailab......
  • VMware ESXi 6.7 U3 Final - ESXi 6 系列最终版下载
    VMwareESXi6.7U3Final-ESXi6系列最终版下载VMwareESXi6Standard请访问原文链接:https://sysin.org/blog/vmware-esxi-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVersionReleaseNameReleaseDateBuildNumberInstallerBuildNumberAvailab......
  • WebUploader中实现文件上传下载的三种解决方案(推荐)
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • Linux 安装已下载的 dotnet-sdk-6.0
    1.下载地址 https://dotnet.microsoft.com/zh-cn/download/dotnet 2.用工具 FileZilla(类似FTP功能)上传到Linux系统(用root登录) 3.用工具 Xshell7(类似Cmd功能) (用root登录)3.1切换到上传的目录下:  cd /root/下载3.2创建安装目录:     ......
  • vue中实现文件上传下载的三种解决方案(推荐)
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • JavaScript中实现文件上传下载的三种解决方案(推荐)
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......