【问题标题】:Canvas & Resemble.js: toDataURL() Not WorkingCanvas & Resemble.js: toDataURL() 不工作
【发布时间】:2015-06-05 11:01:57
【问题描述】:

我有一个 html5 视频,我正在使用它截取屏幕截图:

context.drawImage(video, 0, 0, w, h);

这可以很好地在画布上绘制屏幕截图。但是,我想做的是在多个画布上截取多个屏幕截图,并使用Resemble.js 将它们相互比较。

Resemble.js 需要两个文件,我正在尝试使用 toDataURL() 从画布中获取这些文件。

var image1 = new Image();
        image1.id = "pic"
        image1.src = canvas1.toDataURL("image/png");

然后将图像插入到like中:

resemble(image1).compareTo(image2).onComplete(function(){
            //return data;
            alert(data);
        /*
        {
          misMatchPercentage : 100, // %
          isSameDimensions: true, // or false
          getImageDataUrl: function(){}
        }
        */
            });

这对我来说似乎失败的地方是 toDataURL()。它不会从画布上产生任何东西。是什么导致了这个问题?我的方法是否正确?

【问题讨论】:

    标签: html canvas todataurl


    【解决方案1】:

    给两张图片加载时间:

    var loadCount;
    var image1,image2;
    
    function compare(){
    
        // variable to count how many images have fully loaded
    
        loadCount=0;
    
        // convert canvas1 to an image
        // call startComparing when done
    
        image1=new Image();
        image1.onload=startComparing;
        image1.src=canvas1.toDataURL();
    
        // convert canvas2 to an image
        // call startComparing when done
    
        image2=new Image();
        image2.onload=startComparing;
        image2.src=canvas2.toDataURL();
    
    }
    
    
    function startComparing(image1,image2){
    
        // do the comparison only if we've loaded both images (loadCount==2)
    
        if(++loadCount==2);
    
            resemble(image1).compareTo(image2).onComplete(function(data){
                alert(data);
            });
    
        }
    
    }
    

    【讨论】:

    • 谢谢,这似乎解决了部分问题。但是,我遇到了一个 SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': 可能无法导出受污染的画布。我不确定为什么画布被“污染”了,因为我使用的视频文件保存在本地。如何解决?
    • 是的,canvas 安全认为本地磁盘存储为other domain,因此会污染canvas。您需要在同一 Web 服务器上托管网页代码和视频。如果您想在本地进行测试,您需要在本地计算机上安装一个 Web 服务器(如果您运行的是 Windows,则为 IIS-Express,如果您正在运行其他东西,则为 PHP——或者您选择的任何 Web 服务器)。
    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 2014-11-26
    • 2017-03-22
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多