前端直接生成GIF动态图实践

前言

去年在博客中发了两篇关于GIF动态生成的博客,GIF图像动态生成-JAVA后台生成和基于FFmpeg的Java视频Mp4转GIF初探,在这两篇博客中都是采用JAVA语言在后台进行转换。使用JAVA的同学经过自己的改造和开发也可以应用在项目上。前段时间有朋友私下问,有没有不使用Java,甚至不依赖于后台的,直接基于前端的GIF动图生成,有没有这种技术方案。博主个人对前端不是很擅长,后来也是在github上自习搜索了一番,发现了一个比较有意思的,可以直接在前端使用的gif动态图生成组件。本文重点聊聊gif.js组件,介绍一下gif这个组件的基本原理,在生产中如何进行使用。

一、GIF.JS简介

1、gif.js是什么

gif.js在github的地址是:gif.js,打开它的官方网站,可以看到如下的介绍:

作为一款成熟的插件,在github上有4.5k的star,足以说明它的受欢迎程度。而且gif.js采用的是宽松的MIT协议,您可以随意下载这个插件,再此基础之上改造成自己的工具供别人使用。使用git clone将工程下载到本地后,可以看到gif.js的初始目录。

2、gif.js基础依赖

打开工程目录的package.json文件,这里定义了文件基础依赖。打开后可以看到如下的定义信息:

{"name": "gif.js","version": "0.2.0","description": "JavaScript GIF encoding library","author": "Johan Nordberg <code@johan-nordberg.com>","main": "index.js","repository": "https://github.com/jnordberg/gif.js.git","devDependencies": {"browserify": "^13.1.1","coffeeify": "^2.1.0","exorcist": "^0.4.0","uglify-js": "^2.7.5"},"scripts": {"prepublish": "./bin/build"},"browser": "./dist/gif.js","keywords": ["gif","animation","encoder"],"license": "MIT","readmeFilename": "README.md"
}

3、关键基础类解析

在GIFEncoder.js文件中定义了gif.js对象了基本一些属性,在上面的目录中打开目标文件后,可以看到属性定义方法:

核心方法API说明:您可以使用构造方法或者使用setOptions()方法类设置相关的属性。详情可以看下面的说明:

Name

Default

Description

repeat

0

repeat count, -1 = no repeat, 0 = forever

quality

10

pixel sample interval, lower is better

workers

2

number of web workers to spawn

workerScript

gif.worker.js

url to load worker script from

background

#fff

background color where source image is transparent

width

null

output image width

height

null

output image height

transparent

null

transparent hex color, 0x00FF00 = green

dither

false

dithering method, e.g. FloydSteinberg-serpentine

debug

false

whether to print debug information to console

二、gif.js实战

下面采用具体的代码进行一个实际例子的实践。

1、新建html工程

这里以video2.html为例,在这个工程中引入了gif.js和gif.worker.js。工程目录如下,Jquery.js作为非必须依赖。

<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>视频转GIF</title><meta name="description" content="Full-featured JavaScript GIF encoder that runs in your browser."><meta name="keywords" content="gif, encoder, animation, browser, unicorn"><meta name="viewport" content="width=device-width"><meta property="og:title" content="gif.js"><meta property="og:url" content="http://jnordberg.github.io/gif.js"><meta property="og:description" content="Full-featured JavaScript GIF encoder that runs in your browser."><meta property="og:type" content="website"><link rel="stylesheet" href="main.css"><script src="gif.js?v=3"></script><script src="video.js?v=3"></script>
</head>

2、定义gif对象

gif = new GIF({workers: 4,workerScript: 'gif.worker.js',width: 600,height: 337});

定义好了gif对象之后,还需要定义相应的响应事件,如下代码所示:

sample.addEvent('change', sampleUpdate);button.addEvent('click', function() {video.pause();video.currentTime = 0;gif.abort();gif.frames = [];return video.play();
});gif.on('start', function() {return startTime = now();
});gif.on('progress', function(p) {return info.set('text', "rendering: " + (Math.round(p * 100)) + "%");
});gif.on('finished', function(blob) {var delta, img;img = document.id('result');img.src = URL.createObjectURL(blob);delta = now() - startTime;console.log("done in\n" + ((delta / 1000).toFixed(2)) + "sec,\nsize " + ((blob.size / 1000).toFixed(2)) + "kb");return info.set('text', "done in\n" + ((delta / 1000).toFixed(2)) + "sec,\nsize " + ((blob.size / 1000).toFixed(2)) + "kb");
});

