首页 > 其他 > 详细

canvas关于getImageData跨域问题解决方法

时间:2016-12-30 21:40:12      阅读:286      评论:0      收藏:0      [点我收藏+]

一、问题:在使用html5的canvas是,当用到getImageData方法获取图片信息时,会碰到跨域无法获取的情况,代码如下:

document.getElementById("pic").onload=function(){
    var c=document.getElementById("myCanvas");     
    var ctx=c.getContext("2d");
    var img=document.getElementById("pic");
    ctx.drawImage(img,0,0,300,300);
    var imgData=ctx.getImageData(0,0,c.width,c.height);  //问题所在
    // 反转颜色
    for (var i=0;i<imgData.data.length;i+=4)
    {
        imgData.data[i]=255-imgData.data[i];
        imgData.data[i+1]=255-imgData.data[i+1];
        imgData.data[i+2]=255-imgData.data[i+2];
        imgData.data[i+3]=255;
    }
    ctx.putImageData(imgData,0,0);
};

在chrome会提示:

"Uncaught DOMException: Failed to execute ‘getImageData‘ on ‘CanvasRenderingContext2D‘: The canvas has been tainted by cross-origin data.
at HTMLImageElement.document.getElementById.onload"的错误信息

在IE中会提示:

"security error!"的错误信息

二、原因:图片存储在本地时,是默认没有域名的,用getImageData方法时,浏览器会判定为跨域而报错!

三、方法:1.把图片放置在服务器中,通过服务器返回给客户端,遵循同源策略;

               2.用firefox浏览器打开;

在firefox中效果如下:

技术分享

canvas关于getImageData跨域问题解决方法

原文:http://www.cnblogs.com/lodadssd/p/6238250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!