prizm
is a Haskell library for transforming colors. Specifically, providing
functions for transforming between different color spaces (CIE
and sRGB
),
interpolating colors and adjusting the tint, shade, hue, or lightness of a
color.
The inspiration for this library came from a desire to blend two colors
represented in the sRGB
color space. My research about color blending and
color space representation in the computer led me to the conclusion that the
CIE L*Ch
color space is the most effective for blending because it most
accurately represents how the human eye sees hue and therefore preserves (and
blends) hue the most accurately.
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Convertible
import Data.Prizm.Color
import Data.Prizm.Color.CIE as CIE
main :: IO ()
main = do
-- Convert RGB colors to the CIE.LCH color space
let green :: CIE.LCH = convert $ mkRGB 102 255 0
pink :: CIE.LCH = convert $ mkRGB 255 0 255
-- Blend with a weight of 50%
blended50 = pink <~> green
-- Blend with a weight of 20%
blended20 = interpolate 20 (pink,green)
-- Print the CIE.LCH representation
putStrLn $ show blended50
-- Print the RGB representation of the blended color
putStrLn . show $ ((convert blended20) :: RGB)
-- Print the RGB color in a hexadecimal encoding
putStrLn . show $ ((convert blended20) :: HexRGB)
sRGB <-> CIE XYZ
CIE XYZ <-> CIE L*ab
CIE L*ab <-> CIE L*Ch
- Color interpolation
- Tinting / Darkening
- Lightness
- Hue
- Chroma/Saturation