前言
昨天 是1024程序員節,不知道各位看官過的怎么樣。既然是過節,就要有個過節的樣子,比方說,換個頭像😀。你看我的頭像牛逼不。今天介紹一個小demo,上傳一個靜態頭像,就能得到一個動態的數字雨頭像。搶先體驗傳送門](https://imgss.github.io/demo/gif/)
使用說明
-
傳一個你喜歡的頭像,最好是正方形的
-
生成后看字符顏色是不是太詭異,如果是,可以調整一下字符顏色
-
覺得滿意,右鍵另存為或者點擊下載即可
gif.js
今天的主角是gif.js,gif.js是一個在瀏覽器上依靠H5api就能gif動畫的庫,這里介紹一下我猜的坑。關於繪制數字雨,園子里有相關文章,我就不瞎BB了。
gif.js可以很方便的根據canvas動圖得到gif:
//代碼來自官網
var gif = new GIF({
workers: 2,//啟用兩個worker。
quality: 10//圖像質量
});//創建一個GIF實例
// 核心方法,向gif中加一幀圖像,參數可以是img/canvas元素,還可以從ctx中復制一幀
gif.addFrame(imageElement);
// or a canvas element
gif.addFrame(canvasElement, {delay: 200});//一幀時長是200
// or copy the pixels from a canvas context
gif.addFrame(ctx, {copy: true});
gif.on('finished', function(blob) {//最后生成一個blob對象
window.open(URL.createObjectURL(blob));
});
gif.render();//開始啟動
整體而言,這個庫的api十分簡潔,友好。之前看了一個jsGif,看的雲里霧里,后來才發現這么個好東西。由於生成gif圖像是個耗費cpu的操作,尤其是當圖像比較大的時候,因此庫允許在webworker中渲染。但是文檔中還是有幾個要注意的地方要說明(其實是我踩的坑):
- git.addFrame是添加一幀,要生成會動的gif,要來一個循環:
for(...){
gif.render(...)
}
- 構造函數GIF的選項中,需要workerScript選項,這樣才能實現在worker中渲染圖像,如下所示:
var gif = new GIF({
workers: 2,
quality: 10,
workerScript:'./gif.worker.js'
});
源碼我放在github上了,https://github.com/imgss/gif_rain_code,或者F12直接看demo。喜歡的話,請給我一個star,那我就要開心死了.