根据你在评论中的要求,gif也可以使用,这里提供一种解决方案:
以下是一个示例p5草图,记录画布动画并将其转换为gif,使用gif.js。
适用于支持Web Workers、文件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 的设置,如 quality
、repeat
、background
,您可以在这里阅读更多内容:这里。希望这可以帮助到您!