vue 视频截图获取第一帧或者某一帧

 id:传入的video容器id,imgType:截图文件的类型。

const screenshot = (id, imgType)=>{
  const video = document.getElementById(id);
  const width = video.videoWidth;
  const height = video.videoHeight;
  // 创建画布准备截图
  const canvas = document.createElement('canvas');
  // 设置video属性
  video.setAttribute('crossOrigin', 'anonymous')
  // 设置画布的宽高
  canvas.width = width;
  canvas.height = height;
  // 图片绘制
  canvas.getContext('2d').drawImage(video, 0, 0, width, height)
  
  return new Promise((resolve,reject)=>{
      try {
          let dataURL = canvas.toDataURL(imgType)
          resolve(dataURL)
      } catch (error) {
          reject(error)
      }
  })
}

 返回结果为base64编码,将base64编码转换为file对象。

export const base64ToFile = (dataurl, filename = '') => {
	let arr = dataurl.split(',')
	let mime = arr[0].match(/:(.*?);/)[1]
	let suffix = mime.split('/')[1]
	let bstr = atob(arr[1])
	let n = bstr.length
	let u8arr = new Uint8Array(n)
	while (n--) {
		u8arr[n] = bstr.charCodeAt(n)
	}
	return new File([u8arr], `${filename}.${suffix}`, {
		type: mime
	})
}

完整使用如下

<video ref="video" id="video" width="100%" height="100%" controls autoplay crossOrigin="Anonymous" :src="info.url" />

 screenshot('video', 'image/png').then(dataURL => {
        const form = new FormData()
        form.append('file', base64ToFile(dataURL))
 })

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值