module Image (convertedSize, Size(..)) where
import Control.Arrow
import Image.PNG (isPNG, pngSize)
import Image.JPG (isJPG, jpgSize)
import Image.SVG (isSVG, svgSize)
data Size = Small | Medium | Large deriving Show
imageSize :: String -> Maybe (Double, Double)
imageSize src = case (isPNG src, isJPG src, isSVG src) of
(True, _, _) -> pngSize src
(_, True, _) -> jpgSize src
(_, _, True) -> svgSize src
_ -> Nothing
convertedSize :: String -> Size -> Maybe (Double, Double)
convertedSize src sml = case imageSize src of
Just sz -> Just $ convert sz sml
_ -> Nothing
root2 :: Double
root2 = 2 ** (1 / 2)
convert :: (Double, Double) -> Size -> (Double, Double)
convert (w, h) Large
| w * root2 > h = (1, h / w)
| otherwise = (w * root2 / h, root2)
convert sz Medium = (/ 3) *** (/ 3) $ convert sz Large
convert sz Small = (/ 10) *** (/ 10) $ convert sz Large