identicon: Flexible generation of identicons

[ bsd3, graphics, image, library ] [ Propose Tags ] [ Report a vulnerability ]

Flexible generation of identicons.


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
dev

Turn on development settings.

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0, 0.2.0, 0.2.1, 0.2.2, 0.2.3
Change log CHANGELOG.md
Dependencies base (>=4.15 && <5), bytestring (>=0.10.6 && <0.13), JuicyPixels (>=3.2.6.5 && <4) [details]
Tested with ghc ==9.4.7, ghc ==9.6.3, ghc ==9.8.1
License BSD-3-Clause
Author Mark Karpov <markkarpov92@gmail.com>
Maintainer Mark Karpov <markkarpov92@gmail.com>
Revised Revision 1 made by mrkkrp at 2025-01-09T08:22:42Z
Category Graphics, Image
Home page https://github.com/mrkkrp/identicon
Bug tracker https://github.com/mrkkrp/identicon/issues
Source repo head: git clone https://github.com/mrkkrp/identicon.git
Uploaded by mrkkrp at 2023-12-29T09:59:22Z
Distributions LTSHaskell:0.2.3, NixOS:0.2.3, Stackage:0.2.3
Reverse Dependencies 2 direct, 0 indirect [details]
Downloads 3919 total (29 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2023-12-29 [all 1 reports]

Readme for identicon-0.2.3

[back to package description]

Identicon

License BSD3 Hackage Stackage Nightly Stackage LTS CI

The package implements a flexible framework for generation of identicons on top of Juicy Pixels.

Quick start

To use the package you usually need the following imports and language extensions:

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}

import Codec.Picture -- JuicyPixels
import Data.ByteString (ByteString) -- we use strict byte strings
import Data.Proxy
import Data.Word (Word8)
import Graphics.Identicon -- core definitions
import Graphics.Identicon.Primitive -- some visual primitives

You first write a type that represents the total number of bytes your identicon consumes and the number of distinct visual components it has (they are called “layers” in the terminology of the package):

type MyIcon = Identicon 12 :+ Consumer 4 :+ Consumer 4 :+ Consumer 4

Here we have an identicon that needs 12 bytes to be generated. It has three consumers that take 4 bytes each and generate layers, i.e. visual objects (circles, squares, etc.).

The second step is to write implementation of every layer. We can use the primitives available out-of-the-box, they live in the Graphics.Identicon.Primitive module:

myImpl :: Implementation MyIcon
myImpl = Identicon :+ a :+ a :+ a
  where
    a :: Word8 -> Word8 -> Word8 -> Word8 -> Layer
    a r g b n =
      rsym $ onGrid 3 3 n $
        gradientXY (edge . mid) black (PixelRGB8 r g b)

Every byte is available to the layer-generating function as a distinct Word8 argument. The type system makes sure that:

  • you consume exactly as many bytes as you promised in the type of your identicon;

  • you have as many layers as you have described in the type of your identicon;

  • every function in your implementation has a correct signature (i.e. it takes as many Word8s as promised and produces a Layer in the end).

Mixing of layers and generation is handled by the library like this:

-- | Here is the function that generates your identicons. It's usually
-- convenient to wrap the 'renderIdenticon' function that comes with the
-- library.
genMyIdenticon ::
  -- | Identicon width
  Int ->
  -- | Identicon height
  Int ->
  -- | Input (some sort of hash or something)
  ByteString ->
  -- | Identicon, unless 'ByteString' is too short
  Maybe (Image PixelRGB8)
genMyIdenticon = renderIdenticon (Proxy :: Proxy MyIcon) myImpl

For more information head straight to the Haddocks. BTW, I have written a blog post about the package where I demonstrate some pictures generated with it.

The following packages are designed to be used with identicon:

Contribution

Issues, bugs, and questions may be reported in the GitHub issue tracker for this project.

Pull requests are also welcome.

License

Copyright © 2016–present Mark Karpov

Distributed under BSD 3 clause license.