代码有点长,这里不一一列出,需要源代码的可以私信。

3、最后效果

使用nginx进行静态发布后,可以看到如下的效果:

点击执行按钮后,在网页下面生成gif动态图,如下所示:

实际生成的动态图会根据原始视频的大小,画质质量,清晰度等因素影响,执行时间也会有影响。在实际项目中需要根据需要调整相应的参数才可以。

4、执行分析

以完成后渲染动图为例讲解合成过程,

可以在变量区看到客户端开启了多个Worker进行并行处理。

在这里进行数据合并处理,如下:

最终合成gif图片,在html中进行dom渲染。

三、总结

以上就是本文的主要内容,本文重点介绍了一款前端基于Javascript的gif.js生成插件,分析了它的源码结构,最后通过一个实例进行了案例讲解,帮您快速的了解和掌握这个组件,文章行文仓促,如有错误,请留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34082.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用JS代码完成动态生成表格案例及解析

思路&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

屏蔽必应(bing)搜索引擎点开一个页面下面会出现“浏览 6 个相关页面”的网页推荐方法

如以上图片显示&#xff0c;“浏览 6 个相关页面” 的推荐内容是网页里面的js实现的&#xff0c;无法取消&#xff0c;微软官方也回复说不能关闭的&#xff0c;只能通过浏览器的屏蔽广告插件可以实现&#xff1a; 我用的是这个uBlock Origin插件根据这位大佬的帖子安装的&…

基于chatgpt-on-wechat的微信个人对话机器人搭建

