前端直接生成GIF动态图实践_gif,前端开发实习面试题

41 阅读5分钟

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

开源分享:docs.qq.com/doc/DSmRnRG…





![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/730ab17943f2487a9478a6d09ce3e07b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770724996&x-signature=T7NB7h5S0AIbQIW9GFvphNpxcIg%3D)



### 3、关键基础类解析


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





![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/7a2c09ac570e4538b381cd3a99d0691c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770724996&x-signature=O4zMV%2B%2FBN%2F6XzPTj08HgOYXxgc4%3D)






![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/b19d8da6c98d43c18de3fec749333773~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770724996&x-signature=8kR%2FZh2QhUmPQDDeItjihCMQGPY%3D)




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





![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9eda18f6f4704cf5a55b8ce7e2641a65~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1770724996&x-signature=YG4RY6wRAkojjlTAovXM0y7C%2FZo%3D)




视频转GIF ```

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进行并行处理。

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

文末

技术是没有终点的,也是学不完的,最重要的是活着、不秃。

零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。

最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。

高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足,不容易犯困。

技术学到手后,找工作的时候一定要好好准备一份简历,不要无头苍蝇一样去海投简历,容易“竹篮打水一场空”。好好的准备一下简历,毕竟是找工作的敲门砖。

拿到面试邀请后,在面试的过程中一定要大大方方,尽力把自己学到的知识舒适地表达出来,不要因为是自学就不够自信,给面试官一个好的印象,面试成功的几率就会大很多,加油吧,骚年!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】