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日期处理函数
Oct 16 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
javascript 节点排序 2
Jan 31 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
Nov 18 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
2018/01/02 jQuery
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现线程池代码分享
2015/06/21 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
高中毕业自我鉴定
2013/12/16 职场文书
单位委托书怎么写
2014/09/21 职场文书
小学优秀教师材料
2014/12/15 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python