From 3ee058afb0f214dee5054ffa002bd05c8df07fb8 Mon Sep 17 00:00:00 2001 From: Thomas Grainger Date: Tue, 28 Nov 2017 16:13:30 +0000 Subject: [PATCH] add options to compareImages --- README.md | 26 ++++++++++++++++++++++---- compareImages.js | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0f3bda6..bba094b 100644 --- a/README.md +++ b/README.md @@ -121,17 +121,35 @@ The API under Node is the same as on the browser with one addition, a promise ba ``` js const compareImages = require('resemblejs/compareImages'); -const fs = require("fs"); +const fs = require("mz/fs"); async function getDiff(){ + +const options = { + output: { + errorColor: { + red: 255, + green: 0, + blue: 255 + }, + errorType: 'movement', + transparency: 0.3, + largeImageThreshold: 1200, + useCrossOrigin: false, + outputDiff: true + }, + scaleToSameSize: true, + ignore: ['nothing', 'less', 'antialiasing', 'colors', 'alpha'], +}; // The parameters can be Node Buffers // data is the same as usual with an additional getBuffer() function const data = await compareImages( - fs.readFileSync('./demoassets/People.jpg'), - fs.readFileSync('./demoassets/People2.jpg') + await fs.readFile('./demoassets/People.jpg'), + await fs.readFile('./demoassets/People2.jpg'), + options, ); -fs.writeFileSync('./output.png', data.getBuffer()); +await fs.writeFile('./output.png', data.getBuffer()); } diff --git a/compareImages.js b/compareImages.js index 42e5772..1884317 100644 --- a/compareImages.js +++ b/compareImages.js @@ -1,8 +1,38 @@ -const resemble = require('./resemble'); +var resemble = require('./resemble'); -module.exports = async function(image1, image2) { +function applyIgnore(api, ignore) { + switch (ignore) { + case 'nothing': api.ignoreNothing(); + case 'less': api.ignoreLess(); + case 'antialiasing': api.ignoreAntialiasing(); + case 'colors': api.ignoreColors(); + case 'alpha': api.ignoreAlpha(); + default: throw new Error('Invalid ignore: ' + ignore); + } +} + +module.exports = function(image1, image2, options) { return new Promise(function(resolve, reject) { - resemble(image1).compareTo(image2).onComplete(function(data) { + var res = resemble(image1), opt = options || {}, compare; + if (opt.output) { + res.outputSettings(opt.output); + } + + compare = res.compareTo(image2); + + if (opt.scaleToSameSize) { + compare.scaleToSameSize(); + } + + if (typeof opt.ignore === 'string') { + applyIgnore(compare, opt.ignore); + } else if (opt.ignore && opt.ignore.forEach) { + opt.ignore.forEach(function (v) { + applyIgnore(compare, v); + }); + } + + compare.onComplete(function(data) { if (data.error) { reject(data.error); } else {