module Main (main) where import Codec.Picture (convertRGBA8, readImage, writePng) import Codec.Picture.ScaleDCT (scale, scaleWithKernel) import Data.Time (diffUTCTime, getCurrentTime) processImage :: String -- ^ From -> (Int, Int) -- ^ Target size -> String -- ^ To -> Maybe (Int -> Int -> Double) -- ^ kernel -> IO () processImage src size dst mk = do let scale' = maybe (scale size) (scaleWithKernel size) mk start <- getCurrentTime eimg <- readImage src case eimg of Left err -> print err Right dimg -> do let img = convertRGBA8 dimg let ava = scale' img writePng dst ava end <- getCurrentTime putStrLn $ dst ++ ": " ++ show (end `diffUTCTime` start) main :: IO () main = do processImage "cat.jpg" (96, 64) "cat-small.png" Nothing processImage "cat.jpg" (769, 512) "cat-large.png" Nothing processImage "phadej.png" (32, 32) "phadej-smaller.png" (Just k) processImage "phadej.png" (64, 64) "phadej-small.png" (Just k) processImage "phadej.png" (600, 600) "phadej-large.png" Nothing where k 0 0 = 2.75 -- make this larger or smaller to adjust amount of an effect. k 0 1 = -0.125 k 1 0 = -0.125 k 1 1 = -0.0625 k _ _ = 0