【问题标题】:Get pixels of a bitmap with javascript使用 javascript 获取位图的像素
【发布时间】:2012-06-06 23:37:52
【问题描述】:

我正在尝试专门为我自己的页面编写一个greasemonkey javascript 代码。在页面中,有一个id为“barcode”的img。

我可以使用

var imageattributes = document.getElementById('barcode');

并从页面中获取图像。 我想要的是我希望能够将这张图片中的所有像素放在一个数组中。

我一直在 stackoverflow 中四处走动,并看到了一些方法来做到这一点。我也看到了pixastic。我对stackoverflow中的解决方案的问题是

var imgData = context.getImageData(0, 0, canvas.height, canvas.width);

不起作用。不管我做什么。 而且 pixastic 没有显示我如何在任何地方查看像素信息。他们的文档只涵盖了他们已经拥有的反转、模糊等功能。

我目前的代码是这样的:

var imageattributes = document.getElementById('barcode').attributes;
var imageurl = imageattributes.getNamedItem("src").value;
var imageurl2 = imageurl.replace("..","http://localhost");

var img = new Image();
img.src = imageurl2;
context.drawImage(img, 0, 0);
var imgData = context.getImageData(0, 0, canvas.height, canvas.width);
var pixel = new Array();
for(i=0;i<canvas.height;i++){
    pixel[i] = new Array();
    for(j=0;j<canvas.width;j++){
        pixel[i][j] = imgData.data[i*canvas.width+j*4];
    }
}
document.getElementById('derp').innerHTML = imageurl;

应该获取图像,获取它的 src,将其作为新图像加载,并将像素放入数组中。最后一行只是在屏幕上显示代码是否有效,所以如果 url 打印,则表示它有效,如果它没有,它没有。

谁能帮我解决这个问题?谢谢。

【问题讨论】:

  • getImageData 在什么情况下不起作用?它会抛出错误还是返回null 或其他内容?
  • @apsillers 我看不到错误或发生了什么。我只是删除了所有内容并逐行编写代码,检查最后一行是否有效并在网页上写了一些东西。当我来到那条特定线路时,它停止了工作。
  • 你能做一个console.log 并在你的控制台中查看结果吗?结果是什么? imgData.data 是否已填充?
  • 我在 web 控制台上逐行运行 javascript 代码。它停止在行 context.drawImage(img, 0, 0) 上工作,因为未定义上下文。我在某处看到我应该首先放置 var context = document.getElementById('barcode').getContext('2d') 但这也不起作用。它说 getContext 不是一个函数。所以我想这就是我出错的地方?
  • 等等,你没有&lt;canvas&gt; 元素吗?这是整个功能的核心组成部分。现在写一个答案。

标签: javascript image bitmap pixel


【解决方案1】:

您没有(或没有使用)&lt;canvas&gt; 元素。您的 HTML 应如下所示:

<img id="barcode" src="whatever.bmp">
<canvas id="mycanvas">
    <div id="fallback">
        You only see this message if your browser doesn't support canvas.
    </div>
<canvas>

你的函数应该以:

为前缀
var context = document.getElementById('mycanvas').getContext('2d');

这应该使您的代码正常运行。您需要先获取&lt;canvas&gt; 元素的绘图上下文,然后将图像添加到该上下文中,最后从上下文中检索像素数据。

要直接解决您上面的评论,行

var context = document.getElementById('barcode').getContext('2d');

尝试获取图像元素的上下文,但这是不可能的。您只能在画布元素上调用 getContext

【讨论】:

  • 这很好用 :D 谢谢!虽然我不得不将 canvas.height 和 canvas.width 编辑为其他东西,但它仍然有效。谢谢。
猜你喜欢
  • 2017-08-22
  • 2011-05-08
  • 2014-08-05
  • 2013-06-06
  • 2012-01-29
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2014-01-25
相关资源
最近更新 更多