如果我有2張圖像是相同的,但我更改1像素,它說我的數組中有131個不同的更改。這是爲什麼發生?我使用getcanvasdata和一個循環來創建2個數組來比較兩者。GetImageData不返回預期的結果用於比較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有損壓縮算法可能會導致更多的差異,不是嗎? – nnnnnn
請注意,您不計算不同的像素,但不同的通道(即像素x 4)。 – K3N