我试图了解如何使用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图像,我应该更改什么?
答案 0 :(得分:4)
loadSampleImage path = case decodePng path of
您正在尝试逐字解码字符串" test.png"作为巴布亚新几内亚。您想要readPng
,而不是decodePng
。 (或者您可以使用readImage
而不关心文件的格式。)