【发布时间】:2017-03-17 03:09:15
【问题描述】:
如果我有 2 个相同的图像,除了我更改了 1 个像素,它表示我的数组中有 131 个不同的更改。为什么会这样?我正在使用 getcanvasdata 创建 2 个数组和一个循环来比较两者。
var c = document.getElementById("myCanvas");
var c2 = document.getElementById("myCanvas2");
var ctx = c.getContext("2d");
var ctx2 = c2.getContext("2d");
var img = new Image();
var img2 = new Image();
var diffpixels = [];
var imgData;
var imgData2;
img.src = "avengers2.jpg";
img2.src = "avengers1.jpg";
img.onload = function() {
ctx.drawImage(img, 0, 0);
imgData = ctx.getImageData(0, 0, 1920, 1080).data;
img2.onload = function() {
ctx2.drawImage(img2, 0, 0);
imgData2 = ctx2.getImageData(0, 0, 1920, 1080).data;
console.log(imgData2.length);
for (var i = 0; i < imgData.length; i++) {
if (imgData[i] === imgData2[i]) {} else {
diffpixels.push(i);
}
}
console.log(diffpixels);
}
}
<canvas id="myCanvas" width="1920" height="1080" style="border:1px solid #d3d3d3"></canvas>
<canvas id="myCanvas2" width="1920" height="1080" style="border:1px solid #d3d3d3"></canvas>
【问题讨论】:
-
您是如何创建图像文件的?如果您更改一个像素然后保存文件,那么 JPG 有损压缩算法可以解释更多差异,不是吗?
-
请注意,您计算的不是不同的像素,而是不同的通道(即像素 x 4)。
标签: javascript html image canvas