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 radio 操作代码
Mar 16 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
Dec 03 Javascript
easyui validatebox验证
Apr 29 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
Mar 14 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
Apr 12 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 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
杏林同学录(四)
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
JS中call和apply函数用法实例分析
2018/06/20 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Django 批量插入数据的实现方法
2020/01/12 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
十八届三中全会个人学习材料
2014/02/13 职场文书
政治表现评语
2014/05/04 职场文书
公司建议书怎么写
2014/05/15 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
农业项目合作意向书
2015/05/08 职场文书
python利用while求100内的整数和方式
2021/11/07 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js