Skip to main content

如何在 Canvas 上动画 GIF

如何在画布上显示动画 GIF?

你不能直接将 GIF 图像插入到画布中。但我们可以使用外部库来解析 GIF,然后将其作为 Konva.Image 形状绘制到图层中。

此演示使用 gifler 来解析和绘制 GIF。你也可以使用其他库。

import Konva from 'konva';

// 加载 gifler 库
const script = document.createElement('script');
script.src = 'https://unpkg.com/[email protected]/gifler.min.js';
document.head.appendChild(script);

const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight,
});

const layer = new Konva.Layer();
stage.add(layer);

const canvas = document.createElement('canvas');

// 使用外部库解析并绘制 GIF 动画
function onDrawFrame(ctx, frame) {
// 更新画布大小
canvas.width = frame.width;
canvas.height = frame.height;
// 更新我们用于 Konva.Image 的画布
ctx.drawImage(frame.buffer, 0, 0);
// 重新绘制图层
layer.draw();
}

script.onload = () => {
gifler('https://konvajs.org/assets/yoda.gif').frames(canvas, onDrawFrame);
};

// 将结果画布绘制到舞台作为 Konva.Image
const image = new Konva.Image({
image: canvas,
});
layer.add(image);

说明:该演示展示了使用 gifler 库在画布上渲染动画 GIF。GIF 会被解析,并将每一帧绘制到画布上,然后将该画布用作 Konva.Image 图形的源。