#image #hash #perceptual #difference

bin+lib img_hash_median

A simple library that provides perceptual hashing and difference calculation for images. Includes median PHash

1 stable release

Uses old Rust 2015

4.0.0 Oct 26, 2020

#5 in #perceptual

Download history 40/week @ 2021-10-06 62/week @ 2021-10-13 101/week @ 2021-10-20 133/week @ 2021-10-27 80/week @ 2021-11-03 52/week @ 2021-11-10 43/week @ 2021-11-17 48/week @ 2021-11-24 126/week @ 2021-12-01 68/week @ 2021-12-08 41/week @ 2021-12-15 24/week @ 2021-12-22 31/week @ 2021-12-29 32/week @ 2022-01-05 60/week @ 2022-01-12 39/week @ 2022-01-19

164 downloads per month
Used in 2 crates (via sn0int-std)


718 lines

img_hash Build Status Crates.io shield

Now builds on stable Rust! (But needs nightly to bench.)

A library for getting perceptual hash values of images.

Thanks to Dr. Neal Krawetz for the outlines of the Mean (aHash), Gradient (dHash), and DCT (pHash) perceptual hash algorithms:
http://www.hackerfactor.com/blog/?/archives/432-Looks-Like-It.html (Accessed August 2014)

Also provides an implementation of the Blockhash.io algorithm.

This crate can operate directly on buffers from the PistonDevelopers/image crate.



Add img_hash to your Cargo.toml:

version = "3.0"

Example program:

 extern crate image;
 extern crate img_hash;
 use img_hash::{HasherConfig, HashAlg};

 fn main() {
     let image1 = image::open("image1.png").unwrap();
     let image2 = image::open("image2.png").unwrap();
     let hasher = HasherConfig::new().to_hasher();

     let hash1 = hasher.hash_image(&image1);
     let hash2 = hasher.hash_image(&image2);
     println!("Image1 hash: {}", hash1.to_base64());
     println!("Image2 hash: {}", hash2.to_base64());
     println!("Hamming Distance: {}", hash1.dist(&hash2));


In order to build and test on Rust stable, the benchmarks have to be placed behind a feature gate. If you have Rust nightly installed and want to run benchmarks, use the following command:

cargo bench --features bench


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~111K SLoC