html5 - canvas 跨域问题如何解决?
PHPz
PHPz 2017-04-17 13:16:22
[HTML讨论组]

html5 使用图像数据,在chrome浏览器出现跨域问题?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test Html5</title>
<style type="text/css">
*{margin: 0; padding: 0;}
.content {width: 1200px; margin: 0 auto; padding: 20px 0;}
 #canvas { border: 2px solid #333;}
 .img {width: 1200px; height: 800px; overflow: hidden;}
</style>
</head>
<body>
<p class="content">
    <canvas id="canvas">你的浏览器不支持canvas!!!</canvas>
    <p class="img"><img id="image" src="images/004.jpg" alt=""></p> 
</p>
</body>

<script type="text/javascript">
   window.onload = function(){
        var canvas  = document.getElementById("canvas"); //获取canvas
        canvas.width  = 1200;
        canvas.height = 600;
        var context = canvas.getContext('2d'); //获取2d上下文绘图环境
        var image = document.getElementById("image");
        context.drawImage(image,0,0,800,500); //x,y,wd,hg
        //使用图像数据
        
    var imageData = context.getImageData(0,0,800,800); //x y wd hg 
    var      data = imageData.data;
    console.log(data);
    for (var i = 0; i < data.length; i+=4) {
           red = data[i];
        green = data[i+1];
         blue = data[i+2];
        alpha = data[i+3];
          average = Math.floor((red+green+blue)/3);
          data[i]   = average;
          data[i+1] = average;
          data[i+2] = average;
     }
     imageData.data = data;
     context.putImageData(imageData,0,0);
    } 
    </script>
    </html>

chrome 控制台出现 Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.
IEedge是好的,就是将彩色图片变成黑白图片

  1. 相关问题canvas 跨域问题

  2. stackoverfow 上有相关提问 canvas CORS

  3. 看不懂stackoverflow解决办法 “To solve the cross domain issue with file://, you can start chrome with the parameter” --allow-file-access-from-files

  4. src= "images/004.jpg" 这也算跨域? 我对跨域的理解就是必须协议相同,域名一样,端口一样。

  5. 那么chrome 这个问题该如何解决,以后的解决跨域有没有一些好的方法?

PHPz
PHPz

学习是最好的投资!

全部回复(4)
阿神

试试img.crossOrigin = "Anonymous";

PHP中文网

因为你没在服务器浏览,所以报错了,
Canvas是不支持跨域的,改浏览器启动参数只是让自己电脑支持而已,解决不了真正的跨域问题

怪我咯

1.起个服务器再在chrome里试一下,应该会跑通。
2.右键chrome,属性,在目标后面加上(有个空格) --allow-file-access-from-files
这是改启动参数。大概是chrome的神秘本地文件限制吧。。既然有外国小哥教那最好了。

怪我咯

跨域确实如你所说;你在本地没服务器跑,就是浏览器自己问题
我替你stackoverflow 了一下,大概跟楼上基本一样了。-,-
原文在此:https://github.com/mrdoob/three.js/wiki/How-to-run-things-locally

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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