在Haskell中用于内存中图像数据的类型是什么?

时间:2013-01-07 08:10:26

标签: haskell types

我正在尝试对data Photo进行建模,并想知道图像数据使用的是什么类型:

> data Photo =
>   Photo
>   { photoUploaderId :: AccountId
>   , photoWidth :: Int
>   , photoHeight :: Int
>   , photoData :: ByteString
>   }

我在这里使用Data.ByteString。还有更好的选择吗?

背景:我将把图像数据存储在数据库中,并通过网络连接检索和发送它。在第一次将照片插入数据库时​​,我可能需要稍微操作一下,比如缩放等。

1 个答案:

答案 0 :(得分:6)

一般来说,UArray是一个不错的选择。这取决于照片格式,你将如何阅读图像,以及你用它做什么样的处理。我发现Codec.Image.DevIL库对于照片处理很方便。这是将JPEG图像转换为PNG的示例。

import Codec.Image.DevIL

main = do
  ilInit
  img <- readImage "test.jpeg"
  writeImage "test.png" img 

readImage函数具有此签名。

readImage :: FilePath -> IO (UArray (Int, Int, Int) Word8)

它返回一个RGBA数组。指数是(行,列,颜色通道)。因此,如果您打算使用该库,IO (UArray (Int, Int, Int) Word8)将是一个不错的选择。