el-upload截取视频首帧作为上传封面图

话不多说,直接上代码:

/**
 * 获取视频第一帧作为回显封面
 * @param file 至少应包含url信息,即 {url: ""}
 */
export const getVideoCover = (file) => {
  // const  video = document.getElementById("myvideo"); // 获取视频对象
  const video = document.createElement("video"); // 也可以自己创建video
  video.src = file.url; // url地址 url跟 视频流是一样的

  // var canvas = document.getElementById('mycanvas') // 获取 canvas 对象
  var canvas = document.createElement("canvas"); // 获取 canvas 对象
  const ctx = canvas.getContext("2d"); // 绘制2d
  video.crossOrigin = "anonymous"; // 解决跨域问题,也就是提示污染资源无法转换视频
  video.currentTime = 1; // 第一帧

  video.oncanplay = () => {
    canvas.width = video.clientWidth ? video.clientWidth : 320; // 获取视频宽度
    canvas.height = video.clientHeight ? video.clientHeight : 320; //获取视频高度
    // 利用canvas对象方法绘图
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    // 转换成base64形式
    let videoFirstimgsrc = canvas.toDataURL("image/png"); // 截取后的视频封面
    let videoUrl = file.url;
    file.url = videoFirstimgsrc; // file的url储存封面图片
    file.videoUrl = videoUrl; // file的videoUrl储存视频

    video.remove();
    canvas.remove();
  };
  return file;
};

这部分就是关键代码,可以直接复制整段代码作为方法引入,需要注意的是,要在文件上传成功后调用,最好在on-success中或者on-change中,否则是拿不到file的。

 另外如果想做成这样点击弹出可查看视频的弹窗,记得将返回的file对象的videoUrl传入弹窗,因为此时的url已经被我们赋值为图片了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值