Promise-based image perceptual hash calculation for node.
npm install imghash
:information_source: You can find the command-line interface here.
const imghash = require("imghash");
const hash1 = await imghash.hash("./path/to/file");
console.log(hash1); // "f884c4d8d1193c07"
// Custom hex length and result in binary
const hash2 = await imghash.hash("./path/to/file", 4, "binary");
console.log(hash2); // "1000100010000010"
To measure similarity between images you can use Hamming distance or Levenshtein Distance.
The following example uses the latter one:
const imghash = require("imghash");
const leven = require("leven");
const hash1 = await imghash.hash("./img1");
const hash2 = await imghash.hash("./img2");
const distance = leven(hash1, hash2);
console.log(`Distance between images is: ${distance}`);
if (distance <= 12) {
console.log("Images are similar");
} else {
console.log("Images are NOT similar");
}
.hash(filepath[, bits][, format])
Returns: ES6 Promise
, resolved returns hash string in specified format and length (eg. f884c4d8d1193c07
)
Parameters:
filepath
- path to the image (supported formats are png
and jpeg
) or Buffer
bits
(optional) - hash length [default: 8
]format
(optional) - output format [default: hex
].hashRaw(data, bits)
Returns: hex hash
Parameters:
data
- image data descriptor in form { width: [width], height: [height], data: [decoded image pixels] }
bits
- hash length.hexToBinary(s)
Returns: hex string, eg. f884c4d8d1193c07
.
Parameters:
s
- binary hash string eg. 1000100010000010
.binaryToHex(s)
Returns: hex string, eg. 1000100010000010
.
Parameters:
s
- hex hash string eg. f884c4d8d1193c07
imghash
takes advantage of block mean value based hashing method: