H5实现透明通道视频
来源:互联网 发布:scarsong知乎 编辑:程序博客网 时间:2024/05/22 17:51
H5实现透明通道视频
目前在做一个项目,项目要求是ui和视频相结合,做出动态效果。视频要在ui界面之上,但是又必须可以看见下面的ui界面,所有必须要求视频是透明的。
接着我查了一些资料,但是对h5如何运用透明通道的视频的资料介绍很少。一般透明视频是.mov格式的,但是h5并不支持此格式。所以下面我介绍2种方法。
第一种方法,png序列帧
动画由ui设计师做好,导出透明的png序列帧图片,我们只需要加个定时器每个多少毫秒切换图片即可。下面贴代码
js部分:
$(function(){ var i=0; var timer; timer=setInterval(function(){ i++; i=parseInt(i); if(i<10){ $(".img img").attr("src","img/my layout_0000"+i+".png"); }else if(i<100){ $(".img img").attr("src","img/my layout_000"+i+".png"); }else if(i<374){ $(".img img").attr("src","img/my layout_00"+i+".png"); }else if(i==374){ $(".img img").attr("src","img/my layout_00374.png"); clearInterval(timer) } },100)})
-* 解析*
判断语句是因为ui设计给我序列帧图片的时候图片的序号名字就已经定了,我也没有改,因为图片374张。这个根据你图片的名字来看是否需要判断语句。当到最后一张图片的时候,就清除定时器。
第二种方法,canvas
运用canvas绘制视频,直接贴代码
html部分
<video id="video" style="display:none" autoplay> <source src="png.webm"></source></video><canvas id="buffer" width="1920" height="1080"></canvas><canvas id="output" width="1920" height="1080"></canvas>
js部分
(function(){ var outputCanvas = document.getElementById('output'), output = outputCanvas.getContext('2d'), bufferCanvas = document.getElementById('buffer'), buffer = bufferCanvas.getContext('2d'), video = document.getElementById('video'), width = outputCanvas.width, height = outputCanvas.height, interval; function processFrame() { buffer.drawImage(video, 0, 0);//drawImage(要绘画的元素, x轴, y轴) //getImageData 复制画布上指定图像的像素数据 var image = buffer.getImageData(0, 0, width, height), imageData = image.data, alphaData = buffer.getImageData(0, 0, width, height).data; //console.log(imageData) for (var i = 3, len = imageData.length; i < len; i+=4) { imageData[i] = alphaData[i-1]; } // putImageData() 将图像数据放回画布: output.putImageData(image, 0, 0, 0, 0, width, height); } video.addEventListener('play', function() { clearInterval(interval); interval = setInterval(processFrame, 40) }, false); video.addEventListener('ended', function() { video.play(); }, false); })();
-* 解析*
html部分我没有做视频格式的兼容处理,因为我的项目只在固定的电脑上,指定chrome浏览器,所以不考虑兼容性。
js部分用到canvas的一些知识
getImageData 复制画布上指定图像的像素数据
putImageData() 将图像数据放回画布
另外
项目中需要一些互动按钮,但是按钮要在视频的下面,所有的元素都需要在视频之下,但是这样就没有办法给按钮加事件了,那怎么办呢?其实很简单,一个按钮需要写2个,一个带ui元素的按钮,在视频之下,海还有一个是透明的按钮,在视频之前,同时定位在ui元素按钮的上面,即两个按钮是重合的,所以只需要给透明的按钮加事件就可以了
阅读全文
1 0
- H5实现透明通道视频
- 音视频解决方案中的透明通道
- iOS 合并带有透明通道的视频-
- iOS 合并带有透明通道的视频-
- QtWebkit实现视频透明区域
- QtWebkit实现视频透明区域
- 什么是透明通道
- png透明通道分离
- Unity 透明通道按钮
- H5视频
- AR实现透明视频的播放
- AnyChat SDK 中的透明通道
- 什么是透明通道,如何使用?
- 批量拆分图片透明通道
- 关于Opengl中将24位BMP图片添加一个alpha通道并实现透明的问题
- webview 加载h5页面,播放视频+全屏,实现简单封装
- android 如何实现webview(h5)的视频播放
- Web前端-HeadFirst-笔记-Ch12-h5的视频实现
- 极光推送的集成
- 杭电1087—— Super Jumping! Jumping! Jumping!
- 16 高级联结
- Autoencoder
- Android受限广播(protected-broadcast)
- H5实现透明通道视频
- php微信公众平台API接口(thinkphp5)
- 51nod 1067 Bash游戏 V2
- Android 数据共享
- hdu2196-树形dp|树的直径-Computer
- hdu2955抢银行01背包
- 有限状态机FSM的设计与实现
- 再就业之前,整理整理人生轨迹
- 数据库到底哪家强?