正如您在 cmets 中指定的 gif 也可以使用,这里有一个解决方案:
下面是一个示例 p5 草图,它使用 gif.js 记录画布动画并将其转换为 gif。
适用于支持:Web Workers、File API 和 Typed Arrays 的浏览器。
我已经提供了这段代码,因此您可以了解如何使用这个库,因为没有为它提供太多文档,而且我自己也很难弄清楚。
var cnv;
var gif, recording = false;
function setup() {
cnv = createCanvas(400, 400);
var start_rec = createButton("Start Recording");
start_rec.mousePressed(saveVid);
var stop_rec = createButton("Stop Recording");
stop_rec.mousePressed(saveVid);
start_rec.position(500, 500);
stop_rec.position(650, 500);
setupGIF();
}
function saveVid() {
recording = !recording;
if (!recording) {
gif.render();
}
}
var x = 0;
var y = 0;
function draw() {
background(51);
fill(255);
ellipse(x, y, 20, 20);
x++;
y++;
if (recording) {
gif.addFrame(cnv.elt, {
delay: 1,
copy: true
});
}
}
function setupGIF() {
gif = new GIF({
workers: 5,
quality: 20
});
gif.on('finished', function(blob) {
window.open(URL.createObjectURL(blob));
});
}
更多信息:
此草图在您单击 start_rec 时开始记录帧,并在您点击 stop_rec 时停止,在您的草图中您可能希望以不同的方式控制事物,但请记住 addFrame 仅在 gif 中添加一帧,因此您需要在draw 函数中调用它来添加多个帧,您可以传入ImageElement、CanvasElement 或CanvasContext 以及其他可选参数。
在gif.on 函数中,您可以指定一个回调函数来对 gif 进行任何您喜欢的操作。
如果您想微调 gif 的设置,例如 quality、repeat、background,您可以阅读更多 here。希望这会有所帮助!