Skip to content

Instantly share code, notes, and snippets.

@TuHuynhVan
Created August 17, 2017 16:18
Show Gist options
  • Save TuHuynhVan/4bf1c884b762e3f7f556934017d7d8a9 to your computer and use it in GitHub Desktop.
Save TuHuynhVan/4bf1c884b762e3f7f556934017d7d8a9 to your computer and use it in GitHub Desktop.
/**
* Created by Tu Huynh on 8/17/2017.
*/
let resemble = require('node-resemble-js')
, fs = require('fs')
, jimp = require("jimp")
, shell = require('shelljs');
class ImageProcessing {
static getDeviceScreenInfo(udid) {
let deviceDensity = shell.exec(`adb -s ${udid} shell wm density`, {async: false, silent: true}).stdout;
let deviceResolution = shell.exec(`adb -s ${udid} shell wm size`, {async: false, silent: true}).stdout;
let deviceScreenInfo = {};
deviceScreenInfo.density = deviceDensity.replace("Physical density: ", "").trim();
deviceScreenInfo.resolution = deviceResolution.replace("Physical size: ", "").trim();
return deviceScreenInfo;
}
static crop(inputFile, left, top, right, bottom, outputFile, deviceInfo, screenName) {
let folders = {
diffFolderPath: 'screenshots/diff/',
referenceFolderPath: 'screenshots/reference/',
screenFolderPath: 'screenshots/screen/'
};
let takenImageName = `${deviceInfo.resolution}_${deviceInfo.density}_${screenName}.png`;
this.createFolders();
return new Promise((resolve, reject) => {
jimp.read(inputFile, function (err, image) {
if (err) {
reject(err);
return;
}
image
.crop(left, top, right, bottom)
.write(outputFile, (err, image) => {
resolve(image);
if (!fs.existsSync(`${folders.referenceFolderPath}${takenImageName}`)) {
shell.cp(`${folders.screenFolderPath}${takenImageName}`, `${folders.referenceFolderPath}`);
}
});
});
});
}
static compare(targetImage, referenceImage, errorImageName) {
return new Promise((resolve) => {
resemble(targetImage)
.compareTo(referenceImage)
.onComplete(function (data) {
if (data.misMatchPercentage <= 0.01) {
resolve(data);
}
else {
data.getDiffImage().pack().pipe(fs.createWriteStream(errorImageName));
resolve(data);
}
});
});
}
static createFolders() {
let folderArray = [];
folderArray.push("screenshots/diff/");
folderArray.push("screenshots/reference/");
folderArray.push("screenshots/screen/");
folderArray.forEach((dir) => {
if (!fs.existsSync(dir)) {
shell.mkdir('-p', dir);
}
});
}
}
module.exports = ImageProcessing;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment