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

这篇具有很好参考价值的文章主要介绍了前端直接生成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,打开它的官方网站,可以看到如下的介绍:

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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"
}
gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

3、关键基础类解析

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档
gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

核心方法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作为非必须依赖。

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档
<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.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

4、执行分析

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

gif.js,开源分享,js,gif.js,动图生成,前端生成,Powered by 金山文档

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

三、总结

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

到了这里,关于前端直接生成GIF动态图实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu下gif动态图片的制作

    Gif图片比视频小, 比静态JPG图片形象生动, 更适用于产品展示和步骤演示等。各种各样的gif动图为大家交流提供很大的乐趣. 这里简单介绍ubuntu系统下gif图的制作。 kazam 是linux下的一款简单但是功能强大的屏幕录制工具. 它可录制声音并选择全屏录制或局部区域录制。 安装方法

    2024年02月13日
    浏览(36)
  • vue项目将多张图片生成一个gif动图

    当前做项目有一个需求是将多张图片生成一个gif动图的形式 类似下面图片几张图片叠加生成一个gif动图 图片涉及工作隐私,就不公开啦  我们要引入一个gif.js的引入包,但是他没有直接引入的方式,只能从官方下载文件包,下载地址:git地址 下载好的包找到下面这个两个文

    2024年02月03日
    浏览(37)
  • 基于.NetCore开源的Windows的GIF录屏工具

    推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。 这是基于.Net Core + WPF 开发的、开源项目,可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域,并将其转为 GIF动画,还支持自定义 GIF 动画效果、字幕、背景

    2024年02月06日
    浏览(48)
  • 动态gif如何制作?教你一招简单的方法

    当下是一个高度视觉化的社会,动态图片已经成为了一种流行的表达方式,能在短时间内快速吸引大众的眼球,增加趣味性。但是,这些gif格式的动态图片是如何制作的呢?接下来,就给大家分享gif图片制作(https://www.gif.cn/)工具,无需下载软件,上传视频轻松一键就能快速

    2024年02月08日
    浏览(56)
  • 使用Python调用ImageMagick将序列帧生成GIF

    使用Python来调用ImageMagick,将文件夹内所有的图片作为序列帧合并为一个GIF。 我事先使用Blender渲染了一组图片(操作很简单, 可见《尝试在blender中渲染一个最简单的动画》) 最基础的命令是比较简单的: Animation Basics – IM v6 Examples 中有更详细的参数与范例,比如在GIF之前

    2023年04月08日
    浏览(33)
  • Java图片或视频生成GIF动图,发送微信

    别人的博客文章中有动态显示这是怎么做到的呢?别人的微信发送的表情动态为什么是自己鬼畜视频?这些都是别人做到的,本文就是让自己也可以做到以上的事情,制作鬼畜GIF动态,辣就学起来吧! GIF的发明者是美国计算机科学家、GIF图像格式发明人斯蒂芬•威尔海特(

    2024年02月02日
    浏览(53)
  • python 读取视频有多少帧并将视频转为GIF动态图

    目录 1 python读取视频帧 2 python 将MP4格式视频前500帧转为动态图 3 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一列和后七分之一列裁掉 4 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一行和后七分之一行裁掉 要读取视频有多少帧,可

    2024年02月11日
    浏览(31)
  • Js使用ffmpeg在视频中添加png或gif

    使用场景是需要在web端对视频进行编辑 添加图片和gif。 注意: 以下所有的使用案例均基于vue3 setup。 同时由于@ffmpeg版本不同会导致使用的api不同,使用案例前需要注意 @ffmpeg版本问题 。 如果使用的是0.12+需要使用新的api,详情请看 文档 流程与添加图片类似,但添加滤镜的命

    2024年02月04日
    浏览(42)
  • 【方便的Opencv】实现播放有声音的视频+附带图片生成gif

            因为最近老是用到Opencv这个库来处理视频,过程遇到了非常多的细节问题,最后把成品干脆直接放到博客来,这样以后可以随时过来取用。         Opencv读取视频没有声音的原因是因为:视频是分为图像与音频的,Opencv仅仅只是读取了一帧帧图像,并没有读取

    2023年04月09日
    浏览(45)
  • 【linux】在Ubuntu20.04下录制屏幕为视频,并制作成gif动态图片

    录制屏幕软件 视频转图片软件 图片合成gif动态图片 1)运行命令 2)设置:区域、帧率 选择录制的区域; 设置帧率为10(或者更小,以适合gif即可) 3)选择视频格式为mp4 4)开始录制 点击Start recording开始录制,再次点击结束录制,点击Save recording即可

    2024年02月09日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包