vue 获取上传视频的第一帧做为视频封面
//截取视频第一帧作为播放前默认图片findvideocover(url,file) {constvideo = document.getElementById("upvideo"); // 获取视频对象// const video = document.createElement("video") // 也可以自己创建videovideo.src=url // url地址 url跟 视频流是一样
上一篇文章记录了vue上传视频,接下来,需要在上传成功后截取视频第一帧做为视频封面。
截取视频第一帧
具体实现如下:
<template>
<div>
<div v-if="mediaList&&mediaList[0]&&mediaList[0].url">
<video :src="mediaList[0].url" style="width:320px;height:200px;" controls="controls" id="upvideo">您的浏览器不支持视频播放</video>
</div>
<canvas id="mycanvas" style="display: none"></canvas>
</div>
</template>
上传视频之后,在成功回调函数中拿到视频地址,video.src=url,然后,使用canvas截取图片。
//截取视频第一帧作为播放前默认图片
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.imgsrc = canvas.toDataURL ("image/png") // 截取后的视频封面
file.url=this.imgsrc;
}
}
canvas
截取视频第一帧使用的是canvas,相关步骤如下:
canvas可以用来截取图片。
适用场景:截取或者处理图片/视频/富文本编辑器。
(1)创建画布canvas或在html中直接写入:
var canvas = document.createElement('canvas');
(2)创建基于canvas的绘图环境:
var ctx = canvas.getContext('2d')
相关概念
绘图环境
在准备画布后,需要一些‘染料、画笔、绘图工具’的准备工作。也就是 canvas的上下文环境。
canvas.getContext(‘2d’)
2d目前可以理解为是固定参数,表示一个二维绘制环境。
canvas.getContext(‘2d’)的返回值
返回一个CanvasRenderingContext2D对象,也就是上文的能够支持绝大多数对画布的操作。
(3)在canvas上绘制图片
// ctx.drawImage(file,sx,sy,swidth,sheight,x,y,width,height);
ctx.drawImage(this, 0, 0, swidth, sheight);
在不需要剪裁的情况下,使用上述参数即截取操作file的全部,绘制到canvas上
| 参数 | 描述 |
|---|---|
| file | 规定要使用的图像、画布或视频。 |
| sx | 可选。开始剪切的 x 坐标位置。 |
| sy | 可选。开始剪切的 y 坐标位置。 |
| swidth | 可选。被剪切图像的宽度。 |
| sheight | 可选。被剪切图像的高度。 |
| x | 在画布上放置图像的 x 坐标位置。 |
| y | 在画布上放置图像的 y 坐标位置。 |
| width | 可选。要使用的图像的宽度。(伸展或缩小图像)。 |
| height | 可选。要使用的图像的高度。(伸展或缩小图像)。 |
(4)将canvas导出成图片放入src
var src = canvas.toDataURL('image/jpeg');
toDataURL()方法
toDataURL()方法是将canvas的内容导出。
canvas.toDataURL(type, encoderOptions);
type: 图片格式,默认image/jpeg,
encoderOptions:图片质量,取值范围为0到1,默认0.92。
返回值:包含 data URI 的DOMString,也就是base64格式。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)