位置: 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页面布局)

  • 空调制热效果差是咋回事(空调制热效果差的原因)(空调制热效果差是什么原因造成的)

    空调制热效果差是咋回事(空调制热效果差的原因)(空调制热效果差是什么原因造成的)

  • 网上可以查到结婚证电子版吗(网上可以查到结案证明吗)

    网上可以查到结婚证电子版吗(网上可以查到结案证明吗)

  • 支付宝怎么查转账给好友的历史账单(支付宝怎么查转出去的钱)

    支付宝怎么查转账给好友的历史账单(支付宝怎么查转出去的钱)

  • qq隐身访问空间对方还能看到吗(qq隐身访问空间看相册会有记录吗)

    qq隐身访问空间对方还能看到吗(qq隐身访问空间看相册会有记录吗)

  • 笔记本电脑鼠标触摸板没反应是什么原因(笔记本电脑鼠标没反应是哪个键锁了)

    笔记本电脑鼠标触摸板没反应是什么原因(笔记本电脑鼠标没反应是哪个键锁了)

  • 荣耀30pro如何设置锁屏壁纸(荣耀30pro如何设置地震预警)

    荣耀30pro如何设置锁屏壁纸(荣耀30pro如何设置地震预警)

  • 苹果x卡槽打不开(iphonex卡槽插不进去)

    苹果x卡槽打不开(iphonex卡槽插不进去)

  • intel(r)uhd graphics630是什么显卡(intel(r)uhd graphics620)

    intel(r)uhd graphics630是什么显卡(intel(r)uhd graphics620)

  • no nc哪个是常开(no常开还是nc常开)

    no nc哪个是常开(no常开还是nc常开)

  • 5g手机可以用4g的手机卡吗(5g手机可以用4g的手机卡信号不好)

    5g手机可以用4g的手机卡吗(5g手机可以用4g的手机卡信号不好)

  • 被搜的微信号状态异常是什么情况(被搜的微信号状态怎么改)

    被搜的微信号状态异常是什么情况(被搜的微信号状态怎么改)

  • 未能连接一个window服务连不上网(未能连接一个windows开机变慢)

    未能连接一个window服务连不上网(未能连接一个windows开机变慢)

  • 抖音太卡是什么原因(抖音非常卡是什么原因)

    抖音太卡是什么原因(抖音非常卡是什么原因)

  • dc插孔是什么意思(dc插孔是什么意思呀)

    dc插孔是什么意思(dc插孔是什么意思呀)

  • iphone11天气怎么显示(iphone天气怎么设置成摄氏度)

    iphone11天气怎么显示(iphone天气怎么设置成摄氏度)

  • 四个又念什么(四个又念什么三个又念什么)

    四个又念什么(四个又念什么三个又念什么)

  • 华为p30pro音量键在哪(华为p30pro音量键怎么拆)

    华为p30pro音量键在哪(华为p30pro音量键怎么拆)

  • wps怎么画带点的线段(wps怎么加点线)

    wps怎么画带点的线段(wps怎么加点线)

  • 主机开关线怎么接(主机开关线怎么接图解)

    主机开关线怎么接(主机开关线怎么接图解)

  • 云电脑充50可以用多久(云电脑充值会员可以无限玩游戏吗)

    云电脑充50可以用多久(云电脑充值会员可以无限玩游戏吗)

  • 如何发百度经验(怎么发百度经验)

    如何发百度经验(怎么发百度经验)

  • oppo reno电池容量(opporeno电池容量多大)

    oppo reno电池容量(opporeno电池容量多大)

  • 网闸的工作原理(网闸的工作原理 数据摆渡)

    网闸的工作原理(网闸的工作原理 数据摆渡)

  • 一篇文章带你解1+X Web 前端开发考核考纲(详细介绍)(涵盖初级、中级、高级)(解读一篇文章)

    一篇文章带你解1+X Web 前端开发考核考纲(详细介绍)(涵盖初级、中级、高级)(解读一篇文章)

  • 房屋出租需要交税多少起征
  • 社会保障税的征收条件
  • 固定资产入账怎么做账
  • 速达3000货品怎么入库
  • 食品销售税务起征点是多少
  • 上市公司回购优先股
  • 受托代为投资账务处理
  • 管理费用现金流量表中属于
  • 航天金穗服务费抵扣
  • 汽车贷款利息是什么
  • 企业收到免税发票后怎么开票
  • 工厂报废的产品价格有规定吗
  • 利润表季报表
  • 房地产收费依据与标准
  • 银行承兑汇票贴现
  • 企业合并资本公积转留存收益
  • 企业所得税申报表A类
  • 利息赔款是否缴纳企业所得税?
  • 汇算清缴税务审计报告
  • 加装固态后如何分盘
  • bios密码如何设置
  • 苹果Mac系统怎么用光盘安装
  • mac和wondows
  • win11任务栏无法居中
  • 以前年度损益调整怎么做账
  • 免抵退不得免征和抵扣是什么意思
  • 出口退税率和进项一致吗
  • 甲方代付农民工工资合同
  • 信息技术费用如何做分录
  • 华为手机网络拒绝接入怎么解决
  • win10电脑设备管理器在哪
  • 出租车发票没有发票专用章是否能报销
  • 认缴出资没到位违法吗
  • win10多任务分屏怎么关闭
  • 兰溪园林绿化养护
  • 生产型企业出口外购货物可以退税吗
  • 企业无偿借款的税务处理
  • 退车船税分录
  • 应交税费已交税金是什么意思
  • phpsubstr方法参数
  • 30岁之后去面试
  • 前端从后端拿excel文件
  • discuz怎么添加diy模块
  • 信用卡收款怎么查询
  • 二手固定资产怎么折旧
  • 企业向合伙企业分红怎么交税
  • 印花税的会计处理方法
  • 清包工可以有一部分小料吗
  • 公司吸收合并是利好吗
  • 进口葡萄酒政策
  • 附加税多计提了怎么做分录
  • 工程物资主要包括建筑材料
  • 企业计提什么意思
  • 其他应收款余额在贷方什么意思
  • 计提工资的凭证要附单据吗
  • 流动负债占比低什么意思
  • 网吧是个人独资企业还是个体工商户
  • 年末净利润为负说明什么
  • 什么是盈亏平衡法
  • mysql 授权命令
  • win7安装mysql5.5
  • vista改win7
  • win10预览版和正式版区别
  • mac修改dns设置
  • win8怎么样的
  • 如何解决焦虑的心理
  • win7电脑ip地址怎么查
  • linux常用命令grep
  • 创建nodejs项目的步骤
  • 关于中秋节的古诗
  • Node.js中的全局对象有
  • 批处理文件如何运行
  • unity unity3d
  • 如何用python写自动化脚本
  • javascrip
  • javascript 对象的this指向
  • 准予扣除外购的应税消费品已纳消费税税款的是
  • 北京交通政务
  • 深圳市国家税务局赵雨婷
  • 金三是什么鱼竿?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设