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学习笔记(十三) js闭包介绍(转)
Jun 20 Javascript
jquery 表格排序、实时搜索表格内容(附图)
May 19 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
AngularJS中的Directive实现延迟加载
Jan 25 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
May 26 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
微信小程序 图片边框解决方法
Jan 16 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
浅谈javascript事件环微任务和宏任务队列原理
Sep 12 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
打开电脑上的QQ的python代码
2013/02/10 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
早会主持词
2014/03/17 职场文书
罚款通知怎么写
2015/04/22 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL