|
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 |
|