最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

### 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 | 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
```
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进行并行处理。
在这里进行数据合并处理,如下:
文末
技术是没有终点的,也是学不完的,最重要的是活着、不秃。
零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。
最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。
高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足,不容易犯困。
技术学到手后,找工作的时候一定要好好准备一份简历,不要无头苍蝇一样去海投简历,容易“竹篮打水一场空”。好好的准备一下简历,毕竟是找工作的敲门砖。
拿到面试邀请后,在面试的过程中一定要大大方方,尽力把自己学到的知识舒适地表达出来,不要因为是自学就不够自信,给面试官一个好的印象,面试成功的几率就会大很多,加油吧,骚年!