js實(shí)現(xiàn)GIF圖片的分解和合成
無意中看到一篇文章寫得是關(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)文章
深入理解JavaScript系列(16) 閉包(Closures)
本章我們將介紹在JavaScript里大家經(jīng)常來討論的話題 —— 閉包(closure)。閉包其實(shí)大家都已經(jīng)談爛了。盡管如此,這里還是要試著從理論角度來討論下閉包,看看ECMAScript中的閉包內(nèi)部究竟是如何工作的2012-04-04
JavaScript仿京東實(shí)現(xiàn)秒殺倒計(jì)時(shí)案例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)京東秒殺倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2022-03-03
JavaScript中關(guān)鍵字 in 的使用方法詳解
這篇文章主要介紹了JavaScript中關(guān)鍵字 in 的使用方法詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
JavaScript標(biāo)準(zhǔn)對象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript標(biāo)準(zhǔn)對象的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JS動(dòng)態(tài)圖片的實(shí)現(xiàn)方法完整示例
這篇文章主要介紹了JS動(dòng)態(tài)圖片的實(shí)現(xiàn)方法,結(jié)合完整實(shí)例形式分析了JavaScript鼠標(biāo)響應(yīng)與頁面元素屬性動(dòng)態(tài)變換相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
JavaScript雙向鏈表實(shí)現(xiàn)LFU緩存算法
本文主要介紹了JavaScript雙向鏈表實(shí)現(xiàn)LFU緩存算法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
CSS中position屬性之fixed實(shí)現(xiàn)div居中
這篇文章主要介紹了CSS中position屬性之fixed實(shí)現(xiàn)div居中的相關(guān)資料,需要的朋友可以參考下2015-12-12

