Element上传组件截取视频作为视频封面

1.定义好html结构(css样式就不贴了)

<div class="uploadvideo">
          <!-- element选择视频文件组件 -->
          <el-upload
            class="upload-demo"
            drag
            multiple
            action="http://127.0.0.1/api/uploadvideo"
            ref="uploadvideo"
            :data="uploadForm"
            name="visionvideofile"
            :headers="headers"
            :on-preview="handlePictureCardPreview"
            :on-remove="handleRemove"
            :on-success="uploadVideoSuccess"
            :on-error="uploadVideoError"
            :on-change="changelist"
            :limit="1"
            :on-exceed="exccedlimit"
            :auto-upload="false"
            accept="video/*"
          >
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">
              将文件拖到此处,或<em>点击上传</em>
            </div>
            <div class="el-upload__tip" slot="tip">请上传MP4格式的视频素材</div>
          </el-upload>
          //预览视频
          <video
            :src="video"
            class="videoshow"
            id="upvideo"
            autoplay
            loop
            muted
            controls
          ></video>
          <canvas id="mycanvas" style="display: none"></canvas>
        </div>
          //截图按钮
        <button @click="jietu">截图</button>
         //截图之后的图片
        <img v-if="jieimgurl" :src="jieimgurl" alt="" />

2.需要为视频和图片绑定资源:data

 video: "",//视频地址
 jieimgurl: "",//截图地址

 3.现在需要获取到上传视频的本地地址,通过element只需要获取file文件即可

//选择视频,数据改变函数(element内部函数)
    changelist (file, fileList) {
      const URL = window.URL || window.webkitURL    //window.URL||window.webkitURL是浏览器兼容性写法
      console.log('file', URL.createObjectURL(file.raw))
      this.video = URL.createObjectURL(file.raw)//此处可以得到视频本地地址
      this.videolist = fileList.length//此处和我自己代码有关,可以忽略
      console.log(this.videolist)
    },

4.此时预览视频已经显示视频了,现在需要为截图按钮绑定事件(如果需要自动截取视频,可以将按钮事件的操作全部放在changelist函数之中。)

 jietu () {
      console.log("截图")
      console.log(this.video)
      this.findvideocover(this.video, { url: '' })//调用截图函数
    },
//截取视频第一帧作为播放前默认图片
    findvideocover (url, file) {
      const video = document.getElementById("upvideo") // 获取视频对象
      // const video = document.createElement("video") // 也可以自己创建video
      video.src = url // url地址 url跟 视频流是一样的
      var canvas = document.getElementById("mycanvas") // 获取 canvas 对象
      const ctx = canvas.getContext("2d") // 绘制2d
      video.crossOrigin = "anonymous" // 解决跨域问题,也就是提示污染资源无法转换视频
      video.currentTime = 1 // 第一帧
      video.oncanplay = () => {
        canvas.width = video.clientWidth // 获取视频宽度
        canvas.height = video.clientHeight //获取视频高度
        // 利用canvas对象方法绘图
        ctx.drawImage(video, 0, 0, video.clientWidth, video.clientHeight)
        // 转换成base64形式
        this.jieimgurl = canvas.toDataURL("image/png") // 截取后的视频封面
        file.url = this.jieimgurl
        console.log(this.jieimgurl)
      }
    },

5.此时就可以获取到截取图片地址,将其上传到后端即可。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值