{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Codec.Picture.Saving.WithMetadata
( imageToJpgWithMetadata,
imageToPngWithMetadata,
imageToBitmapWithMetadata,
)
where
import Codec.Picture.Bitmap (encodeBitmapWithMetadata)
import Codec.Picture.Jpg (encodeDirectJpegAtQualityWithMetadata, encodeJpegAtQualityWithMetadata)
import Codec.Picture.Metadata (Metadatas)
import Codec.Picture.Png (PngSavable (encodePngWithMetadata))
import Codec.Picture.Types
( ColorConvertible (promoteImage),
ColorSpaceConvertible (convertImage),
DynamicImage (..),
Image (..),
Pixel (PixelBaseComponent),
Pixel8,
PixelF,
PixelRGB16,
PixelRGB8 (..),
PixelRGBA8,
PixelRGBF (..),
dropAlphaLayer,
pixelMap,
)
import Data.Bits (unsafeShiftR)
import qualified Data.ByteString.Lazy as L
import qualified Data.Vector.Storable as V
import Data.Word (Word16, Word32, Word8)
componentToLDR :: Float -> Word8
componentToLDR :: Float -> Word8
componentToLDR = Float -> Word8
forall b. Integral b => Float -> b
forall a b. (RealFrac a, Integral b) => a -> b
truncate (Float -> Word8) -> (Float -> Float) -> Float -> Word8
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Float
255 Float -> Float -> Float
forall a. Num a => a -> a -> a
*) (Float -> Float) -> (Float -> Float) -> Float -> Float
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Float -> Float
forall a. Ord a => a -> a -> a
min Float
1.0 (Float -> Float) -> (Float -> Float) -> Float -> Float
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Float -> Float
forall a. Ord a => a -> a -> a
max Float
0.0
toStandardDef :: Image PixelRGBF -> Image PixelRGB8
toStandardDef :: Image PixelRGBF -> Image PixelRGB8
toStandardDef = (PixelRGBF -> PixelRGB8) -> Image PixelRGBF -> Image PixelRGB8
forall a b. (Pixel a, Pixel b) => (a -> b) -> Image a -> Image b
pixelMap PixelRGBF -> PixelRGB8
pixelConverter
where
pixelConverter :: PixelRGBF -> PixelRGB8
pixelConverter (PixelRGBF Float
rf Float
gf Float
bf) = Word8 -> Word8 -> Word8 -> PixelRGB8
PixelRGB8 Word8
r Word8
g Word8
b
where
r :: Word8
r = Float -> Word8
componentToLDR Float
rf
g :: Word8
g = Float -> Word8
componentToLDR Float
gf
b :: Word8
b = Float -> Word8
componentToLDR Float
bf
greyScaleToStandardDef :: Image PixelF -> Image Pixel8
greyScaleToStandardDef :: Image Float -> Image Word8
greyScaleToStandardDef = (Float -> Word8) -> Image Float -> Image Word8
forall a b. (Pixel a, Pixel b) => (a -> b) -> Image a -> Image b
pixelMap Float -> Word8
componentToLDR
from16to8 ::
( PixelBaseComponent source ~ Word16,
PixelBaseComponent dest ~ Word8
) =>
Image source ->
Image dest
from16to8 :: forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8
Image
{ imageWidth :: forall a. Image a -> Int
imageWidth = Int
w,
imageHeight :: forall a. Image a -> Int
imageHeight = Int
h,
imageData :: forall a. Image a -> Vector (PixelBaseComponent a)
imageData = Vector (PixelBaseComponent source)
arr
} = Int -> Int -> Vector (PixelBaseComponent dest) -> Image dest
forall a. Int -> Int -> Vector (PixelBaseComponent a) -> Image a
Image Int
w Int
h Vector Word8
Vector (PixelBaseComponent dest)
transformed
where
transformed :: Vector Word8
transformed = (Pixel16 -> Word8) -> Vector Pixel16 -> Vector Word8
forall a b.
(Storable a, Storable b) =>
(a -> b) -> Vector a -> Vector b
V.map Pixel16 -> Word8
forall {a} {b}. (Integral a, Bits a, Num b) => a -> b
toWord8 Vector Pixel16
Vector (PixelBaseComponent source)
arr
toWord8 :: a -> b
toWord8 a
v = a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a
v a -> Int -> a
forall a. Bits a => a -> Int -> a
`unsafeShiftR` Int
8)
from32to8 ::
( PixelBaseComponent source ~ Word32,
PixelBaseComponent dest ~ Word8
) =>
Image source ->
Image dest
from32to8 :: forall source dest.
(PixelBaseComponent source ~ Pixel32,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from32to8
Image
{ imageWidth :: forall a. Image a -> Int
imageWidth = Int
w,
imageHeight :: forall a. Image a -> Int
imageHeight = Int
h,
imageData :: forall a. Image a -> Vector (PixelBaseComponent a)
imageData = Vector (PixelBaseComponent source)
arr
} = Int -> Int -> Vector (PixelBaseComponent dest) -> Image dest
forall a. Int -> Int -> Vector (PixelBaseComponent a) -> Image a
Image Int
w Int
h Vector Word8
Vector (PixelBaseComponent dest)
transformed
where
transformed :: Vector Word8
transformed = (Pixel32 -> Word8) -> Vector Pixel32 -> Vector Word8
forall a b.
(Storable a, Storable b) =>
(a -> b) -> Vector a -> Vector b
V.map Pixel32 -> Word8
forall {a} {b}. (Integral a, Bits a, Num b) => a -> b
toWord8 Vector Pixel32
Vector (PixelBaseComponent source)
arr
toWord8 :: a -> b
toWord8 a
v = a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a
v a -> Int -> a
forall a. Bits a => a -> Int -> a
`unsafeShiftR` Int
24)
from32to16 ::
( PixelBaseComponent source ~ Word32,
PixelBaseComponent dest ~ Word16
) =>
Image source ->
Image dest
from32to16 :: forall source dest.
(PixelBaseComponent source ~ Pixel32,
PixelBaseComponent dest ~ Pixel16) =>
Image source -> Image dest
from32to16
Image
{ imageWidth :: forall a. Image a -> Int
imageWidth = Int
w,
imageHeight :: forall a. Image a -> Int
imageHeight = Int
h,
imageData :: forall a. Image a -> Vector (PixelBaseComponent a)
imageData = Vector (PixelBaseComponent source)
arr
} = Int -> Int -> Vector (PixelBaseComponent dest) -> Image dest
forall a. Int -> Int -> Vector (PixelBaseComponent a) -> Image a
Image Int
w Int
h Vector Pixel16
Vector (PixelBaseComponent dest)
transformed
where
transformed :: Vector Pixel16
transformed = (Pixel32 -> Pixel16) -> Vector Pixel32 -> Vector Pixel16
forall a b.
(Storable a, Storable b) =>
(a -> b) -> Vector a -> Vector b
V.map Pixel32 -> Pixel16
forall {a} {b}. (Integral a, Bits a, Num b) => a -> b
toWord16 Vector Pixel32
Vector (PixelBaseComponent source)
arr
toWord16 :: a -> b
toWord16 a
v = a -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a
v a -> Int -> a
forall a. Bits a => a -> Int -> a
`unsafeShiftR` Int
16)
imageToJpgWithMetadata :: Int -> Metadatas -> DynamicImage -> L.ByteString
imageToJpgWithMetadata :: Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta DynamicImage
dynImage =
let encodeAtQuality :: Image PixelYCbCr8 -> ByteString
encodeAtQuality = Word8 -> Metadatas -> Image PixelYCbCr8 -> ByteString
encodeJpegAtQualityWithMetadata (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
quality) Metadatas
meta
encodeWithMeta :: Image Word8 -> ByteString
encodeWithMeta = Word8 -> Metadatas -> Image Word8 -> ByteString
forall px.
JpgEncodable px =>
Word8 -> Metadatas -> Image px -> ByteString
encodeDirectJpegAtQualityWithMetadata (Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
quality) Metadatas
meta
in case DynamicImage
dynImage of
ImageYCbCr8 Image PixelYCbCr8
img -> Image PixelYCbCr8 -> ByteString
encodeAtQuality Image PixelYCbCr8
img
ImageCMYK8 Image PixelCMYK8
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB8 -> DynamicImage)
-> Image PixelRGB8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB8 -> DynamicImage
ImageRGB8 (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelCMYK8 -> Image PixelRGB8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK8
img
ImageCMYK16 Image PixelCMYK16
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB16 -> DynamicImage)
-> Image PixelRGB16
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB16 -> DynamicImage
ImageRGB16 (Image PixelRGB16 -> ByteString) -> Image PixelRGB16 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelCMYK16 -> Image PixelRGB16
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK16
img
ImageRGB8 Image PixelRGB8
img -> Image PixelYCbCr8 -> ByteString
encodeAtQuality (Image PixelRGB8 -> Image PixelYCbCr8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelRGB8
img)
ImageRGBF Image PixelRGBF
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB8 -> DynamicImage)
-> Image PixelRGB8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB8 -> DynamicImage
ImageRGB8 (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGBF -> Image PixelRGB8
toStandardDef Image PixelRGBF
img
ImageRGBA8 Image PixelRGBA8
img -> Image PixelYCbCr8 -> ByteString
encodeAtQuality (Image PixelRGB8 -> Image PixelYCbCr8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage (Image PixelRGB8 -> Image PixelYCbCr8)
-> Image PixelRGB8 -> Image PixelYCbCr8
forall a b. (a -> b) -> a -> b
$ Image PixelRGBA8 -> Image PixelRGB8
forall a b. TransparentPixel a b => Image a -> Image b
dropAlphaLayer Image PixelRGBA8
img)
ImageYF Image Float
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image Word8 -> DynamicImage) -> Image Word8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Word8 -> DynamicImage
ImageY8 (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Float -> Image Word8
greyScaleToStandardDef Image Float
img
ImageY8 Image Word8
img -> Image Word8 -> ByteString
encodeWithMeta Image Word8
img
ImageYA8 Image PixelYA8
img -> Image Word8 -> ByteString
encodeWithMeta (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelYA8 -> Image Word8
forall a b. TransparentPixel a b => Image a -> Image b
dropAlphaLayer Image PixelYA8
img
ImageY16 Image Pixel16
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image Word8 -> DynamicImage) -> Image Word8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Word8 -> DynamicImage
ImageY8 (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Pixel16 -> Image Word8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image Pixel16
img
ImageYA16 Image PixelYA16
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelYA8 -> DynamicImage) -> Image PixelYA8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelYA8 -> DynamicImage
ImageYA8 (Image PixelYA8 -> ByteString) -> Image PixelYA8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelYA16 -> Image PixelYA8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelYA16
img
ImageY32 Image Pixel32
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image Word8 -> DynamicImage) -> Image Word8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Word8 -> DynamicImage
ImageY8 (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Pixel32 -> Image Word8
forall source dest.
(PixelBaseComponent source ~ Pixel32,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from32to8 Image Pixel32
img
ImageRGB16 Image PixelRGB16
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB8 -> DynamicImage)
-> Image PixelRGB8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB8 -> DynamicImage
ImageRGB8 (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGB16 -> Image PixelRGB8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelRGB16
img
ImageRGBA16 Image PixelRGBA16
img -> Int -> Metadatas -> DynamicImage -> ByteString
imageToJpgWithMetadata Int
quality Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGBA8 -> DynamicImage)
-> Image PixelRGBA8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGBA8 -> DynamicImage
ImageRGBA8 (Image PixelRGBA8 -> ByteString) -> Image PixelRGBA8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGBA16 -> Image PixelRGBA8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelRGBA16
img
imageToPngWithMetadata :: Metadatas -> DynamicImage -> L.ByteString
imageToPngWithMetadata :: Metadatas -> DynamicImage -> ByteString
imageToPngWithMetadata Metadatas
meta (ImageYCbCr8 Image PixelYCbCr8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta (Image PixelYCbCr8 -> Image PixelRGB8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelYCbCr8
img :: Image PixelRGB8)
imageToPngWithMetadata Metadatas
meta (ImageCMYK8 Image PixelCMYK8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta (Image PixelCMYK8 -> Image PixelRGB8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK8
img :: Image PixelRGB8)
imageToPngWithMetadata Metadatas
meta (ImageCMYK16 Image PixelCMYK16
img) = Metadatas -> Image PixelRGB16 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta (Image PixelCMYK16 -> Image PixelRGB16
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK16
img :: Image PixelRGB16)
imageToPngWithMetadata Metadatas
meta (ImageRGB8 Image PixelRGB8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelRGB8
img
imageToPngWithMetadata Metadatas
meta (ImageRGBF Image PixelRGBF
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGBF -> Image PixelRGB8
toStandardDef Image PixelRGBF
img
imageToPngWithMetadata Metadatas
meta (ImageRGBA8 Image PixelRGBA8
img) = Metadatas -> Image PixelRGBA8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelRGBA8
img
imageToPngWithMetadata Metadatas
meta (ImageY8 Image Word8
img) = Metadatas -> Image Word8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image Word8
img
imageToPngWithMetadata Metadatas
meta (ImageYF Image Float
img) = Metadatas -> Image Word8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Float -> Image Word8
greyScaleToStandardDef Image Float
img
imageToPngWithMetadata Metadatas
meta (ImageYA8 Image PixelYA8
img) = Metadatas -> Image PixelYA8 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelYA8
img
imageToPngWithMetadata Metadatas
meta (ImageY16 Image Pixel16
img) = Metadatas -> Image Pixel16 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image Pixel16
img
imageToPngWithMetadata Metadatas
meta (ImageY32 Image Pixel32
img) = Metadatas -> DynamicImage -> ByteString
imageToPngWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image Pixel16 -> DynamicImage) -> Image Pixel16 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Pixel16 -> DynamicImage
ImageY16 (Image Pixel16 -> ByteString) -> Image Pixel16 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Pixel32 -> Image Pixel16
forall source dest.
(PixelBaseComponent source ~ Pixel32,
PixelBaseComponent dest ~ Pixel16) =>
Image source -> Image dest
from32to16 Image Pixel32
img
imageToPngWithMetadata Metadatas
meta (ImageYA16 Image PixelYA16
img) = Metadatas -> Image PixelYA16 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelYA16
img
imageToPngWithMetadata Metadatas
meta (ImageRGB16 Image PixelRGB16
img) = Metadatas -> Image PixelRGB16 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelRGB16
img
imageToPngWithMetadata Metadatas
meta (ImageRGBA16 Image PixelRGBA16
img) = Metadatas -> Image PixelRGBA16 -> ByteString
forall a. PngSavable a => Metadatas -> Image a -> ByteString
encodePngWithMetadata Metadatas
meta Image PixelRGBA16
img
imageToBitmapWithMetadata :: Metadatas -> DynamicImage -> L.ByteString
imageToBitmapWithMetadata :: Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (ImageYCbCr8 Image PixelYCbCr8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta (Image PixelYCbCr8 -> Image PixelRGB8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelYCbCr8
img :: Image PixelRGB8)
imageToBitmapWithMetadata Metadatas
meta (ImageCMYK8 Image PixelCMYK8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta (Image PixelCMYK8 -> Image PixelRGB8
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK8
img :: Image PixelRGB8)
imageToBitmapWithMetadata Metadatas
meta (ImageCMYK16 Image PixelCMYK16
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB16 -> DynamicImage)
-> Image PixelRGB16
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB16 -> DynamicImage
ImageRGB16 (Image PixelRGB16 -> ByteString) -> Image PixelRGB16 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelCMYK16 -> Image PixelRGB16
forall a b. ColorSpaceConvertible a b => Image a -> Image b
convertImage Image PixelCMYK16
img
imageToBitmapWithMetadata Metadatas
meta (ImageRGBF Image PixelRGBF
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGBF -> Image PixelRGB8
toStandardDef Image PixelRGBF
img
imageToBitmapWithMetadata Metadatas
meta (ImageRGB8 Image PixelRGB8
img) = Metadatas -> Image PixelRGB8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta Image PixelRGB8
img
imageToBitmapWithMetadata Metadatas
meta (ImageRGBA8 Image PixelRGBA8
img) = Metadatas -> Image PixelRGBA8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta Image PixelRGBA8
img
imageToBitmapWithMetadata Metadatas
meta (ImageY8 Image Word8
img) = Metadatas -> Image Word8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta Image Word8
img
imageToBitmapWithMetadata Metadatas
meta (ImageYF Image Float
img) = Metadatas -> Image Word8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Float -> Image Word8
greyScaleToStandardDef Image Float
img
imageToBitmapWithMetadata Metadatas
meta (ImageYA8 Image PixelYA8
img) = Metadatas -> Image PixelRGBA8 -> ByteString
forall pixel.
BmpEncodable pixel =>
Metadatas -> Image pixel -> ByteString
encodeBitmapWithMetadata Metadatas
meta (Image PixelYA8 -> Image PixelRGBA8
forall a b. ColorConvertible a b => Image a -> Image b
promoteImage Image PixelYA8
img :: Image PixelRGBA8)
imageToBitmapWithMetadata Metadatas
meta (ImageY16 Image Pixel16
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image Word8 -> DynamicImage) -> Image Word8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Word8 -> DynamicImage
ImageY8 (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Pixel16 -> Image Word8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image Pixel16
img
imageToBitmapWithMetadata Metadatas
meta (ImageY32 Image Pixel32
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image Word8 -> DynamicImage) -> Image Word8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image Word8 -> DynamicImage
ImageY8 (Image Word8 -> ByteString) -> Image Word8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image Pixel32 -> Image Word8
forall source dest.
(PixelBaseComponent source ~ Pixel32,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from32to8 Image Pixel32
img
imageToBitmapWithMetadata Metadatas
meta (ImageYA16 Image PixelYA16
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelYA8 -> DynamicImage) -> Image PixelYA8 -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelYA8 -> DynamicImage
ImageYA8 (Image PixelYA8 -> ByteString) -> Image PixelYA8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelYA16 -> Image PixelYA8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelYA16
img
imageToBitmapWithMetadata Metadatas
meta (ImageRGB16 Image PixelRGB16
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGB8 -> DynamicImage)
-> Image PixelRGB8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGB8 -> DynamicImage
ImageRGB8 (Image PixelRGB8 -> ByteString) -> Image PixelRGB8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGB16 -> Image PixelRGB8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelRGB16
img
imageToBitmapWithMetadata Metadatas
meta (ImageRGBA16 Image PixelRGBA16
img) = Metadatas -> DynamicImage -> ByteString
imageToBitmapWithMetadata Metadatas
meta (DynamicImage -> ByteString)
-> (Image PixelRGBA8 -> DynamicImage)
-> Image PixelRGBA8
-> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Image PixelRGBA8 -> DynamicImage
ImageRGBA8 (Image PixelRGBA8 -> ByteString) -> Image PixelRGBA8 -> ByteString
forall a b. (a -> b) -> a -> b
$ Image PixelRGBA16 -> Image PixelRGBA8
forall source dest.
(PixelBaseComponent source ~ Pixel16,
PixelBaseComponent dest ~ Word8) =>
Image source -> Image dest
from16to8 Image PixelRGBA16
img