js实现GIF图片的分解和合成


Posted in Javascript onOctober 24, 2019

无意中看到一篇文章写得是关于纯前端处理GIF图片的问题,感觉挺有意思的所以自己也实现了一下;

主要用到的有两个第三方库:合成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标签配置下面两个属性
  gifImg.setAttribute('rel:animated_src', URL.createObjectURL(gif_source))
  gifImg.setAttribute('rel:auto_play', '0')
 
  // 新建gif实例
  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实例的每一帧
  rub.move_to(i);
 
  var imgImage = new Image();
  //canvas生成base64图片数据
  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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery与iframe交互实现代码
Dec 24 Javascript
js获取时间(本周、本季度、本月..)
Nov 22 Javascript
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
JavaScript闭包实例详解
Jun 03 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
Javascript实现登录记住用户名和密码功能
Mar 22 Javascript
详解Vue中状态管理Vuex
May 11 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
详解React服务端渲染从入门到精通
Mar 28 Javascript
vue实现百度搜索功能
Dec 28 Javascript
详解jQuery中的prop()使用方法
Jan 05 jQuery
JS实现长图上下滚动效果
Mar 19 Javascript
js实现掷骰子小游戏
Oct 24 #Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
Oct 24 #Javascript
js实现GIF动图分解成多帧图片上传
Oct 24 #Javascript
js实现简单掷骰子效果
Oct 24 #Javascript
使用jQuery实现掷骰子游戏
Oct 24 #jQuery
jquery实现掷骰子小游戏
Oct 24 #jQuery
JS控制GIF图片的停止与显示
Oct 24 #Javascript
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
浅谈PHP中的
2016/04/23 PHP
php构造函数与析构函数
2016/04/23 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
Javascript window对象详解
2014/11/12 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
四个太阳教学反思
2014/02/01 职场文书
《蚕姑娘》教学反思
2014/04/15 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python
vue修饰符.capture和.self的区别
2022/04/22 Vue.js