位置: 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安全中心怎么没有我的足迹了)

  • 华为手机置换新机政策(华为手机置换划算吗)

    华为手机置换新机政策(华为手机置换划算吗)

  • b站图片保存失败怎么办(b站图片保存失败原因)

    b站图片保存失败怎么办(b站图片保存失败原因)

  • 华为哪几款手机可以开空调(华为哪几款手机支持无线充电)

    华为哪几款手机可以开空调(华为哪几款手机支持无线充电)

  • 拉黑的微信好友对方知道吗(拉黑的微信好友还能看到朋友圈吗)

    拉黑的微信好友对方知道吗(拉黑的微信好友还能看到朋友圈吗)

  • sdram是什么内存条(sdram ddram)

    sdram是什么内存条(sdram ddram)

  • 手机屏幕触摸不灵敏怎么办(手机屏幕触摸不了怎么办)

    手机屏幕触摸不灵敏怎么办(手机屏幕触摸不了怎么办)

  • 魅族黑屏不能唤醒屏幕(魅族黑屏不能唤醒语音)

    魅族黑屏不能唤醒屏幕(魅族黑屏不能唤醒语音)

  • 耳机上L和R哪个是左哪个是右(耳机r和l是)

    耳机上L和R哪个是左哪个是右(耳机r和l是)

  • 网线一般用哪几根线(网线一般用哪几芯线)

    网线一般用哪几根线(网线一般用哪几芯线)

  • 手机号之前被别人注册过支付宝怎么办(手机号之前被别人用过)

    手机号之前被别人注册过支付宝怎么办(手机号之前被别人用过)

  • iphone6plus有3dtouch吗(iphone6plus有3dtouch功能吗)

    iphone6plus有3dtouch吗(iphone6plus有3dtouch功能吗)

  • 微博为什么不能访问相机(微博为什么不能用账号密码登录)

    微博为什么不能访问相机(微博为什么不能用账号密码登录)

  • 拼多多卸载不掉(拼多多卸载不掉只能移除)

    拼多多卸载不掉(拼多多卸载不掉只能移除)

  • 试用3天订阅怎么取消(试用3天订阅怎么退订)

    试用3天订阅怎么取消(试用3天订阅怎么退订)

  • 抖音号是怎么来的(抖音号是怎么形成的?)

    抖音号是怎么来的(抖音号是怎么形成的?)

  • 为什么苹果下载不了迅雷(为什么苹果下载软件需要付费验证)

    为什么苹果下载不了迅雷(为什么苹果下载软件需要付费验证)

  • 天猫店铺如何申请(天猫店铺如何申请注册)

    天猫店铺如何申请(天猫店铺如何申请注册)

  • 户户通卫星怎么调信号(户户通卫星怎么调)

    户户通卫星怎么调信号(户户通卫星怎么调)

  • 别人发微信视频为什么手机没提示(别人发微信视频没有铃声怎么回事)

    别人发微信视频为什么手机没提示(别人发微信视频没有铃声怎么回事)

  • 贴膜神器怎么用(平板对角贴膜神器怎么用)

    贴膜神器怎么用(平板对角贴膜神器怎么用)

  • opporeno是全网通吗(opporeno5全网通)

    opporeno是全网通吗(opporeno5全网通)

  • 怎么看内存条颗粒(怎么看内存条颗粒品牌)

    怎么看内存条颗粒(怎么看内存条颗粒品牌)

  • 苹果4怎么插卡(苹果4怎么插卡的地方)

    苹果4怎么插卡(苹果4怎么插卡的地方)

  • 苹果蓝牙耳机一代和二代的区别(苹果蓝牙耳机一个能连上一个连不上)

    苹果蓝牙耳机一代和二代的区别(苹果蓝牙耳机一个能连上一个连不上)

  • 网易云手机号换了怎么解绑(网易云手机号换了怎么登录)

    网易云手机号换了怎么解绑(网易云手机号换了怎么登录)

  • 应交税费课程
  • 节税是什么意思
  • 增值税发票是什么纸张型号
  • 加计抵扣进项税额政策2022
  • 赔偿给客户的货财务怎么处理
  • 销项税能抵扣么
  • 贴现手续费计入投资收益
  • 用固定资产投资怎么做账
  • 第一季度亏损第=季度盈利但累计还是亏损要交所得税吗?
  • 购买增值税专用发票罪
  • 长期借款转入实收资本
  • 广告费可以预提吗
  • 按季度报税怎么处理
  • 小微企业季度所得税怎么计算
  • 为什么有些单位一直在招聘
  • 发票不一致是什么原因
  • 所得税季度申报营业收入填什么
  • 生产企业出口货物必须以什么为计税依据计算免抵退税额
  • 外来原始凭证是指企业财会部门从外部购入的原始凭证
  • 怎么知道定额发票是真是假的
  • 软件开发增值税即征即退2022
  • 补报的年报可以更改吗
  • 促销礼物
  • 个体户个人所得税免征额是多少
  • 向分公司借款
  • php数组函数 菜鸟
  • 货物无偿赠送分录
  • 售后回租经营租赁可以抵扣吗
  • php删除数组中重复的元素
  • 会计中持有至到期投资是什么意思
  • ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
  • antd:ConfigProvider+getPopupContainer解决筛选框遮挡问题(及其他浮层问题)
  • 猪肉税票怎么开
  • 个体工商户属于灵活就业人员吗
  • 临时设施账务处理分录
  • 2022年最新版微信
  • sql语句的查询语句
  • 印花税的特点是
  • mysql和sqlserver的sql语句一样吗
  • 政府补助怎么判断总额法还是净额法
  • 什么叫做有限循环小数
  • 制造费用是费用吗?
  • 超过认证期专用发票怎么办
  • 出口退税申报系统汇率修改
  • 车辆购置税计入什么科目
  • 应交增值税的结转怎么算
  • 初次购买税控盘480都能抵扣吗
  • 年终汇算清缴的税种
  • 各类奖金正确的排序
  • 企业签发转账支票
  • win8和win10双系统安装教程
  • freebsd更新命令
  • storm run off
  • linux检查文件内容
  • directx?
  • linux日期与时间
  • windows移动中心有什么用
  • win10玩游戏遇到问题需要重新启动
  • 上帝模式使用教程
  • vsftpd 配置限制用户目录
  • 不同系统电脑能共享吗
  • win10预览版和正式版区别
  • 安卓闹钟软件下载
  • Cocos2dx CrazyTetris 双线伪裁剪算面积 对于判断消除的思考(二)
  • 被人遗忘的明星
  • preorder遍历
  • nodejs网站开发
  • shell脚本 -ne 0
  • NGUI学习笔记(摘)
  • 协程有什么用
  • 浅谈jQuery中Ajax事件beforesend及各参数含义
  • Android之framework修改底部导航栏NavigationBar动态显示和隐藏
  • dos批处理文件的扩展名
  • python 日期运算
  • 查看接入安卓终端密码
  • 基于javascript的毕业设计
  • python读写docx
  • python爬虫教程推荐
  • js合并字符串
  • js对象的常用方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设