js实现GIF图片的分解和合成
无意中看到一篇文章写得是关于纯前端处理GIF图片的问题,感觉挺有意思的所以自己也实现了一下;
主要用到的有两个第三方库:合成GIF图片的gif.js和分解的libgif.js;
分解GIF
1.引入Git库
importSuperGiffrom'./libgif.js'
2.处理图片
varfile=e.target.files[0]; console.log(file.type.indexOf('image/gif')); load_gif(file); functionload_gif(gif_source){ vargifImg=document.getElementById('gifImg'); //gif库需要img标签配置下面两个属性 gifImg.setAttribute('rel:animated_src',URL.createObjectURL(gif_source)) gifImg.setAttribute('rel:auto_play','0') //新建gif实例 varrub=newSuperGif({gif:gifImg}); varrunning=false; rub.load(function(){ varimg_list=[]; varj=0; console.log(rub.get_length()); for(vari=1;i<=rub.get_length();i++){ //遍历gif实例的每一帧 rub.move_to(i); varimgImage=newImage(); //canvas生成base64图片数据 imgImage.src=rub.get_canvas().toDataURL('image/jpeg',0.8); } }
合成GIF图片
1.引入Git库
importGIFfrom'./gif.js'
2.图片合成
vargif=newGIF({ workers:2, quality:10, workerScript:'js/gif.worker.js' }); varj=0; varcanvas=document.createElement("canvas"); varctx=tCanvas.getContext('2d'); for(vari=1;i<=len;i++){ varimgImage=newImage(); imgImage.src=img; imgImage.onload=function(e){ //Canvas绘制图片 canvas.width=width; canvas.height=height; console.log(width,height) //铺底色 ctx.fillStyle="#fff"; ctx.fillRect(0,0,canvas.width,canvas.height); ctx.drawImage(imgImage,0,0,width,height); gif.addFrame(canvas,{copy:true,delay:50}); j++; //图片 if(j>=len){ gif.render() }; } } gif.on('finished',function(blob){ //生成图片链接 varurl=URL.createObjectURL(blob); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。