I'm pleased to announce the first release of blockhash, a perceptual image hash calculation tool based on algorithm described in Block Mean Value Based Image Perceptual Hashing by Bian Yang, Fan Gu and Xiamu Niu.
Usage: blockhash [-q|--quick] [-b|--bits ARG] filenames
blockhash
Available options:
-h,--help Show this help text
-q,--quick Use quick hashing method
-b,--bits ARG Create hash of size N^2 bits.
import qualified Codec.Picture as P
import Data.Blockhash
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Unboxed as V
printHash :: FilePath -> IO ()
printHash :: filename = do
res <- P.readImage filename
case res of
Left err -> putStrLn ("Fail to read: " ++ filename)
Right dynamicImage -> do
let rgbaImage = P.convertRGBA8 dynamicImage
pixels = VG.convert (P.imageData rgbaImage)
image = Image { imagePixels = pixels
, imageWidth = P.imageWidth rgbaImage
, imageHeight = P.imageHeight rgbaImage }
hash = blockhash image 16 Precise
putStrLn (show hash)