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 相关文章推荐
表单的一些基本用法与技巧
Jul 15 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
JavaScript用构造函数如何获取变量的类型名
Dec 23 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
Feb 23 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
vue服务端渲染添加缓存的方法
Sep 18 Javascript
通过javascript实现扫雷游戏代码实例
Feb 09 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
一个捕获函数输出的函数
2007/02/14 PHP
PHP模块化安装教程
2016/06/01 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
python多线程操作实例
2014/11/21 Python
python中argparse模块用法实例详解
2015/06/03 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
慈善晚会策划方案
2014/05/14 职场文书
企业年度评优方案
2014/06/02 职场文书
街道社区活动报告
2015/02/05 职场文书
老人与海读书笔记
2015/06/26 职场文书
个人合作协议范本
2015/08/06 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
生活委员竞选稿
2015/11/21 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书