位置: IT常识 - 正文

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

编辑:rootadmin
前端直接生成GIF动态图实践 前言

推荐整理分享前端直接生成GIF动态图实践(前端生成docx),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端生成图片并下载,快速生成前端页面,前端生成图片,前端生成guid,前端动态生成表格,前端生成工具,前端动态生成表格,前端生成图片,内容如对您有帮助,希望把文章链接给更多的朋友!

去年在博客中发了两篇关于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

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

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生成插件,分析了它的源码结构,最后通过一个实例进行了案例讲解,帮您快速的了解和掌握这个组件,文章行文仓促,如有错误,请留言交流。

本文链接地址:https://www.jiuchutong.com/zhishi/297416.html 转载请保留说明!

上一篇:npm install或npm i后没有依赖包node_modules?

下一篇:CSS页面布局(超详解)(div css页面布局)

  • iqoo8后盖材质(iqoo 8 pro后盖材质)

    iqoo8后盖材质(iqoo 8 pro后盖材质)

  • macos catalina是什么意思

    macos catalina是什么意思

  • 华为荣耀v30pro是60hz刷新率吗(华为荣耀v30Pro是多大的屏)

    华为荣耀v30pro是60hz刷新率吗(华为荣耀v30Pro是多大的屏)

  • 电脑重置后键盘不能用了(电脑重置后键盘没反应)

    电脑重置后键盘不能用了(电脑重置后键盘没反应)

  • 麒麟9系列和8系列的区别(麒麟9x)

    麒麟9系列和8系列的区别(麒麟9x)

  • 手机黑屏是内屏坏了吗(手机黑屏是内屏坏了还是外屏)

    手机黑屏是内屏坏了吗(手机黑屏是内屏坏了还是外屏)

  • 笔记本硬盘接口有几种(神舟笔记本硬盘接口)

    笔记本硬盘接口有几种(神舟笔记本硬盘接口)

  • 网易云对方拉黑私信会收到吗(网易云对方拉黑我以后还能看他听歌)

    网易云对方拉黑私信会收到吗(网易云对方拉黑我以后还能看他听歌)

  • 手机录的视频是mp4格式吗(手机录的视频是横的怎么能正过来)

    手机录的视频是mp4格式吗(手机录的视频是横的怎么能正过来)

  • r17屏幕多大尺寸(oppor17屏幕多大尺寸)

    r17屏幕多大尺寸(oppor17屏幕多大尺寸)

  • 荣耀v10插内存卡会变慢吗(荣耀v10插内存卡在哪里)

    荣耀v10插内存卡会变慢吗(荣耀v10插内存卡在哪里)

  • 淘宝看完图片怎么返回(淘宝看过的图片怎么删除)

    淘宝看完图片怎么返回(淘宝看过的图片怎么删除)

  • 5gnsa和sa的区别(5gnsa与sa)

    5gnsa和sa的区别(5gnsa与sa)

  • oppo手机突然关机打不开(OPPO手机突然关机)

    oppo手机突然关机打不开(OPPO手机突然关机)

  • ipad mini2是苹果6吗(ipadmini2和苹果6)

    ipad mini2是苹果6吗(ipadmini2和苹果6)

  • 抖音用户多少(抖音用户多少粉丝才适合带货赚钱)

    抖音用户多少(抖音用户多少粉丝才适合带货赚钱)

  • 服务器地址是什么意思(服务器的地址是什么意思)

    服务器地址是什么意思(服务器的地址是什么意思)

  • 密码不能包含空格是什么意思(什么叫密码不能包含空格)

    密码不能包含空格是什么意思(什么叫密码不能包含空格)

  • 苹果7指纹键可以换吗(苹果指纹键可以修吗)

    苹果7指纹键可以换吗(苹果指纹键可以修吗)

  • vue圆形镜头怎么弄(vue怎么镜面)

    vue圆形镜头怎么弄(vue怎么镜面)

  • a11仿生和a12啥区别(a11仿生和a11区别)

    a11仿生和a12啥区别(a11仿生和a11区别)

  • ios12.4自动调节亮度在哪里(ios12自动调节亮度)

    ios12.4自动调节亮度在哪里(ios12自动调节亮度)

  • 淘宝怎样清除猜你喜欢(淘宝里的猜你喜欢怎么删除)

    淘宝怎样清除猜你喜欢(淘宝里的猜你喜欢怎么删除)

  • internet最基础和核心的协议是(internet最基础和核心的)

    internet最基础和核心的协议是(internet最基础和核心的)

  • 从国际空间站拍摄到的地球上方的渐亏凸月 (© NASA)(拍到国际空间站过境)

    从国际空间站拍摄到的地球上方的渐亏凸月 (© NASA)(拍到国际空间站过境)

  • python中for循环的底层实现(python中for循环的缩进规则)

    python中for循环的底层实现(python中for循环的缩进规则)

  • 劳务公司计税税率
  • 公司研发人员定义
  • 实收资本增加的原因
  • 用于后勤管理部的工作
  • 同一笔业务可以开多张发票吗
  • 离退休人员的返乡政策
  • 工会经费计提多了跨年
  • 4s店收取的金融服务费用
  • 工程项目劳务分包合同范本
  • 存货的坏账准备转回吗
  • 车辆生产企业目录
  • 计提租金分录怎么处理
  • 增值税普通发票有什么用
  • 合同签了发票开了钱没给怎么办
  • 增值税普通发票税率表
  • 税务部门罚没收入会计分录
  • 消费税漏缴怎么补缴
  • 年终奖金个人所得税计算公式
  • 小微企业贷款利息补贴
  • 怎样冲回多提应付职工薪酬?
  • 应收账款 转让
  • 铁路改道作业的流程
  • 收到财政奖励扶持资金账务处理?
  • win11系统进程
  • 内部控制的概念最早是从什么得来的
  • 代收的水电费怎么做账
  • 捷波主板141m
  • ios9.3.5如何越狱
  • csinject.exe是什么程序的进程 csinject进程是安全的吗
  • 短期借款产生的利息进入总账吗
  • vue.js.
  • javaweb实例教程
  • 处理二手物品要交增值税吗
  • 固定资产账面净值和账面价值的区别
  • 会计备案报送期间
  • 出口免抵退转免税
  • python元组操作方法
  • 织梦相关文章调用
  • 房地产开发企业土地出让金扣除政策
  • 小规模纳税人季度不超30万免增值税
  • 建筑安装工人住宿费会计分录
  • sql server索引怎么用
  • 企业进行股权转让前,必须先销什么户
  • 小规模纳税人劳务派遣可以差额征税吗
  • 融资性售后回租承租方出售资产为什么不缴纳增值税
  • 单位收风险金违法吗
  • 每个月计提工资没有发怎么办
  • 收到国税退税收怎么做账
  • 管理费用和销售费用属于什么科目
  • 房地产开发票的时间?
  • 加权净资产收益率越高越好吗
  • 做账工资和申报工资不一样
  • 管理费用的明细科目如何设置
  • mac系统命名规律
  • linux系统硬盘分区
  • debian glibc
  • linux readelf命令
  • SMax4.exe - SMax4是什么进程
  • winxp如何将桌面文件默认到d盘
  • mac如何修改用户名称
  • window10 系统安装
  • win 10设置提醒
  • cocos2d游戏源码
  • opengl 三角形
  • ext.grid.editorgridpanel
  • unity3d documentation
  • opengl教程48讲
  • android怎么学
  • angular.js
  • python制作简单图形
  • 工作笔记都写什么内容
  • 手机运行node.js
  • js如何获取当前页面的url
  • jquery.flot
  • 安卓源代码开放吗
  • python错误和异常处理
  • 信息技术税务分类编码
  • 陕西省12366纳税服务热线
  • 注销外经证需要身份证吗
  • 享受税收优惠影响就业吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设