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

原文地址:https://blog.csdn.net/CHENC0518/article/details/126796653

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.此时就可以获取到截取图片地址,将其上传到后端即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值