Blame src/Codec/Picture/Jpg/Metadata.hs

Packit c600df
{-# LANGUAGE CPP #-}
Packit c600df
module Codec.Picture.Jpg.Metadata ( extractMetadatas, encodeMetadatas ) where
Packit c600df
Packit c600df
#if !MIN_VERSION_base(4,8,0)
Packit c600df
import Control.Applicative( pure )
Packit c600df
import Data.Monoid( mempty )
Packit c600df
import Data.Word( Word )
Packit c600df
#endif
Packit c600df
Packit c600df
import Data.Word( Word16 )
Packit c600df
import Data.Maybe( fromMaybe )
Packit c600df
import qualified Codec.Picture.Metadata as Met
Packit c600df
import Codec.Picture.Metadata( Metadatas )
Packit c600df
import Codec.Picture.Jpg.Types
Packit c600df
Packit c600df
scalerOfUnit :: JFifUnit -> Met.Keys Word -> Word16 -> Metadatas -> Metadatas
Packit c600df
scalerOfUnit unit k v = case unit of
Packit c600df
  JFifUnitUnknown -> id
Packit c600df
  JFifPixelsPerInch -> Met.insert k (fromIntegral v)
Packit c600df
  JFifPixelsPerCentimeter ->
Packit c600df
    Met.insert k (Met.dotsPerCentiMeterToDotPerInch $ fromIntegral v)
Packit c600df
Packit c600df
extractMetadatas :: JpgJFIFApp0 -> Metadatas
Packit c600df
extractMetadatas jfif = 
Packit c600df
    inserter Met.DpiX (_jfifDpiX jfif)
Packit c600df
        $ inserter Met.DpiY (_jfifDpiY jfif) mempty
Packit c600df
  where
Packit c600df
    inserter = scalerOfUnit $ _jfifUnit jfif
Packit c600df
Packit c600df
Packit c600df
encodeMetadatas :: Metadatas -> [JpgFrame]
Packit c600df
encodeMetadatas metas = fromMaybe [] $ do
Packit c600df
  dpiX <- Met.lookup Met.DpiX metas
Packit c600df
  dpiY <- Met.lookup Met.DpiY metas
Packit c600df
  pure . pure . JpgJFIF $ JpgJFIFApp0
Packit c600df
    { _jfifUnit      = JFifPixelsPerInch
Packit c600df
    , _jfifDpiX      = fromIntegral dpiX
Packit c600df
    , _jfifDpiY      = fromIntegral dpiY
Packit c600df
    , _jfifThumbnail = Nothing
Packit c600df
    }
Packit c600df