SkillAgentSearch skills...

Blockhash

Haskell implementation of Blockhash perceptual image hash algorithm

Install / Use

/learn @kseo/Blockhash
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

blockhash Hackage

This is 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. Visit the website for further information.

Installation

From Hackage

cabal install blockhash

From source

stack build

Program

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.

Library

The library exposes the Data.Blockhash module with the following API:

  • blockhash - Calculate perceptual hash for an RGBA image
  • hammingDistance - Calculate the hamming distance between two hashes
  • Image - Image data type (width, height, RGBA pixels)
  • Hash - Hash result type
  • Method - Hashing method (Precise or Quick)

The example code below uses JuicyPixels to load images and prints the hash to stdout.

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)

Related Skills

View on GitHub
GitHub Stars8
CategoryDevelopment
Updated14d ago
Forks2

Languages

Haskell

Security Score

85/100

Audited on Mar 22, 2026

No findings