resemblejs
Advanced tools
Comparing version 2.2.2 to 2.2.3
{ | ||
"name": "resemblejs", | ||
"version": "2.2.2", | ||
"version": "2.2.3", | ||
"description": "Image analysis and comparison with HTML5", | ||
@@ -5,0 +5,0 @@ "main": "resemble.js", |
Resemble.js | ||
========== | ||
Analyse and compare images with Javascript and HTML5. [More info & Resemble.js Demo](http://huddle.github.com/Resemble.js/). If you need NodeJS support, take a look at [node-resemble](https://github.com/ddo/node-resemble) | ||
Analyse and compare images with Javascript and HTML5. [More info & Resemble.js Demo](http://huddle.github.com/Resemble.js/). If you need NodeJS support, take a look at [node-resemble](https://github.com/ddo/node-resemble) or [node-resemble-v2](https://github.com/peter-mouland/node-resemble-v2). | ||
@@ -6,0 +6,0 @@ ![Two image diff examples side-by-side, one pink, one yellow.](https://raw.github.com/Huddle/Resemble.js/master/demoassets/readmeimage.jpg "Visual image comparison") |
130
resemble.js
@@ -26,2 +26,4 @@ /* | ||
var targetPix = {r: 0, g: 0, b: 0, a: 0}; // isAntialiased | ||
function colorsDistance(c1, c2){ | ||
@@ -32,38 +34,31 @@ return (Math.abs(c1.r - c2.r) + Math.abs(c1.g - c2.g) + Math.abs(c1.b - c2.b))/3; | ||
var errorPixelTransform = { | ||
flat : function (d1, d2){ | ||
return { | ||
r: errorPixelColor.red, | ||
g: errorPixelColor.green, | ||
b: errorPixelColor.blue, | ||
a: errorPixelColor.alpha | ||
} | ||
flat: function (px, offset, d1, d2) { | ||
px[offset] = errorPixelColor.red; | ||
px[offset + 1] = errorPixelColor.green; | ||
px[offset + 2] = errorPixelColor.blue; | ||
px[offset + 3] = errorPixelColor.alpha; | ||
}, | ||
movement: function (d1, d2){ | ||
return { | ||
r: ((d2.r*(errorPixelColor.red/255)) + errorPixelColor.red)/2, | ||
g: ((d2.g*(errorPixelColor.green/255)) + errorPixelColor.green)/2, | ||
b: ((d2.b*(errorPixelColor.blue/255)) + errorPixelColor.blue)/2, | ||
a: d2.a | ||
} | ||
movement: function (px, offset, d1, d2) { | ||
px[offset] = ((d2.r * (errorPixelColor.red / 255)) + errorPixelColor.red) / 2; | ||
px[offset + 1] = ((d2.g * (errorPixelColor.green / 255)) + errorPixelColor.green) / 2; | ||
px[offset + 2] = ((d2.b * (errorPixelColor.blue / 255)) + errorPixelColor.blue) / 2; | ||
px[offset + 3] = d2.a; | ||
}, | ||
flatDifferenceIntensity: function (d1, d2){ | ||
return { | ||
r: errorPixelColor.red, | ||
g: errorPixelColor.green, | ||
b: errorPixelColor.blue, | ||
a: colorsDistance(d1, d2) | ||
} | ||
flatDifferenceIntensity: function (px, offset, d1, d2) { | ||
px[offset] = errorPixelColor.red; | ||
px[offset + 1] = errorPixelColor.green; | ||
px[offset + 2] = errorPixelColor.blue; | ||
px[offset + 3] = colorsDistance(d1, d2); | ||
}, | ||
movementDifferenceIntensity: function (d1, d2){ | ||
var ratio = colorsDistance(d1, d2)/255 * 0.8; | ||
return { | ||
r: ((1-ratio)*(d2.r*(errorPixelColor.red/255)) + ratio*errorPixelColor.red), | ||
g: ((1-ratio)*(d2.g*(errorPixelColor.green/255)) + ratio*errorPixelColor.green), | ||
b: ((1-ratio)*(d2.b*(errorPixelColor.blue/255)) + ratio*errorPixelColor.blue), | ||
a: d2.a | ||
} | ||
movementDifferenceIntensity: function (px, offset, d1, d2) { | ||
var ratio = colorsDistance(d1, d2) / 255 * 0.8; | ||
px[offset] = ((1 - ratio) * (d2.r * (errorPixelColor.red / 255)) + ratio * errorPixelColor.red); | ||
px[offset + 1] = ((1 - ratio) * (d2.g * (errorPixelColor.green / 255)) + ratio * errorPixelColor.green); | ||
px[offset + 2] = ((1 - ratio) * (d2.b * (errorPixelColor.blue / 255)) + ratio * errorPixelColor.blue); | ||
px[offset + 3] = d2.a; | ||
} | ||
}; | ||
var errorPixelTransformer = errorPixelTransform.flat; | ||
var errorPixel = errorPixelTransform.flat; | ||
var largeImageThreshold = 1200; | ||
@@ -123,3 +118,3 @@ var useCrossOrigin = true; | ||
loop(height, width, function(verticalPos, horizontalPos){ | ||
loop(width, height, function(horizontalPos, verticalPos){ | ||
var offset = (verticalPos*width + horizontalPos) * 4; | ||
@@ -180,12 +175,14 @@ var red = sourceImageData[offset]; | ||
// don't assign to hiddenImage, see https://github.com/Huddle/Resemble.js/pull/87/commits/300d43352a2845aad289b254bfbdc7cd6a37e2d7 | ||
var width = hiddenImage.width; | ||
var height = hiddenImage.height; | ||
if( scaleToSameSize && images.length == 1 ){ | ||
hiddenImage.width = images[0].width; | ||
hiddenImage.height = images[0].height; | ||
width = images[0].width; | ||
height = images[0].height; | ||
} | ||
var width = hiddenImage.width; | ||
var height = hiddenImage.height; | ||
hiddenCanvas.width = width; | ||
hiddenCanvas.height = height; | ||
hiddenCanvas.getContext('2d').drawImage(hiddenImage, 0, 0, width, height); | ||
@@ -207,4 +204,7 @@ imageData = hiddenCanvas.getContext('2d').getImageData(0, 0, width, height); | ||
&& typeof fileData.height === 'number') { | ||
images.push(fileData); | ||
callback(fileData, fileData.width, fileData.height); | ||
} else { | ||
@@ -239,6 +239,2 @@ fileReader = new FileReader(); | ||
function isNumber(n) { | ||
return !isNaN(parseFloat(n)); | ||
} | ||
function isPixelBrightnessSimilar(d1, d2){ | ||
@@ -300,3 +296,2 @@ var alpha = isColorSimilar(d1.a, d2.a, 'alpha'); | ||
var offset; | ||
var targetPix; | ||
var distance = 1; | ||
@@ -319,5 +314,4 @@ var i; | ||
offset = ((verticalPos+j)*width + (horizontalPos+i)) * 4; | ||
targetPix = getPixelInfo(data, offset, cacheSet); | ||
if(targetPix === null){ | ||
if(!getPixelInfo(targetPix , data, offset, cacheSet)){ | ||
continue; | ||
@@ -355,10 +349,2 @@ } | ||
function errorPixel(px, offset, data1, data2){ | ||
var data = errorPixelTransformer(data1, data2); | ||
px[offset] = data.r; | ||
px[offset + 1] = data.g; | ||
px[offset + 2] = data.b; | ||
px[offset + 3] = data.a; | ||
} | ||
function copyPixel(px, offset, data){ | ||
@@ -378,26 +364,13 @@ px[offset] = data.r; //r | ||
function getPixelInfo(data, offset, cacheSet){ | ||
var r; | ||
var g; | ||
var b; | ||
var d; | ||
var a; | ||
function getPixelInfo(dst, data, offset, cacheSet) { | ||
if (data.length > offset) { | ||
dst.r = data[offset]; | ||
dst.g = data[offset + 1]; | ||
dst.b = data[offset + 2]; | ||
dst.a = data[offset + 3]; | ||
r = data[offset]; | ||
return true; | ||
} | ||
if(typeof r !== 'undefined'){ | ||
g = data[offset+1]; | ||
b = data[offset+2]; | ||
a = data[offset+3]; | ||
d = { | ||
r: r, | ||
g: g, | ||
b: b, | ||
a: a | ||
}; | ||
return d; | ||
} else { | ||
return null; | ||
} | ||
return false; | ||
} | ||
@@ -449,4 +422,7 @@ | ||
loop(height, width, function(verticalPos, horizontalPos){ | ||
var pixel1 = {r: 0, g: 0, b: 0, a: 0}; | ||
var pixel2 = { r: 0, g: 0, b: 0, a: 0 }; | ||
loop(width, height, function(horizontalPos, verticalPos){ | ||
if(skip){ // only skip if the image isn't small | ||
@@ -459,6 +435,4 @@ if(verticalPos % skip === 0 || horizontalPos % skip === 0){ | ||
var offset = (verticalPos*width + horizontalPos) * 4; | ||
var pixel1 = getPixelInfo(data1, offset, 1); | ||
var pixel2 = getPixelInfo(data2, offset, 2); | ||
if(pixel1 === null || pixel2 === null){ | ||
if (!getPixelInfo(pixel1, data1, offset, 1) || !getPixelInfo(pixel2, data2, offset, 2)) { | ||
return; | ||
@@ -728,3 +702,3 @@ } | ||
if(options.errorType && errorPixelTransform[options.errorType] ){ | ||
errorPixelTransformer = errorPixelTransform[options.errorType]; | ||
errorPixel = errorPixelTransform[options.errorType]; | ||
} | ||
@@ -731,0 +705,0 @@ |
Sorry, the diff of this file is not supported yet
11
131596
901