canvas绘制二进制图片(Canvas获取视频第一帧缩略图的实现)
类别:Web前端 浏览量:2693
时间:2021-10-24 10:31:17 canvas绘制二进制图片
Canvas获取视频第一帧缩略图的实现记录下一个疑问,最近在重新看canvas做点Demo这样,时间是写在2019年11月5日,以后要是没有这个问题了,以W3C更新的为标准,这个只是参考 尝试着在canvas中显示视频第一帧的时候碰上的问题:在Chrome中,用 video.addEventLisener("loadeddata",func)、 video.onloadeddata = func无法在函数中获取到 未预加载的视频的第一帧的图片。同样的代码在Firefox中 未预加载的视频可以获取到第一帧,并且能够渲染到canvas中。以下都是不进行预加载的情况下运行的。
要是不能运行了就在评论里说下,我是从写的一个Demo里截下来一部分的=。=
HTML代码片段
<li class="canvas-class"> <canvas id="canvasImgDemo"></canvas> </li> <li class="img-source"> <li class="video-li"> <video id="videoSource" controls="controls" poster src="../../resources/1.mp4" onloadeddata="videoGetFirstFrame(this) ></video> </li> </li>
Chrome能显示方法
在标签中添加事件处理,这时候可以得到第一帧的图片数据。
var imgs = []; var videoGetFirstFrame = (elem) => { var canvas = document.createElement("canvas"), img = new Image(); canvas.getContext("2d").drawImage(elem, 0, 0); let dataURL = canvas.toDataURL("image/png"); img.onload = (e) => { var target = document.getElementById("canvasImgDemo"), ctx = target.getContext("2d"); ctx.drawImage(img, 0, 0, target.width, target.height); }; imgs.push(dataURL); };
Firefox下可以运行的
以下两种方法在Chrome下没法显示图片,但是在Firefox下也可以显示。在Chrome控制台你可以看见拿到的dataURL其实是一个全透明的矩形。不过在预加载、加载过或者缓存过一次视频后,canvas就有了。
方法一
JS代码片段
let elem = document.getElementById("canvasImgDemo"), ctx = elem.getContext(module.CONTEXT_TYPE), targetElem = document.getElementById(target), tagName = targetElem.tagName; ctx.drawImage(targetElem, 0, 0); var imgData = elem.toDataURL("image/png"), img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0, elem.width, elem.height); } img.src = imgData;
方法二
其实跟方法一类似,不过思路是用document创建的HTMLVideoElement作一次中转之后来触发这个loadeddata事件的发生,算是上面方法在video的应用。
let video = document.createElement("video"); video.addEventListener("loadeddata", (evt) => { ctx.drawImage(evt.target, 0, 0); let dataURL = elem.toDataURL("image/png"); let img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0, 300, 150); }; img.src = dataURL; }); video.src = targetImg.src; ctx.drawImage(targetImg, 0, 0);
到此这篇关于Canvas获取视频第一帧缩略图的实现的文章就介绍到这了,更多相关Canvas视频缩略图内容请搜索开心学习网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持开心学习网!
您可能感兴趣
- 使用canvas的好坏(关于canvas绘制模糊问题的解决方法)
- 小程序canvas不显示(小程序canvas中文字设置居中锚点)
- canvas怎么压缩图片(使用canvas压缩图片大小的方法示例)
- htmlcanvas的使用(html2canvas生成清晰的图片实现打印的示例代码)
- jscanvas背景色(JavaScript canvas实现代码雨效果)
- jscanvas画折线图(js+canvas实现代码雨效果)
- canvas里面图片如何获取(canvas生成带二维码海报的踩坑记录)
- canvas小程序海报(使用canvas生成含有微信头像的邀请海报没有微信头像问题)
- html使用canvas画矩形(CSS、SVG和canvas分别实现文本文字纹理叠加效果)
- 获取canvas画布内容(清除canvas画布内容点擦除+线擦除)
- html5 canvas 性能(基于html5 canvas做批改作业的小插件)
- 微信小程序canvas 动画(微信小程序使用canvas绘制钟表)
- canvas绘图白屏或者元素有缺失(高清屏中使用Canvas绘图出现模糊的问题及解决方法)
- html5的canvas图形绘制技术(详解HTML5 Canvas标签及基本使用)
- canvas怎么获取内容(详解canvas.toDataURL报错的解决方案全都在这了)
- 如何使用html5的canvas图(html5 canvas实现给图片添加平铺水印)
- 美国数十万加仑牛奶倒进下水道,世界会重演1929年的大萧条吗(美国数十万加仑牛奶倒进下水道)
- 美国数十万加仑牛奶倒入下水道,贫民区食不果腹,历史再次重演(美国数十万加仑牛奶倒入下水道)
- 美国倒掉数十万加仑牛奶 上热搜第一,这一幕似曾相识(美国倒掉数十万加仑牛奶)
- 深度 倒牛奶 这一幕为何又在美国上演(深度倒牛奶)
- 美国数十万加仑牛奶倒下水道怎么回事 原因曝光令人心痛(美国数十万加仑牛奶倒下水道怎么回事)
- 探索中国神秘文字(探索中国神秘文字)
热门推荐
- mysql数据库死锁原理(MySQL数据库锁机制原理解析)
- tomcat在windows下内存配置(浅谈Tomcat内存配置的正确姿势)
- sqlserver基本知识(sql server学习基础之内存初探)
- mysql字符集怎么看(mysql字符集相关总结)
- nginx查看rewrite日志(Nginx Rewrite使用场景及配置方法解析)
- Js如何判断浏览器类型和版本
- nginx 一个域名对应多个项目(nginx前后端同域名配置的方法实现)
- 虚拟主机与空间有什么区别(全能主机是什么意思?全能虚拟主机好用吗?)
- js的异步请求(浅谈JS三座大山之异步和单线程)
- php语法基础知识(PHP中16个高危函数整理)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9