使用dom-to-image截图html区域为一张图

第一步安装 :npm i dom-to-image
第二步引入: import domToImage from 'dom-to-image';
第三步截图:

javascript 复制代码
// 截图
function screenshot() {
  return new Promise((resolve, reject) => {
    const images = document.querySelectorAll('.isCrossOrigin'); //给需要截图的图片都加上clss名称便于获取
    const videos = imageWrapper.value.querySelectorAll('video'); // 获取画布下所有视频元素
    // 隐藏所有视频元素,因为截出来的视频是黑屏
    videos.forEach((video) => {
      video.style.display = 'none';
    });
    images.forEach((img) => {
      // 保存原始的图片地址
      const originalSrc = img.getAttribute('src');
      // 移除 src 属性,设置 crossOrigin解决图片跨域,然后再设置 src
      img.removeAttribute('src');
      img.crossOrigin = 'anonymous';
      img.src = originalSrc;
    });
    domToImage.toBlob(imageWrapper.value, {
      cacheBust: true,  //添加 cacheBust 选项以确保不会使用缓存图片
      width: bgSrcWidth.value,
      height: bgSrcHeight.value,
    })
      .then(function (blob) {
        // 截图成功后,去除跨域设置
        images.forEach((img) => {
          img.removeAttribute('crossOrigin');
        });
        // 显示视频元素
        videos.forEach((video) => {
          video.style.display = 'block';
        });
        const formData = new FormData();
        formData.append('file', blob, 'image.png');
        uploadBgImg(formData).then((res) => {
          resolve(res.data)
        })
      }).catch((err) => {
        // 如果出现错误,去除跨域设置并恢复所有视频元素
        images.forEach((img) => {
          img.removeAttribute('crossOrigin');
        });
        videos.forEach((video) => {
          video.style.display = 'block';
        });
        reject(err);
      })
  })
}

缺点:截图时间特别长,视频截图是黑屏,暂时还没解决,大家有解决的欢迎指正~

相关推荐
wangruofeng3 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
wangruofeng3 小时前
给前端开发者的 100 个设计参考网站
前端·设计
星栈7 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技7 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户47949283569157 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
风骏时光牛马9 小时前
生成一个AI多模态标题,仅输出一条标题,无额外文字、问句、备选、配图、文案等任何附加内容,不需要其他的任务服务 只要标题。
前端
wangruofeng10 小时前
从 GIF 到 AVIF:网页图片格式演进与 2026 年选型指南
前端·架构
清晨Coding11 小时前
为什么用 React Developer Tools 查看组件树这么乱?
前端·react.js
鶴哥只手遮天11 小时前
《Electron 45.2.3 内核解剖》第 4 章 补丁体系:380 个补丁改了什么
前端·electron
FungLeo13 小时前
成为全栈·Vue 管理后台篇·分类树与标签管理:层级数据如何落到管理界面
前端·javascript·vue.js·分类树·naive ui·标签管理·前端数据结构