Js实现canvas截取视频第一屏为预加载图片

时间: 2020-09-21阅读: 169标签: canvas

首先需要新建video标签,用于放置需要截取的视频文件,然后js获取video标签并监听它的 loadeddata 事件,这里简单说下video的事件有哪些?为什么使用loadeddata来获取第一帧。


video的事件

video.addEventListener('loadeddata', consoleString.bind(video, 'loadeddata')) // 当前帧加载完毕
video.addEventListener('loadedmetadata', consoleString.bind(video, 'loadedmetadata')) // 视频元数据加载完毕
video.addEventListener('canplay', consoleString.bind(video, 'canplay')) // 视频缓冲能够开始播放
video.addEventListener('timeupdate', consoleString.bind(video, 'timeupdate')) // 播放位置发生改变时
video.addEventListener('play', consoleString.bind(video, 'play')) // 开始播放时
video.addEventListener('waiting', consoleString.bind(video, 'waiting')) // 要播放下一帧而需要缓冲时
function consoleString(string) {
console.log(string)
}

执行结果:

// 执行结果
// timeupdate
// loadedmetadata
// loadeddata
// canplay
// play(开始播放)
// 没有waiting, 因为视频较小不需要缓冲

虽然第一个被触发执行的是timeupdate事件,但是此时视频文件尚未加载,截取的是canvas的无内容本身。如果通过该事件来获取,则容易截取黑屏。而loadeddata为媒体当前播放位置的帧完成加载时触发该事件, 通常才是第一帧。


JavaScript截取视频第一帧代码实现如下:

html

<input type="file" id="upload-ipt" @change="chooseVideo" accept="video/*" />
<div id="box" style="display:none"></div>

js

chooseVideo(e) {
var that = this;
var obj_file = document.getElementById("upload-ipt");
var file = obj_file.files[0];
var blob = new Blob([file]), // 文件转化成二进制文件
url = URL.createObjectURL(blob); //转化成url
var $video = $('<div><video controls src="' + url + '"></video></div><div> </div>');
$("#in-box").html($video);
var videoElement = $("video")[0];
videoElement.addEventListener("canplay", function(_event) {
var canvas = document.createElement("canvas");
canvas.width = videoElement.videoWidth;
canvas.height = videoElement.videoHeight;
canvas.getContext("2d").drawImage(videoElement, 0, 0, canvas.width, canvas.height);
console.log(canvas.toDataURL("image/png")); //第一帧图片url
})
}


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/9640

关闭

canvas旋转画笔

canvas旋转画笔,可以使用rotate方法,rotate方法是绕着中心点旋转的,中心点默认是左上角的(0,0)位置,可以使用translate方法改变旋转的中心点,下面介绍两种方法旋转,可以根据自己的需求使用,关键是理解旋转的原理

Canvas裁剪图片(截选框可拖拽)

实现思路:打开图片并将图片绘制到canvas中;利用canvas的drawImage()函数来裁剪图片;将canvas转化为Image即可。Js重点代码:变量定义、添加各事件按钮、容器等:

利用 canvas 与 Data URLs 安全地下载一张图片

普通用户下载图片时只需一个「右键另存为」操作即可完成,但当我们做在线编辑器、整个 UI 都被自定义时,要如何赋予用户一个安全下载页面中图片功能的能力呢?最简单的办法,当然是利用 <a> 标签。根据 MDN 描述

canvas高效绘制10万图形,你必须知道的高效绘制技巧

最近的一个客户项目中,简化的需求是绘制按照行列绘制很多个圆圈。需求看起来不难,上手就可以做,写两个for循环。,IT行业的知识更新越来越快,能够以不变应万变的人,就是拥有良好的学习力、创造力、判断力和思考力的人。这些能力会让你在变换万千的技术海洋中,屹立不倒,不被淹没。

canvas的getImageData和toDataUrl跨域问题

背景是这样的,母亲节的时候,我们有个需求就是用户可以长按或者点击一个按钮进行截图后去分享我们的活动,然而我们的图片例如头像,采用又拍云做 cdn 优化,所以意味着图片的链接跟主页面所在域名不一样

OffscreenCanvas离屏canvas使用说明

OffscreenCanvas 是一个实验中的新特性,主要用于提升 Canvas 2D/3D 绘图的渲染性能和使用体验。OffscreenCanvas 的 API 很简单,但是要真正掌握好如何使用。OffscreenCanvas和canvas都是渲染图形的对象

javascript实例教程:使用canvas技术模仿echarts柱状图

canvas 画布是HTML5中新增的标签,可以通过js操作 canvas 绘图 API在网页中绘制图像。百度开发了一个开源的可视化图表库ECharts,功能非常强大,可以实现折线图、柱状图、散点图、饼图、K线图、地图等多种图表。

使用html5 canvas绘制圆形或弧线

在html5中,CanvasRenderingContext2D对象也提供了专门用于绘制圆形或弧线的方法,请参考以下属性和方法介绍:在canvas画布上绘制以坐标点 (x,y)为圆心、半径为 radius的圆上的一段弧线。这段弧线的起始弧度是 startRad

监听Canvas内部元素点击事件的三种方法

canvas内部元素不能像DOM元素一样方便的添加交互事件监听,因为canvas内不存在“元素”这个概念,他们仅仅是canvas绘制出来的图形。这对于交互开发来说是一个必经障碍,想要监听图形的点击事件思路很简单

如何在Canvas中添加事件?

作为一个前端,给元素添加事件是一件司空见惯的事情。可是在Canvas中,其所画的任何东西都是无法获取的,更别说添加事件,那么我们对其就束手无策了吗?

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!