JuicyPixels не может загружать файлы PNG
Я пытаюсь узнать, как загружать, изменять и сохранять изображения с помощью 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"
imageCreator
функция взята с небольшим изменением из документации JuicyPixels: https://hackage.haskell.org/package/JuicyPixels-3.2.5.1/docs/Codec-Picture.html Модификация была добавлением двух вызовов fromIntegral
, так как этот пример не скомпилирован без них. (Мне кажется странным, что пример в документации не скомпилируется, поэтому, если я делаю что-то глупое, пожалуйста, дайте мне знать)
Запуск этой программы создаст изображение с именем "test.png" и напечатает:
Неверный файл PNG, подпись повреждена
что, вероятно, является сообщением об ошибке, поступившим от звонка decodePng
, Я попробовал это с несколькими другими PNG, один из которых я создал в Gimp, а другой - в MS paint. Я сделал это, удалив imageCreator "test.png"
строка из моей основной функции, чтобы избежать перезаписи изображений, которые я хотел проверить.
Что я должен изменить, чтобы загрузить изображения PNG?
1 ответ
loadSampleImage path = case decodePng path of
Вы пытаетесь буквально декодировать строку "test.png" как PNG. Ты хочешь readPng
не decodePng
, (Или вы можете просто использовать readImage
и не волнует, в каком формате файл.)