js實(shí)現(xiàn)GIF圖片的分解和合成
更新時(shí)間:2019年10月24日 11:42:53 投稿:lijiao
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)GIF圖片的分解和合成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
無意中看到一篇文章寫得是關(guān)于純前端處理GIF圖片的問題,感覺挺有意思的所以自己也實(shí)現(xiàn)了一下;
主要用到的有兩個(gè)第三方庫:合成GIF圖片的gif.js和分解的libgif.js;
分解GIF
1. 引入Git庫
import SuperGif from './libgif.js'
2. 處理圖片
var file = e.target.files[0]; console.log(file.type.indexOf('image/gif')); load_gif(file); function load_gif(gif_source) { var gifImg = document.getElementById('gifImg'); // gif庫需要img標(biāo)簽配置下面兩個(gè)屬性 gifImg.setAttribute('rel:animated_src', URL.createObjectURL(gif_source)) gifImg.setAttribute('rel:auto_play', '0') // 新建gif實(shí)例 var rub = new SuperGif({ gif: gifImg } ); var running = false; rub.load(function(){ var img_list = []; var j = 0; console.log(rub.get_length()); for (var i=1; i <= rub.get_length(); i++) { // 遍歷gif實(shí)例的每一幀 rub.move_to(i); var imgImage = new Image(); //canvas生成base64圖片數(shù)據(jù) imgImage.src = rub.get_canvas().toDataURL('image/jpeg',0.8); } }
合成GIF圖片
1. 引入Git庫
import GIF from './gif.js'
2. 圖片合成
var gif = new GIF({ workers: 2, quality: 10, workerScript: 'js/gif.worker.js' }); var j = 0; var canvas= document.createElement("canvas"); var ctx = tCanvas.getContext('2d'); for (var i=1; i <= len; i++) { var imgImage = new Image(); 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) { //生成圖片鏈接 var url = URL.createObjectURL(blob); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS獲取當(dāng)前時(shí)間戳與時(shí)間戳轉(zhuǎn)日期時(shí)間格式問題
這篇文章主要介紹了JS獲取當(dāng)前時(shí)間戳與時(shí)間戳轉(zhuǎn)日期時(shí)間格式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01僅IE9/10同時(shí)支持script元素的onload和onreadystatechange事件分析
測試結(jié)果可以看出,IE9后已經(jīng)開始支持script的onload事件了。一直以來我們判斷js文件是否已經(jīng)加載完成就是用以上的兩個(gè)事件。2011-04-04Javascript異步編程模型Promise模式詳細(xì)介紹
異步模式在 Web 編程中變得越來越重要,如何處理異步請求后的操作是一件麻煩事。Promise 是一種異步編程模型,術(shù)語稱作 Deferred 模式,它通過一組API來規(guī)范化異步操作,讓異步操作的流程控制更加容易。2014-05-05