vue 获取上传视频的第一帧做为视频封面

这篇具有很好参考价值的文章主要介绍了vue 获取上传视频的第一帧做为视频封面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇文章记录了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格式。文章来源地址https://www.toymoban.com/news/detail-436555.html

到了这里,关于vue 获取上传视频的第一帧做为视频封面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端截取视频第一帧作为封面

    概述 1.做项目的时候突然想截取视频第一帧,作为视频的封面,然后搜了很多博客都发现得到空白的图片,最后得到了解决。 2.方法:通过创建canvas标签,利用其drawImage() 方法在画布上绘制该视频,然后运用toDataURL方法转换canvas上的图片为base64格式,并将base64格式的图片作为

    2023年04月23日
    浏览(30)
  • js(ts)截取视频第一帧作为封面图

    直接上代码: 这里有三个地方需要注意: 1. 需要加上 preload 属性 这是防止截图结果为黑屏的关键一步 2. canvas宽高的设置 网络上其它文章的代码都直接读取 video.width 和 video.height ,会导致如果是竖视频截取出来的封面图在横显示时会变形 3. 判断图片有效性 有时候截取到的图

    2024年02月10日
    浏览(28)
  • uniapp video(倍速功能、层级过高、视频第一帧做封面 等问题)

             由于上次写video组件的问题,过于划水,没讲清楚,导致自己花费了很多时间,重新踩坑,对自己很抱歉。 效果图如下:倍速的显示和隐藏,需在全屏的时候 和 显示控制组件时 代码逻辑 1. 实现倍速的核心是创建视频组件控制器,调用它的倍速方法 =》官方文档

    2024年02月08日
    浏览(27)
  • canvas截取多个视频的第一帧,第n秒画面

    业务涉及视频预览,不点击视频则不播放而是先展示视频的画面给到用户 “因为本人特别喜欢梅艳芳,所以也留存了很多她的视频,这里就以她的视频做测试了” 截取多个视频的第一帧,使用:Promise+loadeddata事件+canvas Promise来帮助我们顺序地拿到多个视频的第一帧画面 loa

    2023年04月08日
    浏览(30)
  • uni-app App和H5平台上传视频截取视频第一帧生成图片

    提示:因为uni-app中renderjs仅支持App和H5平台,所以该方案仅支持当前这两个平台。 this.request为本人封装的接口请求方法,可以替换成个人的接口请求方法,如有需要可在下方留言 因为uni-app App端没有dom概念,不支持dom操作,并且uni-app的canvas不支持绘制video。renderjs完美解决了

    2023年04月09日
    浏览(37)
  • uniapp 上传视频到阿里云之后回显视频获取视频封面

    1.initial-time Number 指定视频初始播放位置,单位为秒(s)。 没什么卵用 2.使用 uni.createVideoContext(“myVideo”, this).seek(number)。 没什么卵用 t_1000 等于截取视频第 1秒作为封面

    2024年04月11日
    浏览(26)
  • FFmpeg批量提取视频的某一帧作为封面

    命令是这样的: 说明: -i input.flv 截取的视频的名字 -ss 00:00:02 这是视频的第2秒 -frames:v 1 这代表单独这1帧 out.png 要保存的截取的封面文件 整个命令实现的是:截取input视频从第2秒,然后只截取这1帧,作为画面,保存到out.png 上面这个已经满足了我想批量生成视频封面的目

    2024年02月09日
    浏览(29)
  • js截取video视频某一帧做封面的简单案例

    可以使用 canvas 元素来截取视频某一帧并生成封面。 首先,在 video  标签上设置视频源地址和自动播放属性: 然后,在 canvas  标签上定义宽高和样式,并通过 JavaScript 获取视频元素和 canvas 元素: 接着,定义一个函数来截取视频某一帧,并将其渲染到 canvas 上: 在需要生成

    2024年02月04日
    浏览(36)
  • uni-app从后端返回的mp4链接视频截取一帧为封面

    一、需求: 后端返回包含视频链接的数组对象,格式如下: 从上面的mp4视频中截取一帧设置为封面,如下图,下面的封面图从视频中截取而来。 二、代码实现: 按照上面的代码,其中posterList就是对应的每一个视频的封面base64数组,一切看起来都挺好,在H5正常运行,但是在

    2024年02月14日
    浏览(22)
  • Java实现截取视频第一帧

    目录 前言 一、通过Java借助第三方库实现 1.引用ffmpeg 使用maven,导入pom依赖:  工具类 2.引用jcodec 二、使用第三方存储自带的方法实现(如阿里云OSS、华为云OBS) 在实际项目中,会遇到上传视频后,需要截取视频的首帧或指定帧为图片,作为展示使用的需求。这个需求本身

    2024年02月06日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包