javascript - canvas 复制 canvas
大家讲道理
大家讲道理 2017-04-11 13:22:49
[JavaScript讨论组]

场景是这样的,业务上有一个视频通话,视频窗口是canvas的,有需求要做截图的功能,而且截图需要是canvas的。

代码基本是这个样子的

html








js

$('#snap-button').on('click', function () {
  var source = $('#video')[0];
  var target = $('#photo')[0];
  var context = target.getContext('2d');
  context.drawImage(source, 0, 0, 800, 600);
});

然而神奇的一幕发生了,点击按钮测试截图效果,大概七八十回有一两回能截图成功,而且还是反的。

我试过如果把需要截图的视频canvas替换成一个静态的canvas,截图是100%成功的,那么问题来了,我该怎么保证动态的视频canvas能够截图成功呢?谢谢。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
PHP中文网

后来测试了一下,基于video标签的视频截图不会出问题,比如WebRTC那样的,同时动态的canvas也不会出问题。

这就很尴尬了。

最后用了这个蠢办法先解决一下,blankData是截图失败的空白canvas出来的数据,我自己new出来的canvas结果跟它还不一样,蛋疼的很,等到真正解决了再回来补充。


var blankData = "data:image/png;base64,iVBORw0KGgoAA.......";
$('.snapshot-button').on('click', function (e) {
    //create a new canvas
    var oldCanvas = document.getElementById('video');
    var newCanvas = document.getElementById('photo');
    var context = newCanvas.getContext('2d');

    //set dimensions
    newCanvas.width = oldCanvas.width;
    newCanvas.height = oldCanvas.height;

    context.clearRect(0, 0, 664, 498);
    //apply the old canvas to the new one
    var i = 0;
    var timer = setInterval(function () {
      if (newCanvas.toDataURL() != blankData || i++ >= 100) {
        clearInterval(timer);
      }
      context.drawImage(oldCanvas, 0, 0, 664, 498);
    }, 10);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号