12 changed files with 7355 additions and 3843 deletions
@ -0,0 +1,14 @@
|
||||
root = true |
||||
|
||||
[*] |
||||
end_of_line = lf |
||||
insert_final_newline = true |
||||
indent_style = space |
||||
indent_size = 4 |
||||
|
||||
[*.md] |
||||
trim_trailing_whitespace = false |
||||
|
||||
[{.travis.yml}] |
||||
indent_style = space |
||||
indent_size = 2 |
@ -0,0 +1,27 @@
|
||||
{ |
||||
"extends": [ |
||||
"eslint-config-es5", |
||||
"plugin:prettier/recommended" |
||||
], |
||||
"parserOptions": { |
||||
"ecmaVersion": 2017, |
||||
"sourceType": "module" |
||||
}, |
||||
"rules": { |
||||
"prettier/prettier": [ |
||||
"error", |
||||
{ |
||||
"singleQuote": true, |
||||
"tabWidth": "4" |
||||
} |
||||
], |
||||
"no-console": "off", |
||||
"no-use-before-define": ["warn", { "functions": false, "classes": false, "variables": true }], |
||||
"func-names": ["warn", "as-needed"] |
||||
|
||||
}, |
||||
"env": { |
||||
"amd": true, |
||||
"es6": true |
||||
} |
||||
} |
File diff suppressed because one or more lines are too long
@ -1,13 +1,13 @@
|
||||
var resemble = require('./resemble'); |
||||
const resemble = require("./resemble"); |
||||
|
||||
module.exports = function(image1, image2, options) { |
||||
return new Promise(function(resolve, reject) { |
||||
resemble.compare(image1, image2, options, function(err, data) { |
||||
if (err) { |
||||
reject(err); |
||||
} else { |
||||
resolve(data); |
||||
} |
||||
module.exports = function compareImages(image1, image2, options) { |
||||
return new Promise((resolve, reject) => { |
||||
resemble.compare(image1, image2, options, (err, data) => { |
||||
if (err) { |
||||
reject(err); |
||||
} else { |
||||
resolve(data); |
||||
} |
||||
}); |
||||
}); |
||||
}); |
||||
}; |
||||
|
@ -1,301 +1,303 @@
|
||||
$(function(){ |
||||
var $target = $('#drop-zone'); |
||||
|
||||
function dropZone($target, onDrop){ |
||||
$target. |
||||
bind('dragover', function(){ |
||||
$target.addClass( 'drag-over' ); |
||||
return false; |
||||
}). |
||||
bind("dragend", function () { |
||||
$target.removeClass( 'drag-over' ); |
||||
return false; |
||||
}). |
||||
bind("dragleave", function () { |
||||
$target.removeClass( 'drag-over' ); |
||||
return false; |
||||
}). |
||||
bind("drop", function(event) { |
||||
var file = event.originalEvent.dataTransfer.files[0]; |
||||
|
||||
event.stopPropagation(); |
||||
event.preventDefault(); |
||||
|
||||
$target.removeClass( 'drag-over' ); |
||||
|
||||
var droppedImage = new Image(); |
||||
var fileReader = new FileReader(); |
||||
|
||||
fileReader.onload = function (event) { |
||||
droppedImage.src = event.target.result; |
||||
$target.html(droppedImage); |
||||
}; |
||||
|
||||
fileReader.readAsDataURL(file); |
||||
|
||||
onDrop(file); |
||||
}); |
||||
} |
||||
|
||||
dropZone($target, function(file){ |
||||
|
||||
resemble(file).onComplete(function(data){ |
||||
$('#image-data').show(); |
||||
$('#red').css('width',data.red+'%'); |
||||
$('#green').css('width',data.green+'%'); |
||||
$('#blue').css('width',data.blue+'%'); |
||||
$('#alpha').css('width',data.alpha+'%'); |
||||
$('#brightness').css('width',data.brightness+'%'); |
||||
$('#white').css('width',data.white+'%'); |
||||
$('#black').css('width',data.black+'%'); |
||||
}); |
||||
|
||||
}); |
||||
|
||||
function onComplete(data){ |
||||
var time = Date.now(); |
||||
var diffImage = new Image(); |
||||
diffImage.src = data.getImageDataUrl(); |
||||
|
||||
$('#image-diff').html(diffImage); |
||||
|
||||
$(diffImage).click(function(){ |
||||
var w = window.open("about:blank", "_blank"); |
||||
var html = w.document.documentElement; |
||||
var body = w.document.body; |
||||
|
||||
html.style.margin = 0; |
||||
html.style.padding = 0; |
||||
body.style.margin = 0; |
||||
body.style.padding = 0; |
||||
|
||||
var img = w.document.createElement("img"); |
||||
img.src = diffImage.src; |
||||
img.alt = "image diff"; |
||||
img.style.maxWidth = "100%"; |
||||
img.addEventListener("click", function() { |
||||
this.style.maxWidth = this.style.maxWidth === "100%" ? "" : "100%"; |
||||
}); |
||||
body.appendChild(img); |
||||
}); |
||||
|
||||
$('.buttons').show(); |
||||
|
||||
if(data.misMatchPercentage == 0){ |
||||
$('#thesame').show(); |
||||
$('#diff-results').hide(); |
||||
} else { |
||||
$('#mismatch').text(data.misMatchPercentage); |
||||
if(!data.isSameDimensions){ |
||||
$('#differentdimensions').show(); |
||||
} else { |
||||
$('#differentdimensions').hide(); |
||||
} |
||||
$('#diff-results').show(); |
||||
$('#thesame').hide(); |
||||
} |
||||
} |
||||
|
||||
var file1; |
||||
var file2; |
||||
var resembleControl; |
||||
|
||||
dropZone($('#dropzone1'), function(file){ |
||||
file1 = file; |
||||
if(file2){ |
||||
resembleControl = resemble(file).compareTo(file2).onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
dropZone($('#dropzone2'), function(file){ |
||||
file2 = file; |
||||
if(file1){ |
||||
resembleControl = resemble(file).compareTo(file1).onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
var buttons = $('.buttons button'); |
||||
|
||||
buttons.click(function(){ |
||||
var $this = $(this); |
||||
|
||||
$this.parent('.buttons').find('button').removeClass('active'); |
||||
$this.addClass('active'); |
||||
|
||||
if($this.is('#raw')){ |
||||
resembleControl.ignoreNothing(); |
||||
} |
||||
else |
||||
if($this.is('#less')){ |
||||
resembleControl.ignoreLess(); |
||||
} |
||||
if($this.is('#colors')){ |
||||
resembleControl.ignoreColors(); |
||||
} |
||||
else |
||||
if($this.is('#antialising')){ |
||||
resembleControl.ignoreAntialiasing(); |
||||
} |
||||
else |
||||
if($this.is('#alpha')){ |
||||
resembleControl.ignoreAlpha(); |
||||
} |
||||
else |
||||
if($this.is('#same-size')){ |
||||
resembleControl.scaleToSameSize(); |
||||
} |
||||
else |
||||
if($this.is('#original-size')){ |
||||
resembleControl.useOriginalSize(); |
||||
} |
||||
else |
||||
if($this.is('#pink')){ |
||||
resembleControl.outputSettings({ |
||||
errorColor: { |
||||
red: 255, |
||||
green: 0, |
||||
blue: 255 |
||||
} |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#yellow')){ |
||||
resembleControl.outputSettings({ |
||||
errorColor: { |
||||
red: 255, |
||||
green: 255, |
||||
blue: 0 |
||||
} |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#flat')){ |
||||
resembleControl.outputSettings({ |
||||
errorType: 'flat' |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#movement')){ |
||||
resembleControl.outputSettings({ |
||||
errorType: 'movement' |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#flatDifferenceIntensity')){ |
||||
resembleControl.outputSettings({ |
||||
errorType: 'flatDifferenceIntensity' |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#movementDifferenceIntensity')){ |
||||
resembleControl.outputSettings({ |
||||
errorType: 'movementDifferenceIntensity' |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#diffOnly')){ |
||||
resembleControl.outputSettings({ |
||||
errorType: 'diffOnly' |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#opaque')){ |
||||
resembleControl.outputSettings({ |
||||
transparency: 1 |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#transparent')){ |
||||
resembleControl.outputSettings({ |
||||
transparency: 0.3 |
||||
}).repaint(); |
||||
} |
||||
else |
||||
if($this.is('#boundingBox')){ |
||||
resembleControl.outputSettings({ |
||||
boundingBox: { |
||||
left: $("#bounding-box-x1").val(), |
||||
top: $("#bounding-box-y1").val(), |
||||
right: $("#bounding-box-x2").val(), |
||||
bottom: $("#bounding-box-y2").val() |
||||
} |
||||
}).repaint(); |
||||
$this.removeClass('active'); |
||||
} |
||||
if($this.is('#ignoredBox')){ |
||||
resembleControl.outputSettings({ |
||||
ignoredBox: { |
||||
left: $("#ignored-box-x1").val(), |
||||
top: $("#ignored-box-y1").val(), |
||||
right: $("#ignored-box-x2").val(), |
||||
bottom: $("#ignored-box-y2").val() |
||||
} |
||||
}).repaint(); |
||||
$this.removeClass('active'); |
||||
} |
||||
}); |
||||
|
||||
(function(){ |
||||
var xhr = new XMLHttpRequest(); |
||||
var xhr2 = new XMLHttpRequest(); |
||||
var xhr3 = new XMLHttpRequest(); |
||||
var done = $.Deferred(); |
||||
var dtwo = $.Deferred(); |
||||
var dthree = $.Deferred(); |
||||
|
||||
xhr.open('GET', 'demoassets/People.jpg', true); |
||||
xhr.responseType = 'blob'; |
||||
xhr.onload = function(e) { |
||||
done.resolve(this.response); |
||||
}; |
||||
xhr.send(); |
||||
|
||||
xhr2.open('GET', 'demoassets/People2.jpg', true); |
||||
xhr2.responseType = 'blob'; |
||||
xhr2.onload = function(e) { |
||||
dtwo.resolve(this.response); |
||||
}; |
||||
xhr2.send(); |
||||
|
||||
xhr3.open('GET', 'demoassets/PeopleAlpha.png', true); |
||||
xhr3.responseType = 'blob'; |
||||
xhr3.onload = function(e) { |
||||
dthree.resolve(this.response); |
||||
}; |
||||
xhr3.send(); |
||||
|
||||
$('#example-images').click(function(){ |
||||
|
||||
$('#dropzone1').html('<img src="demoassets/People.jpg"/>'); |
||||
$('#dropzone2').html('<img src="demoassets/People2.jpg"/>'); |
||||
|
||||
$.when(done, dtwo).done(function(file, file1){ |
||||
if (typeof FileReader === 'undefined') { |
||||
resembleControl = resemble('demoassets/People.jpg').compareTo('demoassets/People2.jpg').onComplete(onComplete); |
||||
} else { |
||||
resembleControl = resemble(file).compareTo(file1).onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
return false; |
||||
}); |
||||
|
||||
$('#example-images-alpha').click(function(){ |
||||
|
||||
$('#dropzone1').html('<img src="demoassets/People.jpg"/>'); |
||||
$('#dropzone2').html('<img src="demoassets/PeopleAlpha.png"/>'); |
||||
|
||||
$.when(done, dthree).done(function(file, file1){ |
||||
if (typeof FileReader === 'undefined') { |
||||
resembleControl = resemble('demoassets/People.jpg').compareTo('demoassets/PeopleAlpha.png').onComplete(onComplete); |
||||
} else { |
||||
resembleControl = resemble(file).compareTo(file1).onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
return false; |
||||
}); |
||||
|
||||
}()); |
||||
|
||||
$(function() { |
||||
var $target = $("#drop-zone"); |
||||
|
||||
function dropZone($target, onDrop) { |
||||
$target |
||||
.bind("dragover", function() { |
||||
$target.addClass("drag-over"); |
||||
return false; |
||||
}) |
||||
.bind("dragend", function() { |
||||
$target.removeClass("drag-over"); |
||||
return false; |
||||
}) |
||||
.bind("dragleave", function() { |
||||
$target.removeClass("drag-over"); |
||||
return false; |
||||
}) |
||||
.bind("drop", function(event) { |
||||
var file = event.originalEvent.dataTransfer.files[0]; |
||||
|
||||
event.stopPropagation(); |
||||
event.preventDefault(); |
||||
|
||||
$target.removeClass("drag-over"); |
||||
|
||||
var droppedImage = new Image(); |
||||
var fileReader = new FileReader(); |
||||
|
||||
fileReader.onload = function(event) { |
||||
droppedImage.src = event.target.result; |
||||
$target.html(droppedImage); |
||||
}; |
||||
|
||||
fileReader.readAsDataURL(file); |
||||
|
||||
onDrop(file); |
||||
}); |
||||
} |
||||
|
||||
dropZone($target, function(file) { |
||||
resemble(file).onComplete(function(data) { |
||||
$("#image-data").show(); |
||||
$("#red").css("width", data.red + "%"); |
||||
$("#green").css("width", data.green + "%"); |
||||
$("#blue").css("width", data.blue + "%"); |
||||
$("#alpha").css("width", data.alpha + "%"); |
||||
$("#brightness").css("width", data.brightness + "%"); |
||||
$("#white").css("width", data.white + "%"); |
||||
$("#black").css("width", data.black + "%"); |
||||
}); |
||||
}); |
||||
|
||||
function onComplete(data) { |
||||
var time = Date.now(); |
||||
var diffImage = new Image(); |
||||
diffImage.src = data.getImageDataUrl(); |
||||
|
||||
$("#image-diff").html(diffImage); |
||||
|
||||
$(diffImage).click(function() { |
||||
var w = window.open("about:blank", "_blank"); |
||||
var html = w.document.documentElement; |
||||
var body = w.document.body; |
||||
|
||||
html.style.margin = 0; |
||||
html.style.padding = 0; |
||||
body.style.margin = 0; |
||||
body.style.padding = 0; |
||||
|
||||
var img = w.document.createElement("img"); |
||||
img.src = diffImage.src; |
||||
img.alt = "image diff"; |
||||
img.style.maxWidth = "100%"; |
||||
img.addEventListener("click", function() { |
||||
this.style.maxWidth = |
||||
this.style.maxWidth === "100%" ? "" : "100%"; |
||||
}); |
||||
body.appendChild(img); |
||||
}); |
||||
|
||||
$(".buttons").show(); |
||||
|
||||
if (data.misMatchPercentage == 0) { |
||||
$("#thesame").show(); |
||||
$("#diff-results").hide(); |
||||
} else { |
||||
$("#mismatch").text(data.misMatchPercentage); |
||||
if (!data.isSameDimensions) { |
||||
$("#differentdimensions").show(); |
||||
} else { |
||||
$("#differentdimensions").hide(); |
||||
} |
||||
$("#diff-results").show(); |
||||
$("#thesame").hide(); |
||||
} |
||||
} |
||||
|
||||
var file1; |
||||
var file2; |
||||
var resembleControl; |
||||
|
||||
dropZone($("#dropzone1"), function(file) { |
||||
file1 = file; |
||||
if (file2) { |
||||
resembleControl = resemble(file) |
||||
.compareTo(file2) |
||||
.onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
dropZone($("#dropzone2"), function(file) { |
||||
file2 = file; |
||||
if (file1) { |
||||
resembleControl = resemble(file) |
||||
.compareTo(file1) |
||||
.onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
var buttons = $(".buttons button"); |
||||
|
||||
buttons.click(function() { |
||||
var $this = $(this); |
||||
|
||||
$this |
||||
.parent(".buttons") |
||||
.find("button") |
||||
.removeClass("active"); |
||||
$this.addClass("active"); |
||||
|
||||
if ($this.is("#raw")) { |
||||
resembleControl.ignoreNothing(); |
||||
} else if ($this.is("#less")) { |
||||
resembleControl.ignoreLess(); |
||||
} |
||||
if ($this.is("#colors")) { |
||||
resembleControl.ignoreColors(); |
||||
} else if ($this.is("#antialising")) { |
||||
resembleControl.ignoreAntialiasing(); |
||||
} else if ($this.is("#alpha")) { |
||||
resembleControl.ignoreAlpha(); |
||||
} else if ($this.is("#same-size")) { |
||||
resembleControl.scaleToSameSize(); |
||||
} else if ($this.is("#original-size")) { |
||||
resembleControl.useOriginalSize(); |
||||
} else if ($this.is("#pink")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorColor: { |
||||
red: 255, |
||||
green: 0, |
||||
blue: 255 |
||||
} |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#yellow")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorColor: { |
||||
red: 255, |
||||
green: 255, |
||||
blue: 0 |
||||
} |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#flat")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorType: "flat" |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#movement")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorType: "movement" |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#flatDifferenceIntensity")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorType: "flatDifferenceIntensity" |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#movementDifferenceIntensity")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorType: "movementDifferenceIntensity" |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#diffOnly")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
errorType: "diffOnly" |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#opaque")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
transparency: 1 |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#transparent")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
transparency: 0.3 |
||||
}) |
||||
.repaint(); |
||||
} else if ($this.is("#boundingBox")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
boundingBox: { |
||||
left: $("#bounding-box-x1").val(), |
||||
top: $("#bounding-box-y1").val(), |
||||
right: $("#bounding-box-x2").val(), |
||||
bottom: $("#bounding-box-y2").val() |
||||
} |
||||
}) |
||||
.repaint(); |
||||
$this.removeClass("active"); |
||||
} |
||||
if ($this.is("#ignoredBox")) { |
||||
resembleControl |
||||
.outputSettings({ |
||||
ignoredBox: { |
||||
left: $("#ignored-box-x1").val(), |
||||
top: $("#ignored-box-y1").val(), |
||||
right: $("#ignored-box-x2").val(), |
||||
bottom: $("#ignored-box-y2").val() |
||||
} |
||||
}) |
||||
.repaint(); |
||||
$this.removeClass("active"); |
||||
} |
||||
}); |
||||
|
||||
(function() { |
||||
var xhr = new XMLHttpRequest(); |
||||
var xhr2 = new XMLHttpRequest(); |
||||
var xhr3 = new XMLHttpRequest(); |
||||
var done = $.Deferred(); |
||||
var dtwo = $.Deferred(); |
||||
var dthree = $.Deferred(); |
||||
|
||||
xhr.open("GET", "demoassets/People.jpg", true); |
||||
xhr.responseType = "blob"; |
||||
xhr.onload = function(e) { |
||||
done.resolve(this.response); |
||||
}; |
||||
xhr.send(); |
||||
|
||||
xhr2.open("GET", "demoassets/People2.jpg", true); |
||||
xhr2.responseType = "blob"; |
||||
xhr2.onload = function(e) { |
||||
dtwo.resolve(this.response); |
||||
}; |
||||
xhr2.send(); |
||||
|
||||
xhr3.open("GET", "demoassets/PeopleAlpha.png", true); |
||||
xhr3.responseType = "blob"; |
||||
xhr3.onload = function(e) { |
||||
dthree.resolve(this.response); |
||||
}; |
||||
xhr3.send(); |
||||
|
||||
$("#example-images").click(function() { |
||||
$("#dropzone1").html('<img src="demoassets/People.jpg"/>'); |
||||
$("#dropzone2").html('<img src="demoassets/People2.jpg"/>'); |
||||
|
||||
$.when(done, dtwo).done(function(file, file1) { |
||||
if (typeof FileReader === "undefined") { |
||||
resembleControl = resemble("demoassets/People.jpg") |
||||
.compareTo("demoassets/People2.jpg") |
||||
.onComplete(onComplete); |
||||
} else { |
||||
resembleControl = resemble(file) |
||||
.compareTo(file1) |
||||
.onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
return false; |
||||
}); |
||||
|
||||
$("#example-images-alpha").click(function() { |
||||
$("#dropzone1").html('<img src="demoassets/People.jpg"/>'); |
||||
$("#dropzone2").html('<img src="demoassets/PeopleAlpha.png"/>'); |
||||
|
||||
$.when(done, dthree).done(function(file, file1) { |
||||
if (typeof FileReader === "undefined") { |
||||
resembleControl = resemble("demoassets/People.jpg") |
||||
.compareTo("demoassets/PeopleAlpha.png") |
||||
.onComplete(onComplete); |
||||
} else { |
||||
resembleControl = resemble(file) |
||||
.compareTo(file1) |
||||
.onComplete(onComplete); |
||||
} |
||||
}); |
||||
|
||||
return false; |
||||
}); |
||||
})(); |
||||
}); |
||||
|
@ -1,32 +1,37 @@
|
||||
/* eslint no-process-exit: "warn"*/ |
||||
|
||||
// node --expose-gc memory-leak-test.js
|
||||
|
||||
const fs = require('fs'); |
||||
const resemble = require('./resemble'); |
||||
const fs = require("fs"); |
||||
const resemble = require("./resemble"); |
||||
|
||||
let max = 2000; |
||||
const timerLabel = "2000 compare"; |
||||
console.time(timerLabel); |
||||
|
||||
compare(); |
||||
|
||||
function compare(){ |
||||
const people = fs.readFileSync('./demoassets/ghost1.png'); |
||||
const people2 = fs.readFileSync('./demoassets/ghost2.png'); |
||||
function compare() { |
||||
const people = fs.readFileSync("./demoassets/ghost1.png"); |
||||
const people2 = fs.readFileSync("./demoassets/ghost2.png"); |
||||
|
||||
resemble(people).compareTo(people2).onComplete(function() { |
||||
if (--max >= 0) { |
||||
process.nextTick(compare); |
||||
} else { |
||||
process.nextTick(log); |
||||
} |
||||
global.gc(); |
||||
if (max % 100 === 0) { |
||||
var mem = process.memoryUsage(); |
||||
console.log(max, mem.rss, mem.heapUsed, mem.external); |
||||
} |
||||
}); |
||||
resemble(people) |
||||
.compareTo(people2) |
||||
.onComplete(() => { |
||||
if (--max >= 0) { |
||||
process.nextTick(compare); |
||||
} else { |
||||
process.nextTick(log); |
||||
} |
||||
global.gc(); |
||||
if (max % 100 === 0) { |
||||
const mem = process.memoryUsage(); |
||||
console.log(max, mem.rss, mem.heapUsed, mem.external); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
function log(){ |
||||
function log() { |
||||
console.timeEnd(timerLabel); |
||||
process.exit(0); |
||||
} |
||||
} |
||||
|
@ -1,39 +1,43 @@
|
||||
const compareImages = require('../compareImages'); |
||||
const fs = require('fs'); |
||||
|
||||
describe('compareImages', () => { |
||||
test('works with buffers', async () => { |
||||
const data = await compareImages( |
||||
fs.readFileSync('./demoassets/People.jpg'), |
||||
fs.readFileSync('./demoassets/People2.jpg') |
||||
); |
||||
|
||||
expect(data.isSameDimensions).toBe(true); |
||||
expect(data.misMatchPercentage).toEqual('8.66'); |
||||
|
||||
const buffer = data.getBuffer(); |
||||
|
||||
expect(buffer).toBeInstanceOf(Buffer); |
||||
expect(buffer.length).toBe(91876); |
||||
|
||||
const comparison = fs.readFileSync( |
||||
'./nodejs-tests/PeopleComparedToPeople2.png' |
||||
); |
||||
|
||||
expect(buffer.equals(comparison)).toBe(true); |
||||
|
||||
const buffer2 = data.getBuffer(true); |
||||
const comparison2 = fs.readFileSync( |
||||
'./nodejs-tests/PeopleComparedToPeople2WithOriginal.png' |
||||
); |
||||
expect(buffer2.equals(comparison2)).toBe(true); |
||||
}); |
||||
|
||||
test('throws when failed', async () => { |
||||
const promise = compareImages( |
||||
fs.readFileSync('./demoassets/People.jpg'), |
||||
'bogus data' |
||||
); |
||||
await expect(promise).rejects.toMatch('Error: error while reading from input stream'); |
||||
}); |
||||
/* eslint-env jest*/ |
||||
|
||||
const compareImages = require("../compareImages"); |
||||
const fs = require("fs"); |
||||
|
||||
describe("compareImages", () => { |
||||
test("works with buffers", async () => { |
||||
const data = await compareImages( |
||||
fs.readFileSync("./demoassets/People.jpg"), |
||||
fs.readFileSync("./demoassets/People2.jpg") |
||||
); |
||||
|
||||
expect(data.isSameDimensions).toBe(true); |
||||
expect(data.misMatchPercentage).toEqual("8.66"); |
||||
|
||||
const buffer = data.getBuffer(); |
||||
|
||||
expect(buffer).toBeInstanceOf(Buffer); |
||||
expect(buffer.length).toBe(91876); |
||||
|
||||
const comparison = fs.readFileSync( |
||||
"./nodejs-tests/PeopleComparedToPeople2.png" |
||||
); |
||||
|
||||
expect(buffer.equals(comparison)).toBe(true); |
||||
|
||||
const buffer2 = data.getBuffer(true); |
||||
const comparison2 = fs.readFileSync( |
||||
"./nodejs-tests/PeopleComparedToPeople2WithOriginal.png" |
||||
); |
||||
expect(buffer2.equals(comparison2)).toBe(true); |
||||
}); |
||||
|
||||
test("throws when failed", async () => { |
||||
const promise = compareImages( |
||||
fs.readFileSync("./demoassets/People.jpg"), |
||||
"bogus data" |
||||
); |
||||
await expect(promise).rejects.toMatch( |
||||
"Error: error while reading from input stream" |
||||
); |
||||
}); |
||||
}); |
||||
|
@ -1,40 +1,46 @@
|
||||
{ |
||||
"name": "resemblejs", |
||||
"version": "2.10.0", |
||||
"description": "Image analysis and comparison with HTML5", |
||||
"main": "resemble.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/Huddle/Resemble.js.git" |
||||
}, |
||||
"keywords": [ |
||||
"comparison", |
||||
"visual", |
||||
"image", |
||||
"diff", |
||||
"compare", |
||||
"html5" |
||||
], |
||||
"author": "James Cryer", |
||||
"license": "MIT", |
||||
"bugs": { |
||||
"url": "https://github.com/Huddle/Resemble.js/issues" |
||||
}, |
||||
"homepage": "https://github.com/Huddle/Resemble.js", |
||||
"scripts": { |
||||
"test": "jest nodejs-tests", |
||||
"test-watch": "jest --watch nodejs-tests" |
||||
}, |
||||
"dependencies": { |
||||
"canvas-prebuilt": "^1.6.5-prerelease.1" |
||||
}, |
||||
"devDependencies": { |
||||
"chai": "^3.4.1", |
||||
"jest": "^20.0.4", |
||||
"jest-cli": "^20.0.4", |
||||
"color-convert": "^1.9.0" |
||||
}, |
||||
"jest": { |
||||
"testEnvironment": "node" |
||||
} |
||||
"name": "resemblejs", |
||||
"version": "2.10.0", |
||||
"description": "Image analysis and comparison with HTML5", |
||||
"main": "resemble.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/Huddle/Resemble.js.git" |
||||
}, |
||||
"keywords": ["comparison", "visual", "image", "diff", "compare", "html5"], |
||||
"author": "James Cryer", |
||||
"license": "MIT", |
||||
"bugs": { |
||||
"url": "https://github.com/Huddle/Resemble.js/issues" |
||||
}, |
||||
"homepage": "https://github.com/Huddle/Resemble.js", |
||||
"scripts": { |
||||
"test": "jest nodejs-tests", |
||||
"test-watch": "jest --watch nodejs-tests", |
||||
"precommit": "lint-staged", |
||||
"lint": "eslint **/*.js --fix" |
||||
}, |
||||
"lint-staged": { |
||||
"*.{js,json,css,md}": ["prettier --write", "git add"] |
||||
}, |
||||
"dependencies": { |
||||
"canvas-prebuilt": "^1.6.5-prerelease.1" |
||||
}, |
||||
"devDependencies": { |
||||
"chai": "^3.4.1", |
||||
"color-convert": "^1.9.0", |
||||
"eslint": "^4.19.1", |
||||
"eslint-config-es5": "^0.5.0", |
||||
"eslint-config-prettier": "^2.9.0", |
||||
"eslint-plugin-import": "^2.9.0", |
||||
"eslint-plugin-prettier": "^2.6.0", |
||||
"husky": "^0.14.3", |
||||
"jest": "^20.0.4", |
||||
"jest-cli": "^20.0.4", |
||||
"lint-staged": "^7.0.0", |
||||
"prettier": "^1.11.1" |
||||
}, |
||||
"jest": { |
||||
"testEnvironment": "node" |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue