В библиотеке JuicyPixel от Haskell есть функция для загрузки png
изображений, readPng
. Проблема в том, что эта функция возвращает тип Either String DynamicImage
, где большинство функций библиотеки фактически используют тип изображения. Документация библиотеки неясно, каков правильный метод получения правильного Image
из результата readPng
.Как загрузить изображение с помощью JuicyPixel?
До сих пор, это то, что я сделал:
import Codec.Picture
main = do
imageLoad <- readPng "myImage.png"
case imageLoad of
Left error -> putStrLn error
Right image -> do
putStrLn "success"
case image of
ImageY8 img -> print "TODO: deal with this case."
ImageY16 img -> print "TODO: deal with this case."
ImageYF img -> print "TODO: deal with this case."
ImageYA8 img -> print "TODO: deal with this case."
ImageYA16 img -> print "TODO: deal with this case."
ImageRGB8 img -> print "TODO: deal with this case."
ImageRGB16 img -> print "TODO: deal with this case."
ImageRGBF img -> print "TODO: deal with this case."
ImageRGBA8 img -> print "TODO: deal with this case."
ImageRGBA16 img -> print "TODO: deal with this case."
ImageYCbCr8 img -> print "TODO: deal with this case."
ImageCMYK8 img -> print "TODO: deal with this case."
ImageCMYK16 img -> print "TODO: deal with this case."
print "Done."
Конечно, я не собираюсь вручную иметь дело с каждым возможным кодирования, так что я просто (методом проб и ошибок) выяснили, тип изображение, которое я получал (это был ImageRGBA8) и частично соответствовал ему. Это звучит как очень плохая идея, однако - действительно ли это нужно сделать, или библиотека предоставляет правильный способ просто загрузить изображение в формате, который вы просите?
Обратите внимание, что для использования полиморфных операций с динамическими изображениями вам придется использовать 'dynamicMap' или' dynamicPixelMap', которые выполняют операции полиморфными по типу 'Pixel' и применяют их к' DynamicImage'. Также обратите внимание, что преобразование не стоит ничего, если ваш 'DynamicImage' имеет нужный тип в первую очередь (так что вы должны выбрать стандартизацию для наиболее распространенного типа изображения, которое вы должны обрабатывать). – Jedai