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

  • 天猫精灵如何连接手机当音箱(天猫精灵如何连接蓝牙)

    天猫精灵如何连接手机当音箱(天猫精灵如何连接蓝牙)

  • 电脑钉钉摄像头权限在哪里(电脑钉钉摄像头启用失败,请检查设备要怎么办)

    电脑钉钉摄像头权限在哪里(电脑钉钉摄像头启用失败,请检查设备要怎么办)

  • 苹果x可以设置几个人脸识别(苹果x可以设置灵动岛吗)

    苹果x可以设置几个人脸识别(苹果x可以设置灵动岛吗)

  • 苹果可以下载微信分身吗(苹果可以下载微信视频美颜软件吗)

    苹果可以下载微信分身吗(苹果可以下载微信视频美颜软件吗)

  • 抖音购物订单取消不了怎么办(抖音订单的钱怎么提现)

    抖音购物订单取消不了怎么办(抖音订单的钱怎么提现)

  • 惠普显示器是谁代工的(惠普显示器质量怎么样)

    惠普显示器是谁代工的(惠普显示器质量怎么样)

  • 苹果11怎么在照片上写字(苹果11怎么在照片上画圈)

    苹果11怎么在照片上写字(苹果11怎么在照片上画圈)

  • 荣耀9x如何隐藏应用图标(荣耀9x如何隐藏手机应用)

    荣耀9x如何隐藏应用图标(荣耀9x如何隐藏手机应用)

  • windows ink是什么(windowlnk是什么)

    windows ink是什么(windowlnk是什么)

  • 剪映内存怎么清空(剪映如何清理)

    剪映内存怎么清空(剪映如何清理)

  • 5g建设需要什么(5g建设需要投入多少钱)

    5g建设需要什么(5g建设需要投入多少钱)

  • b站循环播放怎么设置(b站循环播放怎么设置平板)

    b站循环播放怎么设置(b站循环播放怎么设置平板)

  • windows是系统软件吗(windows是软件吗?)

    windows是系统软件吗(windows是软件吗?)

  • 因特网属于一种什么网(因特网属于一种局域网)

    因特网属于一种什么网(因特网属于一种局域网)

  • 电脑关机能充进去电吗(电脑关机能充到电吗)

    电脑关机能充进去电吗(电脑关机能充到电吗)

  • 华为p20pro耳机孔在哪(华为20pro的耳机孔)

    华为p20pro耳机孔在哪(华为20pro的耳机孔)

  • 手机卡丢了怎么收短信(手机卡丢了怎么找回微信)

    手机卡丢了怎么收短信(手机卡丢了怎么找回微信)

  • oppor11怎么开启高清通话(oppor11s怎么操作)

    oppor11怎么开启高清通话(oppor11s怎么操作)

  • vivo音乐怎么设置桌面歌词(vivo音乐怎么设置铃声)

    vivo音乐怎么设置桌面歌词(vivo音乐怎么设置铃声)

  • 小米怎么取消音量悬浮(小米怎么取消音量键控制音量)

    小米怎么取消音量悬浮(小米怎么取消音量键控制音量)

  • 铃声多多怎么下载mp3(铃声多多怎么下载到内存卡)

    铃声多多怎么下载mp3(铃声多多怎么下载到内存卡)

  • 苹果xr闪退是怎么回事(iphone xr 闪退)

    苹果xr闪退是怎么回事(iphone xr 闪退)

  • 索尼xperia1有红外遥控吗

    索尼xperia1有红外遥控吗

  • 荣耀v20快充多少w(荣耀v20快充多少时间)

    荣耀v20快充多少w(荣耀v20快充多少时间)

  • 电脑文档发到手机打不开(电脑文档发到手机微信版式就乱了)

    电脑文档发到手机打不开(电脑文档发到手机微信版式就乱了)

  • 换了外屏后触控不灵敏(外屏换了后触感有时候不灵)

    换了外屏后触控不灵敏(外屏换了后触感有时候不灵)

  • 税控盘注意事项
  • 劳务派遣差额发票0税率情况
  • 促成自然灾害的原因
  • 建筑企业印花税的计税依据
  • 向个体工商户付款可以现金支付吗
  • 银行回单可以跨年补录吗
  • 个人所得税本期免税收入是指什么
  • 报关单和进口增值税专用缴款书联系
  • 物资采购账务处理方法
  • 专项科研经费
  • 租赁车辆保险费用每年都一样吗
  • 单位给员工上的商业险是什么
  • 甲供材料工程如何办理结算
  • 外贸企业当期认证的发票没申报影响退税吗?
  • 小规模纳税人季度销售额不超过30万免征
  • 新注册的个体户怎么开发票
  • 已开票怎么做坏账处理
  • 可供出售金融资产属于流动资产吗
  • 一般纳税人税负率
  • 应交税费应交增值税明细科目设置
  • 哪些情况需要补钙
  • 子公司能享受母公司的优惠政策么
  • 合同资产减值怎么填
  • os线程是什么
  • 在php中,字符串有哪些表示形式
  • 研发费用加计扣除是什么意思啊
  • 开发产品结转到哪个科目
  • 餐饮行业采购
  • 通过session实现用户的登录与登出功能
  • 存货核算有哪些内容
  • php往数组中添加元素
  • Aerial view of Chapel Bridge over the river Reuss in Lucerne, Switzerland (© Neleman Initiative/Gallery Stock)
  • thinkphp yii
  • ie11已经为了帮助保护您的计算机而关闭此网页
  • js创建对象的三种方式
  • 零售行业bi
  • 固定资产有内容限制吗
  • 生产企业出口自产应税消费品实行什么方法
  • 银行日记账怎么做账
  • 政府返还的个税手续费会计分录
  • 海关报关单位注销操作规程
  • 材料报废属于正常损失吗
  • 用房子贷款印花税怎么算
  • mysql错误日志在哪里
  • 视同销售要不要确认收入?
  • 超市的小票能入账吗
  • 软件研发的整个流程
  • 契税和印花税的会计分录
  • 基本户能转账吗现在
  • 小微企业流转税优惠政策
  • 小规模纳税人未开票收入如何申报增值税
  • 商场活动经费预算
  • 无形资产如何摊销公式
  • 关于发票冲账应该怎么写
  • 存货换入无形资产账务处理
  • 进项税怎么做账务处理
  • 电子承兑追索清偿的顺序
  • mysql优化sql有哪些
  • mysql2002解决办法
  • win7系统如何隐藏桌面
  • win7怎么隐藏我的电脑
  • win8.1 multiple edition
  • xp电脑启动项怎么设置启动项
  • 如何在windows里保存画过的画
  • wininfo.exe - wininfo是什么进程
  • xp系统怎么禁止软件联网
  • win10一年更新一次
  • winxp打开任务管理器的快捷键
  • 苹果系统安装系统
  • centos安装nmtui
  • linux网络优化
  • win7无法打开windows功能
  • win8的应用商店
  • ecmascript6入门
  • js添加列表项
  • css布局的经典网站
  • 探索世界怎么玩
  • jQuery使用zTree插件实现树形菜单和异步加载
  • 江苏省国税务局
  • 无锡梁溪区在哪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设