首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Haskell图中加载外部图像

在Haskell图中加载外部图像
EN

Stack Overflow用户
提问于 2018-07-02 21:26:07
回答 1查看 171关注 0票数 2

所以我对此表示怀疑。我已经有了处理本地(嵌入式)图像文件的代码,但是现在我需要加载一个外部映像。用loadImageExt替换愚蠢无助于:

代码语言:javascript
运行
复制
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
   |                        ^^^^^^^^^^^^^

看看loadImageExtreadImage的来源,我看不出它在哪里执行http内容来获取图像。

文档说,loadImageExt,检查文件是否存在,并使用JuicyPixels确定正确的大小,但是保存对图像的引用,而不是光栅数据。

所以,请原谅我的无知,但这是否意味着在这种情况下我需要添加http加载逻辑?还是我错过了让这件事行得通的要点?

UPD:我可能错了,有一些简单快捷的方法可以通过放置链接来加载外部图像,但对我来说最有效的方法是使用http-导管,在ByteString中获取响应并解析它:

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 13:21:42

loadImageExt似乎期待的是一个FilePath,而不是一个FilePath,但这不是编译器所抱怨的。它抱怨返回的特定图像,即DImage Double External,不是Renderable。这可能是因为使用中的渲染器不理解外部映像;例如,Diagrams.Backend.SVG似乎支持Embedded,但不支持External。相反,Diagrams.Backend.Html5支持External,但不支持Embedded。据猜测,您的图表将使用本地文件名来表示图像,而不是跨站点URL。您可以向URL注入uncheckedImageRef,但前提是后端支持External关于图像的图表手册部分声称只有Cairo后端才会这么做,但这可能是不准确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51143927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档