使用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);
      })
  })
}

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

相关推荐
橙光成长2 小时前
PDF离线工具箱深度解析:4MB纯前端单文件,40+功能全本地运行,文件绝不上传
前端·pdf·1024程序员节
小poop9 小时前
CSS 基础与实战:从入门到精通网页美化
前端
Csvn10 小时前
运行时性能
前端
Never_every9911 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck11 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖12 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
狮子座的男孩13 小时前
html+css基础:25、3D变换(3D空间与景深/透视点的位置/位移/旋转/缩放/多重变换/背部可见性)
css·经验分享·html·旋转·透视点·缩放/位移·3d变换/空间与景深
欣欣之王来了13 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
IT_陈寒13 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
计算机魔术师13 小时前
砍半价格、参数再涨,国产旗舰追到 Opus 鼻尖了
前端