我正试图使用getImageData来返回像这样的png图像左边缘的第一个非白色像素的x位置;
function getLeftEdge(myImage) {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var img = document.getElementById(myImage);
context.drawImage(img, 0, 0);
var pixelData;
for (x = 1; x <= img.width; x++) {
for (y = 1; y <= img.height; y++) {
pixelData = context.getImageData(x, y, 1, 1);
if (pixelData.data[0] != 255) {
alert("return x,y " + x + "," + y);
return x;
}
}
}
}
我知道我正在使用的图像中的第一个非白色像素是222254,但我所做的功能是报告1150。我试着做了一个jsfiddle,它不起作用,但你可以看到我正在使用的图像。
问题是您没有设置画布的大小。因此,它默认为150x300像素。您还可以从1,1开始迭代,并在宽度、高度处停止,但左上角的像素实际上是0,0,右下角的像素是宽度-1、高度-1。当循环到达1150时,在这个位置没有像素,因为y坐标的最大值是149。这就是getImageData
报告像素为黑色的原因。
function getLeftEdge(myImage) {
var img = document.getElementById(myImage);
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var pixelData;
for (var x = 0; x < img.width; x++) {
for (var y = 0; y < img.height; y++) {
pixelData = context.getImageData(x, y, 1, 1);
if (pixelData.data[0] != 255) {
alert("return x,y " + x + "," + y);
return x;
}
}
}
}
然而,这并不能解决问题,因为尽管背景看起来完全是白色的,但有些像素是例如#fefefe。您应该考虑使用更高的阈值。