【问题标题】:Manipulating pixel data on image with html canvas and JS使用 html canvas 和 JS 处理图像上的像素数据
【发布时间】:2016-01-19 18:53:51
【问题描述】:

好的,所以我正在尝试在我的机器上拍摄图像并使用画布和一些 JS 对其进行操作...但是,我不断收到错误消息:

“来自 'file://' 的图像已被跨域资源共享策略阻止加载:无效响应。因此不允许访问 'null' 源。”

我想如果我不修改原始图像,而只修改图像数据的副本,我就可以了。但由于某种原因,它仍然不起作用。有谁知道我应该怎么做?这是我目前的代码:

$(document).ready(function() {
  var canv = document.getElementById("img_canvas");
  var ctx = canv.getContext("2d");
  var img = new Image();
  img.crossOrigin = "Anonymous";
  img.src = "img/meAndTheOcean.jpg";

  $(img).load(function() {
    ctx.drawImage(img, 0, 0);
    var img_data = ctx.getImageData(0,0,canv.width, canv.height);
    var pixels = img_data.data;
    var npixels = img_data.width * img_data.height;
    var cpyPixels = ctx.createImageData(img_data.width, img_data.height);
    for (var i = 0; i < npixels; i++){
      cpyPixels[i*4] = 255 - pixels[i*4];
      cpyPixels[i*4 + 1] = 255 - pixels[i*4 + 1];
      cpyPixels[i*4 + 2] = 255 - pixels[i*4 + 2];
    }
    ctx.putImageData(cpyPixels,0,0);
  });
});

【问题讨论】:

    标签: javascript html animation canvas pixel


    【解决方案1】:

    您很可能只需双击 html 文件即可打开此页面。而不是在本地服务器上,您可以轻松启动和获取,例如 nodejs 或 wamp。

    您无法从文件源加载图像,这会导致图像的来源与域的来源不同。

    这被称为被污染的画布,更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image

    这意味着出于安全原因,您不允许访问画布数据。 http://simonsarris.com/blog/480-understanding-the-html5-canvas-image-security-rules

    【讨论】:

    • 所以如果我只是在我的本地服务器上设置它,我可以让它工作吗?如果最终我想使用 github 托管此页面,我是否能够以与创建自己的本地服务器相同的方式操作数据?
    • 如果图像也在 github 上那么它可能会工作,是的,如果你把它放在本地服务器上它应该可以工作
    • 图片需要从与网页相同的域提供,以满足跨域安全,从而不污染画布。
    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 2012-02-16
    • 2013-06-06
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2012-04-15
    • 2023-03-26
    相关资源
    最近更新 更多