【问题标题】:Image is null after creation with not null InputStream创建后图像为空且输入流不为空
【发布时间】:2014-04-10 18:45:39
【问题描述】:

我有以下代码:

public BufferedImage inputStreamToImage (InputStream stream) {        

    BufferedImage image = null;

    if (stream != null ) {

        try {
            image = ImageIO.read(stream);
            // image is still null here <--
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

    return image;
}

我测试 InputStream 是否为空,但事实并非如此。然后我从 InputStream 创建一个新的 BufferedImage。同样没有任何问题,代码执行起来就像它正在工作一样。但是当我尝试使用图像时,它是空的。换句话说,在“成功”创建之后,我测试图像并且它是空的。

编辑

我通过这样的 html 表单上传 .tif 文件:

<form action="webresources/read" method="post" enctype="multipart/form-data">

    <p>
    Select a file : <input type="file" name="file" id="file" />
    </p>

    <input type="submit" value="Upload It" />

</form>

有什么帮助吗?在此先感谢:)

【问题讨论】:

    标签: java inputstream bufferedimage


    【解决方案1】:

    来自javadoc

    如果没有注册的 ImageReader 声称能够读取结果流,则返回 null。

    InputStream 可能不完全包含可读的图像。

    【讨论】:

    • 这真的很奇怪,不过我从 html 网络表单上传了一个 .tif 文件(请参阅更新的问题)。那么可能不支持 tif 文件吗?
    【解决方案2】:

    啊!所以.. 原因是 ImageIO.read() 不支持 .tif 图像。我用 .jpg 试了一下,效果很好。

    【讨论】:

    • “支持”任何格式。但是,只有 JPEG、PNG、BMP、WBMP 和 GIF 支持与 JRE 捆绑在一起。要读取 TIFF,请安装一个插件,例如 JAI ImageIO 或其他 3rd 方插件中的插件。
    【解决方案3】:

    ImageIO的文档中是否有可能出现以下情况-“InputStream被包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null。”?

    【讨论】:

    • 问题不是答案。
    • 没有代码时无法解决问题。这是一个建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多