h5标签canvas关于getImageData跨域的问题

在学习h5的时候,canvas标签中getImageData()报错:security error!

具体代码如下(chrome浏览器):

function createGSCanvas(img){
    var canvas=document.createElement("canvas");
    canvas.width=img.width;
    canvas.height=img.height;
    var ctx=canvas.getContext("2d");
    ctx.drawImage(img,0,0);

    var c=ctx.getImageData(0,0,img.width,img.height);
    for(var i=0;i<c.height;i++){
        for(var j=0;j<c.width;j++){
            var x=(i*4)*c.height+(j*4);
            var r=c.data[x];
            var g=c.data[x+1];
            var b=c.data[x+2];
            c.data[x]=c.data[x+1]=c.data[x+2]=(r+g+b)/3;

        }
    }
    ctx.putImageData(c,0,0,0,0,c.width,c.height);
    return canvas.toDataURL();
}

报错信息如下:Uncaught SecurityError: Failed to execute ‘getImageData‘ on ‘CanvasRenderingContext2D‘: The canvas has been tainted by cross-origin data.

原因:createGSCanvas()调用了getImageData函数,但是图片存储在本地文件,默认为没有域名,chrome浏览器判定为跨域才报错!

解决方法:1、将图片放置在服务器中,由服务器返回给客户端浏览器,遵循同源策略;

2、在IE、Firefox浏览器中打开。

时间: 2024-10-08 10:44:27

h5标签canvas关于getImageData跨域的问题的相关文章

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

一.问题:在使用html5的canvas是,当用到getImageData方法获取图片信息时,会碰到跨域无法获取的情况,代码如下: document.getElementById("pic").onload=function(){ var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); var img=document.getElementById("

快速解决Canvas.toDataURL 图片跨域的问题

出现Canvas.toDataURL 图片跨域问题怎么解决呢?下面小编就为大家带来一篇Canvas.toDataURL 图片跨域问题的快速解决方法.一起跟随小编过来看看吧 如题,在将页面的图片地址进行本地输出时(Html2Canvas.js),因不同源存在跨域问题,会出现toDataURL访问权限问题: [Redirect at origin 'http://sub1.xx.com' has been blocked from loading by Cross-Origin Resource S

Access to Image at &#39;file:///Users canvas本地图片跨域报错解决方案

1.设置跨域 添加跨域条件   crossorigin="anonymous" 前提是后端支持这个图片跨域 2.上面加了之后还是报错 如标题所示 你需要把你的项目放到服务器上面跑 或者自己搭建一个本地服务器 然后在访问你的html Access to Image at 'file:///Users canvas本地图片跨域报错解决方案 原文地址:https://www.cnblogs.com/jiebba/p/9733919.html

canvas.toDataURL 由于跨域报错的解决方法

关于canvas.toDataURL 由于跨域报错的解决方法 用过canvas,都知道toDataURL这个方法真好用,不仅合成图片用到它,压缩图片也用到它.但有一个问题,就是图片源不能跨域,不然会报错: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 解决方法,相信大家都知道了,就是在图片img加上crossOri

canvas 使用图片跨域问题

项目中需要生成海报,使用了前端生成图片的插件,将背景图,详情图,以及部分的文字说明放在一块并且生成一张新的图片,大体看了一下源码是通过canvas来实现的,在本地的时候完全没有问题,提交到服务器之后就出现了使用的文件跨域的问题,最终解决方法如下,算是一个黑科技吧 原文地址:https://www.cnblogs.com/zjk270997340/p/10072414.html

(H5)FormData+AJAX+SpringMVC跨域异步上传文件

最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="js/plugins/

解决h5版的uniapp请求跨域问题

uni项目里有个名为manifest.json文件 编辑manifest.json文件,找到h5选项,里面一般有个名为“devServer”索引,往这个索引中添加一个“proxy”或者编辑,值为请求域名,如果没有“devServer”的话,自己补上去 原文地址:https://www.cnblogs.com/murenziwei/p/11660735.html

同源策略和跨域问题

1 同源策略 所谓同源策略,指的是浏览器对不同源的脚本或者文本的访问方式进行的限制.比如源a的js不能读取或设置引入的源b的元素属性. 那么先定义下什么是同源,所谓同源,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可. 可以看下面的几个示例来更加清楚的了解一下同源的概念: URL1 URL2 说明 是否允许通信 http://www.foo.com/js/a.js http://www.foo.com/js/b.js 协议.域名.端口都相同 允许 http://www.

同源策略和跨域-总结

目录: 1.同源策略 2.跨域 3.几种跨域技术 1.同源策略 什么叫同源? URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源.相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域. e.g. 对于http://store.company.com/dir/page.html进行同源检测: URL 结果 原因 http://store.company.com/dir2/other.html 成功 仅路径不同 http://store.company.c