美文网首页
获取文件第一帧

获取文件第一帧

作者: 一个健康马 | 来源:发表于2023-12-27 09:30 被阅读0次
    // 获取视频文件第一帧
    export function oneImgUtil(file) {
      return new Promise((resolve, reject) => {
        // 创建一个 <video> 元素
        const video = document.createElement('video')
        video.setAttribute('crossOrigin', 'anonymous')
        video.currentTime = 1 //currentTime 属性设置或返回视频播放的当前位置(以秒计)   重要!不设置会导致第一帧图片不显示
        // 监听视频加载完成事件
        video.addEventListener('loadeddata', function () {
          // 将视频的第一帧绘制到 canvas 上
    
          // 创建一个 <canvas> 元素
          const canvas = document.createElement('canvas')
          const context = canvas.getContext('2d')
    
          // 设置 canvas 的宽高与视频的宽高相同
          canvas.width = video.videoWidth
          canvas.height = video.videoHeight
    
          //   setTimeout(()=>{
          context.drawImage(video, 0, 0, canvas.width, canvas.height)
    
          // 将 canvas 转换为图片并显示
          const dataURL = canvas.toDataURL() // 默认格式为 PNG
          let files = setFile(dataURL)
          resolve(files)
        })
    
        // 选择用户上传的视频文件
        function changeImg(file) {
          // 读取视频文件并将其赋值给 <video> 元素的 src 属性
          const reader = new FileReader()
          reader.onload = function (e) {
            video.src = e.target.result
          }
          reader.readAsDataURL(file)
        }
        changeImg(file)
      })
    }
    
    // base64转换file
    function setFile(base64) {
      const arr = base64.split(',')
      const type = arr[0].match(/:(.*?);/)[1]
      const size = window.atob(arr[1])
      let n = size.length
      const u8arr = new Uint8Array(n)
      while (n--) {
        u8arr[n] = size.charCodeAt(n)
      }
      return new File([u8arr], Date.now(), { type })
    }
    
    

    相关文章

      网友评论

          本文标题:获取文件第一帧

          本文链接:https://www.haomeiwen.com/subject/dyerndtx.html