1.开源项目选定 现在gpt很火,git中大佬们都创建了很多高星项目,我这里选用了chatgpt-on-wechat(项目地址:https://github.com/zhayujie/chatgpt-on-wechat),这个项目在扩展时也很舒服,大家可以去拉下来看看,学习源码才能方便后续的扩展 2.服务器选定 国内服务:前置条件需要走…

【模仿】调用微信聊天功能和分享功能

今天整理个不是问题的问题&#xff0c;没学到啥&#xff0c;主要完成功能&#xff1a; 老大要求能调用手机号码然后通过微信聊&#xff0c; 我去&#xff0c;说白了老大看到了应用-通讯录plus-的微信功能&#xff0c;要我模仿。 首先&#xff0c;坑啊&#xff0c;我以为是开放…

iOS微信QQ聊天界面的UI框架以及Socket简单实现群聊功能

7.1日更新 Python3 TCP Demo相关 https://blog.csdn.net/Deft_MKJing/article/details/80851879 2.2日更新&#xff0c;socket简易群聊通信&#xff0c;之前实现的是静态本地聊天模拟 最新版本Demo传送门 1.需要的先下载下来&#xff0c;先开启SocketSeverce 2 这个服务器代…

JetChat-简仿微信聊天应用

Swift5.0编写的简仿微信聊天应用&#xff0c;完美支持表情键盘、单聊、群聊、本地消息会话缓存、朋友圈、白天和黑夜主题模式 Examples - 主要界面展示 聊天朋友圈 白天模式黑夜模式 主要技术运用 聊天功能采用RxSwiftMVVM响应式架构设计&#xff0c;通过ViewModel合理过渡处…

程序员聊天必备表情包,收好不谢

现在聊天用表情代替文字已经是潮流了&#xff0c;往往一张图片比文字更能表达内心的想法&#xff0c;今天我们就来了解下程序员聊天时都用些什么表情。 程序员怒产品 &#xff1a; 被吐槽写BUG时怎么办 产品又来提需求 产品又要改需求&#xff0c;怎么办 产品说&#xff0c;这个…

【华为云技术分享】云图说|全新华为云云备份服务:为您的数据提供三合一的保障

云上道路千万条&#xff0c;数据安全第一条。当不幸在云上发生病毒袭击、误删除、软件故障等“车祸”时&#xff0c;如果没有事先对数据进行保护&#xff0c;业务将会中断&#xff0c;并且将导致数据丢失、损坏的后果&#xff01; 华为云云备份就像安全气囊&#xff0c;关键时…

云存储——华为网盘

华为网盘 编辑本段信息 [1] 华为网盘是华为 软件公司&#xff08;下简称 华为公司&#xff0c;华为投资控 [2] 股有限公司的子公司&#xff09;旗下的互联网存储服务。首次注册为5G容量&#xff0c;可以通过各种渠道来获得更多 网络存储空间。可以当作U盘使用,但比优盘方便安全…

利用群晖nas备份华为手机数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、确保手机和nas处于同一局域网二、nas启用smb服务&#xff0c;并且设置正确1.启用smb服务2.在设置最小SMB协议时&#xff0c;会有提示不安全因数的可能。但是…

阿里云/华为云云盘挂载步骤

参拷文章&#xff1a;linux centos7 磁盘分区、挂载 初始化Linux数据盘&#xff08;fdisk&#xff09; 挂在的相关指令 #查看磁盘及分区信息 fdisk -l看到vdb没有启用 对/dev/vdb进行分区操作 fdisk /dev/vdb总结输入&#xff1a;n > p > 回车 > 回车 》 回车 》 …

DTT年度收官圆桌π,华为云8位技术专家的年末盘点

摘要&#xff1a;收下这份DTT年度收官圆桌π总结&#xff0c;在新的一年心想事成&#xff0c;技术上更上一层楼。 本文分享自华为云社区《DTT年度收官圆桌π&#xff0c;华为云8位技术专家的年末盘点》&#xff0c;作者&#xff1a;华为云社区精选 。 在2022年的年末&#xff…

【华为云技术分享】打卡APIG服务专享版,打造全栈API治理方案

伴随企业的数字化转型跟IT架构演进&#xff0c;越来越多的企业&组织选择以API的方式实现能力的开放跟通讯&#xff0c;这部分也成了系统集成的交界点。通过三组数据来看整体趋势 2017年&#xff0c;有50%的B2B商业合作将通过API完成2018年&#xff0c;75%的财富500强公司将…

华为云混合云备份解决方案、云南华为云数据备份存储、备份软件解决方案

标题 一、数据是企业的生命线&#xff0c;备份系统应作为IT基础设施进行建设 标题 二、 数据爆炸性增长带给数据备份的挑战 标题 三、混合云备份&#xff1a;优化企业运营成本的重要手段 1、按需预定 备份软件按需使用与付费 备份服务器按需使用与付费 存储空间按需使用与付…

微信云托管云调用使用指南

微信云托管云调用使用指南 一、云调用是什么&#xff1f; 云调用是具有「免鉴权调用微信开放服务接口」特性的能力&#xff0c;是云开发/云托管中微信生态的一部分。 在云调用出现之前&#xff0c;微信开放服务接口的正常调用&#xff0c;需要开发者使用密钥信息获取access_t…

华为云盘古大模型登Nature:秒级完成气象预测,速度快10000多倍

来源&#xff1a;机器之心 华为云盘古气象大模型突破了 AI 预报天气精度不及传统数值预报的世界性难题&#xff0c;该模型是首个精度超过传统数值预报方法的 AI 预测模型&#xff0c;对比传统方法预测速度提升 10000 倍&#xff0c;可秒级完成对全球气象的预测。 天气预报是科学…

中科磐云 数据包分析infiltration

任务环境说明&#xff1a; ●服务器场景&#xff1a;Server6&#xff08;封闭靶机&#xff09; ●服务器场景操作系统&#xff1a;未知 ●FTP用户名&#xff1a;infiltration密码&#xff1a;infiltration 1.登录FTP下载数据包文件infiltration.pacapng&#xff0c;找出恶意…

专家解惑 | 关于华为云盘古大模型,你想问的都在这里~

本文分享自华为云社区《专家解惑 | 关于华为云盘古大模型&#xff0c;你想问的都在这里~》&#xff0c;原文作者&#xff1a;HWCloudAI。 4月25日&#xff0c;华为云发布盘古系列超大规模预训练模型&#xff0c;包括30亿参数的全球最大视觉&#xff08;CV&#xff09;预训练模…

探秘华为云盘古大模型:AI for industries的身体力行

摘要&#xff1a;大模型是新一轮AI发展的核心&#xff0c;其已在推进产业智能化升级中已表现出巨大潜力&#xff0c;并将在未来三年里形成风起云涌之势。 本文分享自华为云社区《探秘华为云盘古大模型&#xff1a;AI for industries的身体力行》&#xff0c;作者&#xff1a;华…

聚观早报 |腾讯Q1营收重回两位数增长;特斯拉向印度政府提议建厂

今日要闻&#xff1a;腾讯Q1营收重回两位数增长&#xff1b;传特斯拉向印度政府提议建厂&#xff1b;ChatGPT创始人呼吁加强对AI监管&#xff1b;笑果被罚款1335万&#xff1b;药明康德联合创始人赵宁去世 腾讯Q1营收重回两位数增长 5 月 17 日&#xff0c;腾讯控股发布 2023 …