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 相关文章推荐
JavaScript Base64编码和解码,实现URL参数传递。
Sep 18 Javascript
网页图片延时加载的js代码
Apr 22 Javascript
Extjs TimeField 显示正常时间格式的代码
Jun 28 Javascript
JavaScript仿支付宝密码输入框
Dec 29 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
javascript基于定时器实现进度条功能实例
Oct 13 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
js实现提交前对列表数据的增删改查
Jan 16 Javascript
实例分析javascript中的异步
Jun 02 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 Javascript
Node实现搜索框进行模糊查询
Jun 28 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
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
php实现微信支付之企业付款
2018/05/30 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
jquery插件之easing使用
2010/08/19 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Win8下python3.5.1安装教程
2020/07/29 Python
Python配置文件处理的方法教程
2019/08/29 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
采购文员岗位职责
2013/11/20 职场文书
《阳光》教学反思
2014/02/23 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
大学学生会辞职信
2015/05/13 职场文书