今天我們要來聊一下javascript制作gif動畫的方式。制作gif動畫一些常用的工具可以是Photoshop、GIFMaker等等。但是,如果你想擁有更加自由的控制權和創意性,javascript制作gif動畫是一個不錯的選擇。
首先讓我們來看一下如何使用javascript制作一個簡單的gif動畫。在這個示例中,我們將使用HTML5的canvas來繪制一個簡單的動畫,并將其導出為gif格式。
const canvas = document.createElement('canvas');
canvas.width = 300;
canvas.height = 300;
document.body.appendChild(canvas);
const ctx = canvas.getContext('2d');
let angle = 0;
const render = () =>{
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.rotate(angle);
ctx.fillStyle = 'red';
ctx.fillRect(-50, -50, 100, 100);
ctx.restore();
angle += 0.1;
requestAnimationFrame(render);
};
render();
在上面的代碼中,我們創建了一個canvas元素,然后設置了它的大小。接著,我們獲取了canvas的上下文對象并定義了一個angle變量來跟蹤我們要旋轉的角度。在render函數中,我們繪制了一個紅色的正方形,并將畫布旋轉了一定的角度來制造動畫效果。最后,我們通過requestAnimationFrame來控制動畫的幀數。
現在,我們已經創建了一個簡單的動畫,但還沒有導出為gif。這里我們使用了一個叫做gif.js的庫來將canvas動畫導出為gif格式。
const gif = new GIF({
workers: 2,
quality: 10,
width: canvas.width,
height: canvas.height
});
const frames = [];
const duration = 100;
const frameCount = 20;
for (let i = 0; i< frameCount; i++) {
frames.push(new Promise(resolve =>{
setTimeout(() =>{
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.rotate(angle);
ctx.fillStyle = 'red';
ctx.fillRect(-50, -50, 100, 100);
ctx.restore();
angle += 0.1;
resolve(ctx.getImageData(0, 0, canvas.width, canvas.height).data);
}, i * duration);
})));
}
Promise.all(frames).then(data =>{
data.forEach(frameData =>{
gif.addFrame(frameData, {
delay: duration
});
});
gif.on('finished', blob =>{
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'animation.gif';
link.click();
URL.revokeObjectURL(url);
});
gif.render();
});
在上面的代碼中,我們使用了gif.js庫來創建了一個新的gif對象。接著,我們定義了一系列的幀,每一幀用settimeout函數延遲了100ms,并且將屏幕截圖添加到了一個Promise對象中。一旦所有的幀都被截取,我們將它們傳遞給gif對象,然后調用.render()函數,將動畫導出為gif格式。
最后,我們還為用戶提供了下載鏈接。通過將blob URL賦值給a元素的href屬性,并將download屬性設置為animation.gif,我們可以在用戶單擊鏈接時將動畫下載到他們的計算機。
在本文中,我們介紹了如何使用javascript制作gif動畫。首先,我們創建了一個簡單的canvas動畫,然后使用gif.js庫將其導出為gif格式并提供了用戶下載鏈接。