Так что у меня есть это сомнение. У меня уже есть код, который работает с локальными (встроенными) файлами изображений, но теперь мне нужно вместо этого загрузить внешнее изображение. Тупая замена на loadImageExt
не помогла:
productImageIO :: IO (Diagram B)
productImageIO = do
res <- loadImageExt "https://s7d2.scene7.com/is/image/dkscdn/16JDNMJRDNCLPSBLKJRD_Black_Black_White_is/"
return $
case res of
Left err -> mempty
Right product -> image product
• No instance for (Renderable (DImage Double External) B)
arising from a use of ‘image’
• In the expression: image product
In a case alternative: Right product -> image product
In the second argument of ‘($)’, namely
‘case res of
Left err -> mempty
Right product -> image product’
|
26 | Right product -> image product
| ^^^^^^^^^^^^^
Глядя на источник loadImageExt и readImage Я не могу увидеть, где он на самом деле выполняет http для получения изображения.
А в документах написано: loadImageExt, Проверьте, существует ли файл, и используйте JuicyPixels, чтобы определить правильный размер, но сохраните ссылку на изображение вместо растровых данных
Поэтому, пожалуйста, извините за мое невежество, но значит ли это, что мне нужно добавить логику загрузки http в этом случае? Или я просто упускаю какой-то смысл заставить это работать?
UPD : Я могу ошибаться, и есть какой-то быстрый и простой способ загрузки внешних изображений, просто поместив ссылку, но мне помогло использование http -роводит , получив ответ в ByteString и его разбор:
productImageIO :: String -> IO (Diagram B)
productImageIO path = do
response <- fmap getResponseBody $ parseRequest path >>= httpBS
return $
case loadImageEmbBS response of
Left error -> mempty
Right decodedImage -> image decodedImage
Может загружаться даже изображение https, например https://sneakernews.com/wp-content/uploads/2018/01/jordan-russell-westbrook-signature-shoe-creamsicle-3.jpg?w=1140