-------------------------------------------------------------------- -- | -- Module : scale an image -- Copyright : (c) Galois, Inc. 2008 -- License : BSD3 -- -- Maintainer: Don Stewart -- Stability : provisional -- Portability: -- -------------------------------------------------------------------- import System.Environment import System.IO import System.Exit import Data.Char import System.FilePath import Graphics.GD main = do args <- getArgs (x,y,f,g) <- case args of [sx,sy,f,g] -> case do x <- maybeRead sx y <- maybeRead sx Just (x,y,f,g) of Nothing -> die Just g -> return g _ -> die load <- case map toLower (takeExtension f) of ".jpg" -> return loadJpegFile ".jpeg" -> return loadJpegFile ".png" -> return loadPngFile ".gif" -> return loadGifFile _ -> die save <- case map toLower (takeExtension g) of ".jpg" -> return (saveJpegFile 95) ".jpeg" -> return (saveJpegFile 95) ".png" -> return savePngFile ".gif" -> return saveGifFile _ -> die image <- load f image' <- resizeImage x y image save g image' ------------------------------------------------------------------------ die :: IO a die = do hPutStrLn stderr "Usage: scaleimage input.[png,gif,jpg] output.[png,gif,jpg]" exitWith (ExitFailure 1) maybeRead :: Read a => String -> Maybe a maybeRead s = case reads s of [(x, "")] -> Just x _ -> Nothing