module Codec.Audio.FLAC.Metadata.Picture
( retrieveImage
, writeJpegPicture
, writePngPicture )
where
import Codec.Audio.FLAC.Metadata
import Codec.Picture
import Data.Word
import qualified Data.ByteString.Lazy as BL
retrieveImage
:: PictureType
-> FlacMeta (Either String DynamicImage)
retrieveImage pictureType = do
mpicture <- retrieve (Picture pictureType)
case mpicture of
Nothing -> return (Left "Picture not found")
Just picture -> (return . decodeImage . pictureData) picture
writeJpegPicture
:: PictureType
-> Word8
-> Image PixelYCbCr8
-> FlacMeta ()
writeJpegPicture pictureType q image =
Picture pictureType =-> Just PictureData
{ pictureMimeType = "image/jpeg"
, pictureDescription = ""
, pictureWidth = fromIntegral (imageWidth image)
, pictureHeight = fromIntegral (imageHeight image)
, pictureDepth = 24
, pictureColors = 0
, pictureData = BL.toStrict (encodeJpegAtQuality q image)
}
writePngPicture
:: PictureType
-> Image PixelRGB8
-> FlacMeta ()
writePngPicture pictureType image =
Picture pictureType =-> Just PictureData
{ pictureMimeType = "image/png"
, pictureDescription = ""
, pictureWidth = fromIntegral (imageWidth image)
, pictureHeight = fromIntegral (imageHeight image)
, pictureDepth = 24
, pictureColors = 0
, pictureData = BL.toStrict (encodePng image)
}