【发布时间】:2011-06-25 11:57:34
【问题描述】:
我遇到的问题如下:
我使用视频和画布标签并从视频标签中捕获帧并将其放入画布标签,但是当我在 javascript 中创建画布的引用,以便我可以返回 它被炸掉的 dataURL。请注意视频是本地的,这是否将 canvas origin-clean 标志设置为 false,即使它是本地的?我在 Firfox 3.6、IE9 Beta、Safari 5.0.3 中进行了测试,但都失败了。
这是我用来放置视频帧的代码:
var video = document.getElementById(“video”);
var canvasDraw = document.getElementById(‘imageView’);
var w = canvasDraw.width;
var h = canvasDraw.height;
var ctxDraw = canvasDraw.getContext(’2d’);
ctxDraw.clearRect(0, 0, w, h);
ctxDraw.clearRect(0, 0, w, h);
ctxDraw.drawImage(video, 0, 0, w, h);
以上工作完美。 下面是获取dataURL的代码:
function getURIformcanvas() {
var ImageURItoShow = “”;
var canvasFromVideo = document.getElementById(“imageView”);
if (canvasFromVideo.getContext) {
var ctx = canvasFromVideo.getContext(“2d”); // Get the context for the canvas.
var ImageURItoShow = canvasFromVideo.toDataURL(“image/png”); //<– It fails on this line.
}
var doc = document.getElementById("txtUriShow");
doc.value = ImageURItoShow;
}
总是在线失败:
var ImageURItoShow = canvasFromVideo.toDataURL("image/png");
关于可能是什么问题的任何想法。如果我将普通图像加载到画布中,它可以正常工作,但是一旦我将视频中的图像加载到画布中,该行就会失败。
有什么想法吗?
这里是完整的页面代码,重现错误的步骤如下:
- 点击“拍摄”按钮。 (将从视频中捕获图像,首先要做到这一点非常重要!)
-
点击“查看 URI”按钮。 (这应该是在画布中创建视频图像的toDataURL并将其放置在文本框中,但它不起作用)
<!DOCTYPE HTML> <html lang="en"> <head> <meta content="" charset="utf-8" /> <title>Video to Canvas</title> </head> <body> <script type="text/javascript"> </script> <table> <tr> <td> <p style="height:21px"></p> <video id="video" width="400px" height="300px" controls="true"> <source src="gizmo.mp4"> <source src="gizmo.ogv"> <source src="gizmo.webm"> </video><br/> <button onclick="capture()" style="width: 64px;border: solid 2px #ccc;">Capture</button><br/> </td> <td style="vertical-align:top"> <button onclick="getURIformcanvas()" style="width: 64px;border: solid 2px #ccc;">View URI</button></p> <div id="container" style="border:none"> <canvas id="imageView" style="position: absolute; left: 0; top: 0; z-index: 0;border:none" width="400" height="300"> <p>Unfortunately, your browser is currently unsupported by our web application. We are sorry for the inconvenience. Please use one of the supported browsers listed below, or draw the image you want using an offline tool.</p> <p>Supported browsers: <a href="http://www.opera.com">Opera</a>, <a href="http://www.mozilla.com">Firefox</a>, <a href="http://www.apple.com/safari">Safari</a>, and <a href="http://www.konqueror.org">Konqueror</a>.</p> </canvas> </div> </td> </tr> <tr> <td colspan="2"> <input type="text" id="txtUriShow" name="txtUriShow" value="" /> <img type="text" id="img1" name="img1" value="" /> </td> </tr> </table> <script> function getURIformcanvas() { var ImageURItoShow = ""; var canvasFromVideo = document.getElementById("imageView"); if (canvasFromVideo.getContext) { var ctx = canvasFromVideo.getContext("2d"); // Get the context for the canvas.canvasFromVideo. var ImageURItoShow = canvasFromVideo.toDataURL("image/png"); } var doc = document.getElementById("txtUriShow"); doc.value = ImageURItoShow; } var videoId = 'video'; function capture() { var video = document.getElementById("video"); var canvasDraw = document.getElementById('imageView'); var w = canvasDraw.width; var h = canvasDraw.height; var ctxDraw = canvasDraw.getContext('2d'); ctxDraw.clearRect(0, 0, w, h); ctxDraw.drawImage(video, 0, 0, w, h); ctxDraw.save(); } </script> </body> </html>
【问题讨论】: