js上传视频捕捉前几帧生成gif图片

右边是上传的视频,最下面是生成的gif图片  生成的是动图

<body>
<input type="file" name="" id="" value="" onchange="video(this)"/>
<video  controls="controls" id="video" controls autoplay  width="200" height="300"></video>
<div id="output" style="display: none;"></div>
<div class="imgDiv"></div>
<script src="plugin/jquery.js" type="text/javascript" charset="utf-8"></script>
<script src="dist/gif.js" type="text/javascript" charset="utf-8"></script>
</body
function video(obj){
	console.log($(obj))
	var fileObj = $(obj)[0].files[0];
	var videoUrl = URL.createObjectURL(fileObj);
	var videoObj = document.createElement("video");
	$('#video').attr('src',videoUrl)
	$('#video')[0].addEventListener("canplaythrough", function (evt) {
	  //要执行的函数内容
	    console.log(evt)
		console.log($('#video')[0].duration+'秒')
		console.log('宽:'+$('#video')[0].videoWidth + '高:'+$('#video')[0].videoHeight);
		myFunction()
	});
}
function myFunction(){
	var imgArr=[]
	var time=setInterval(()=>{
    if($('#video')[0].currentTime>3){
		clearInterval(time)
		var canvasgif= document.createElement("canvas");
	    var ctx = canvasgif.getContext('2d');
		var gif = new GIF({
		workers: 1,
		quality: 1,
		workerScript:'./dist/gif.worker.js'
	  });
	  console.log($('#output img').length)
	  for(var i=0; i<$('#output img').length; i++){
		gif.addFrame($('#output img')[i],{copy:true,delay:50});
	  }
	  gif.on('finished', function(blob) {
		//生成图片链接
		var url = URL.createObjectURL(blob);
		console.log(url)
		var img = document.createElement("img");
		img.src=url
		$('.imgDiv').append(img)
	  })
	  gif.render()	
   }else{
	  var scale = 0.3;
	  var canvas = document.createElement("canvas");
	  var output = document.getElementById("output");
	  canvas.width = $('#video')[0].videoWidth * scale;
	  canvas.height = $('#video')[0].videoHeight * scale;
	  canvas.getContext('2d').drawImage($('#video')[0], 0, 0, canvas.width, canvas.height);
	  var img = document.createElement("img");
	  img.src = canvas.toDataURL("image/webp",3);
	  imgArr.push(img.src)
	  output.appendChild(img);
	}
},100)
				
}

这里是监听到上传的视频  获取上传视频的属性  然后让视频自动播放currentTime 是监听视频播放到的时间点  这里是判断时间不大于3秒时  每100毫秒执行一次  生成一张图片  相当于帧数  当过了3秒后 停止生成图片 开始循环生成的图片利用 gif.js 生成gif图片,把所有生成的图片整合生成了gif图

gif的方法说明

var gif = new GIF({
              workers: 2,//启用两个worker。
              quality: 10//图像质量
              workerScript:'./gif.worker.js'
            });//创建一个GIF实例
            
            // 核心方法,向gif中加一帧图像,参数可以是img/canvas元素,还可以从ctx中复制一帧
            gif.addFrame(imageElement);
            
            // or a canvas element
            gif.addFrame(canvasElement, {delay: 200});//一帧时长是200
            
            // or copy the pixels from a canvas context
            gif.addFrame(ctx, {copy: true});
            
            gif.on('finished', function(blob) {//最后生成一个blob对象
              window.open(URL.createObjectURL(blob));
            });
            
            gif.render();//开始启动

猜你喜欢

转载自blog.csdn.net/j244233138/article/details/107020175
今日推荐