Convert colors to different color spaces, interpolate colors, and transform colors
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 theCIE 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
Example blending with CIELCH converted back to RGB.