Javascript 将html5画布输出捕获为视频、swf或png序列?
我需要将HTML5画布输出作为视频或swf png序列 我在stackoverflow上找到了以下用于捕获图像的链接。Javascript 将html5画布输出捕获为视频、swf或png序列?,javascript,jquery,html,video,canvas,Javascript,Jquery,Html,Video,Canvas,我需要将HTML5画布输出作为视频或swf png序列 我在stackoverflow上找到了以下用于捕获图像的链接。 但是有人能建议我们是要输出视频还是png序列的swf吗 编辑: 好的,现在我了解了如何捕获画布数据以存储在服务器上,我尝试了它,如果我只使用形状、矩形或其他图形,但如果我在画布元素上绘制外部图像,则效果很好。 有谁能告诉我,无论我们使用图形还是外部图像在画布上绘制,如何完全捕获画布数据 我使用了以下代码: var cnv = document.getElementById("
但是有人能建议我们是要输出视频还是png序列的swf吗 编辑: 好的,现在我了解了如何捕获画布数据以存储在服务器上,我尝试了它,如果我只使用形状、矩形或其他图形,但如果我在画布元素上绘制外部图像,则效果很好。 有谁能告诉我,无论我们使用图形还是外部图像在画布上绘制,如何完全捕获画布数据 我使用了以下代码:
var cnv = document.getElementById("myCanvas");
var ctx = cnv.getContext("2d");
if(ctx)
{
var img = new Image();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.fillRect(0,0,300,300);
ctx.fill();
img.onload = function()
{
ctx.drawImage(img, 0,0);
}
img.src = "my external image path";
var data = cnv.toDataURL("image/png");
}
将画布数据放入“data”变量后,我创建了一个新的画布,并在其上绘制捕获的数据,第二个画布上绘制了红色矩形,但外部图像没有
提前感谢。首先,您需要定期从画布捕获像素数据(可能使用JavaScript计时器)。您可以通过在画布的上下文上调用context.getImageData来实现这一点。这将创建一系列图像,您可以将其转换为视频流 我建议:
setInterval
将画布的内容捕获为PNG数据URL
function PNGSequence( canvas ){
this.canvas = canvas;
this.sequence = [];
};
PNGSequence.prototype.capture = function( fps ){
var cap = this;
this.sequence.length=0;
this.timer = setInterval(function(){
cap.sequence.push( cap.canvas.toDataURL() );
},1000/fps);
};
PNGSequence.prototype.stop = function(){
if (this.timer) clearInterval(this.timer);
delete this.timer;
return this.sequence;
};
var myCanvas = document.getElementById('my-canvas-id');
var recorder = new PNGSequence( myCanvas );
recorder.capture(15);
// Record 5 seconds
setTimeout(function(){
var thePNGDataURLs = recorder.stop();
}, 5000 );
drawImage()
时,您的画布就会受到污染。从该链接:
所有画布元素必须以其“原点清理”设置为true开始。
如果发生以下任何操作,则该标志必须设置为false:
[……]
元素的2D上下文的drawImage()
方法是通过一个HTMLImageElement
或一个HTMLVideoElement
调用的,该HTMLVideoElement
的来源与拥有canvas元素的文档对象的来源不同
[……]
每当调用其原始清除标志设置为false的canvas元素的toDataURL()
方法时,该方法必须引发SECURITY\u ERR
异常
每当使用正确的参数调用其原始清除标志设置为false的画布元素的2D上下文的getImageData()
方法时,该方法必须引发SECURITY\u ERR
异常
我认为最困难的部分是将这些图像数据合成一个视频/swf文件。您研究过视频/swf文件的二进制文件格式吗?最终,为二进制操作编写Javascript库是可能的,但这绝非小事。@timdream-我完全同意。捕获和流式传输视频从来都不是一件小事。非常感谢phrogz的回答,请查看我编辑的问题,如果您有一些信息,请让我知道。@Bhupi我编辑了我的答案,以涵盖您的变异问题。是否可以从客户端生成以NgDataURL返回的图像列表的视频?如果是,请让我知道如何实现?使用javascript或typescript。