【问题标题】:How to make ImageIO read from InputStream :Java如何使 ImageIO 从 InputStream 中读取:Java
【发布时间】:2023-04-06 01:12:01
【问题描述】:

我已经创建了可执行的 jar 文件(使用 Eclipse),有一组图像 (.png) 文件将包含在 jar 中。所以我在项目的/images 文件夹中添加了一个包含所有图像的源文件夹。代码必须使用ImageIO.read(new File(path);访问这些文件来创建BufferedImage

之前, 获取我使用的路径ClassName.class.getResource(/image/test.png).toURI();

在执行 jar 时,它会抛出错误 URI 不是分层的

所以现在我使用ClassName.class.getResourceAsStream(/image/test.png);

但是如何让 ImageIO 从 Inputstream 中读取呢? 我尝试按如下方式进行投射

InputStreamReader resourceBuff=ClassName.class.getResourceAsStream(/image/test.png);
ImageIO.read((ImageInputStream) new InputStreamReader(resourceBuff));

它会抛出错误InputStreamReader 无法转换为 ImageInputStream

【问题讨论】:

    标签: java image file-io executable-jar javax.imageio


    【解决方案1】:

    ImageIO.read() 将InputStream 作为参数,因此将其转换为ImageInputStream 没有任何意义。

    其次,您不能将InputStreamReader 对象强制转换为ImageInputStream,因为ImageInputStream 与您想到的InputStreamReader 无关。

    此外,getResourceAsStream() 返回InputStream。所以你可以直接这样做。

    InputStream resourceBuff = YourClass.class.getResourceAsStream(filepath);
    BufferedImage bf = ImageIO.read(resourceBuff);
    

    【讨论】:

      【解决方案2】:

      ImageIO 类有一个实用方法来read 和InputStream 并创建一个BufferedImage。

      还有一个从InputStream 到create 和ImageInputStream 的实用方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 2016-04-29
        • 2012-03-03
        相关资源
        最近更新 更多