Promise-based image perceptual hash calculation for node.
npm install imghash
const imghash = require('imghash');
imghash
.hash('path/to/file')
.then((hash) => {
console.log(hash); // 'f884c4d8d1193c07'
});
// Custom hex length and result in binary
imghash
.hash('path/to/file', 4, 'binary')
.then((hash) => {
console.log(hash); // '1000100010000010'
});
To measure similarity between images you can use Hamming distance or Levenshtein Distance. Here's an example of using the first one:
const imghash = require('imghash');
const hamming = require('hamming-distance');
const hash1 = imghash.hash('./img1');
const hash2 = imghash.hash('./img2');
Promise
.all([hash1, hash2])
.then((results) => {
const dist = hamming(results[0], results[1]);
console.log(`Distance between images is: ${dist}`);
if (dist <= 20) {
console.log('Images are similar');
} else {
console.log('Images are NOT similar');
}
});
Returns: ES6 Promise
, resolved returns hash string in specified format and length (eg. f884c4d8d1193c07
)
Parameters:
filepath
- path to the image (supported formats arepng
andjpeg
) orBuffer
bits
(optional) - hash length [default:8
]format
(optional) - output format [default:hex
]
===
Returns: hex hash
Parameters:
data
- image data descriptor in form{ width: [width], height: [height], data: [decoded image pixels] }
bits
- hash length
===
Returns: hex string, eg. f884c4d8d1193c07
.
Parameters:
s
- binary hash string eg.1000100010000010
===
Returns: hex string, eg. 1000100010000010
.
Parameters:
s
- hex hash string eg.f884c4d8d1193c07
imghash
takes advantage of block mean value based hashing method: