JuicyPixels无法加载PNG文件

时间:2015-05-28 16:41:05

标签: image haskell juicy-pixels

我试图了解如何使用JuicyPixels版本3.2.5.1加载,修改和保存图像。我有以下代码:

{-# LANGUAGE OverloadedStrings #-}

import Codec.Picture

imageCreator :: String -> IO ()
imageCreator path = writePng path $ generateImage pixelRenderer 250 300
   where pixelRenderer x y = PixelRGB8 (fromIntegral x) (fromIntegral y) 128

loadSampleImage path = case decodePng path of
  Left errorMsg -> putStrLn errorMsg
  Right sampleImage -> putStrLn "Loaded Successfully"

main = do 
  imageCreator "test.png"
  loadSampleImage "test.png"

{JuverPixels文档略微修改imageCreator函数:https://hackage.haskell.org/package/JuicyPixels-3.2.5.1/docs/Codec-Picture.html修改是添加了对fromIntegral的两次调用,因为这个例子没有编译就没有编译。 (对我来说,文档中的一个例子不会编译,这似乎很奇怪,所以如果我做一些愚蠢的事情,请告诉我)

运行此程序将创建一个名为" test.png"的图像。并将打印:

  

无效的PNG文件,签名已损坏

可能是来自decodePng的调用的错误消息。我用其他一些PNG尝试了这个,我在Gimp创建了一个,另一个是我用MS绘制的。我这样做是通过从主函数中删除imageCreator "test.png"行来避免覆盖我想要测试的图像。

为了加载PNG图像,我应该更改什么?

1 个答案:

答案 0 :(得分:4)

loadSampleImage path = case decodePng path of

您正在尝试逐字解码字符串" test.png"作为巴布亚新几内亚。您想要readPng,而不是decodePng。 (或者您可以使用readImage而不关心文件的格式。)