视频流截取某一帧保存为图片并上传至服务器

    //图片
    const canvas = document.createElement('canvas') //  创建canvas 用来截图

    const video: any = document.getElementById('videoElement') //创建video 
//用来存放被截图的视频

    // const video = this.$refs.video;   //获取到video标签
    const a = document.createElement('a')    
    // const a = document.getElementById("a"); //  用来自动下载图片保存到本地
    video.setAttribute('crossOrigin', 'anonymous') //  支持跨域

    canvas.width = video.videoWidth
    canvas.height = video.videoHeight
    const ctx = canvas.getContext('2d')

    ctx.drawImage(video, 0, 0, canvas.width, canvas.height)

    const filename = 'file_' + new Date().getTime() + '.jpg'
    a.setAttribute('download', filename)

    a.href = canvas.toDataURL('image/jpeg')

    a.click()    //下载

    await upload(a.href)   //上传服务器
// 将base64转换为blob
const dataURLtoFile = (dataURI, type) => {
  let binary = atob(dataURI.split(',')[1])
  let array = []
  for (let i = 0; i < binary.length; i++) {
    array.push(binary.charCodeAt(i))
  }
  return new Blob([new Uint8Array(array)], {type: type})
}
const upload = async (baseStr) => {
  // 图片地址
  let blob = dataURLtoFile(baseStr, 'image/jpeg')
  var formData = new FormData()
  let filename = new Date().getTime()
  let fileOfBlob = new File([blob], filename + '.jpg') // 重命名了
  formData.append('file', fileOfBlob)

  let result = await uploadPicture(formData)   //上传服务器
  if (result.status == 200) {
    // 上传成功后的处理
    var data = result.data.result
    // 图片地址
    // var url = baseImgUrl + data[0]
    // ...
    ElMessage.success('上传成功')
  } else {
    ElMessage.error('上传失败')
  }

}

const uploadPicture = async (formData) => {
    return await axios.post(uploadurl, formData, {
        headers: {
            'Content-Type': 'multipart/form-data',
        },
        onUploadProgress: function (progressEvent) {
            var percentComplete = Math.round(
                (progressEvent.loaded * 100) / progressEvent.total,
            )
            console.log(percentComplete + '% ' + progressEvent.total + ' bytes')
        },
    })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值