【问题标题】:How can I cast or initialize ImageInputStream with InputStream?如何使用 InputStream 转换或初始化 ImageInputStream?
【发布时间】:2012-07-21 19:20:45
【问题描述】:

我正在开发一个图像抓取应用程序。我正在获取网址

URL imageUrl = new URL(imageSource);

然后我用这个 URL 创建一个 InputStream:

InputStream is = new URL(imageUrl.toString()).openStream();

在此之后,我想创建一个 ImageInputStream 来确定 ImageIO 阅读器。

ImageInputStream iis = ??????

但我无法初始化它。我可以为 ImageInputStream 实现 URL 或 InputStream 吗?

【问题讨论】:

  • 你试过iis = ImageIO.createImageInputStream(is);吗?

标签: java image inputstream


【解决方案1】:

这就是你要找的东西:

ImageInputStream iis = ImageIO.createImageInputStream(is);

【讨论】:

    【解决方案2】:

    更好的方法是使用返回BufferedReaderImageIO.read(url)

    【讨论】:

    • @ssimm 恕我直言,相对于 OP 建议的方法而言,它更好。这与我 1 分钟后 Harmeet Singh 建议的方法完全相同。
    • 它可能会在有限的 JVM 堆大小上导致非常大的图像文件出现 OOM 问题。考虑读取例如 60000x30000 的缓冲图像
    【解决方案3】:
    URL imageUrl = new URL(imageSource);
    InputStream is = new URL(imageUrl.toString()).openStream();
    ImageInputStream iis = ImageIO.createImageInputStream(is);
    Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
    
    if(!iter.hasNext())
        throw new RuntimeException("No readers found");
    ImageReader reader = iter.next();
    

    这是您获得读者的方式,或者是获得读者的方式之一。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多