我正在尝试对data Photo
进行建模,并想知道图像数据使用的是什么类型:
> data Photo =
> Photo
> { photoUploaderId :: AccountId
> , photoWidth :: Int
> , photoHeight :: Int
> , photoData :: ByteString
> }
我在这里使用Data.ByteString
。还有更好的选择吗?
背景:我将把图像数据存储在数据库中,并通过网络连接检索和发送它。在第一次将照片插入数据库时,我可能需要稍微操作一下,比如缩放等。
答案 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)
将是一个不错的选择。