使用 ImageIO.read 的问题

Posted

技术标签:

【中文标题】使用 ImageIO.read 的问题【英文标题】:Problem using ImageIO.read 【发布时间】:2011-05-02 03:38:30 【问题描述】:

好的,我有一张我正在尝试阅读的图片。问题是 Image.read(file) 返回 NULL。

File file = new File("C:\\images\\image1.jpg");
if(file.exists())
    System.out.println("Image file exists.");
    BufferedImage originalImage = ImageIO.read(file);


所以图像存在,但 ImageIO.read(file) 返回 NULL。没有抛出错误什么都没有!!!怎么回事?

这是我迄今为止尝试过的:

    好的,我的环境是 Windows 7。我 用其中一张图片进行了测试 带有 Windows 并且它能够 阅读图片。 image1.jpg 由以下人创建 另一个系统。现在确定什么方法 他们正在使用。 我尝试将图像转换为 此处建议的 RGB link text 但失败并显示“不是 JPEG 文件:以 0x4d 0x4d 开头”。 图像扩展名为 .jpg,但 windows说它是JPEG类型?这 令人困惑。

有人可以帮忙吗?我是新手,不知道如何解决这个问题。

好的,我刚刚发现 ImageIO.getImageReaders(stream) 返回一个空的迭代器。这意味着它找不到合适的读者?我应该如何阅读这张图片?

【问题讨论】:

由于您的标签包含“applet”,我只想提一下,除非您正在编写一个用于从最终用户的磁盘上加载图像的小程序,否则您可能会在一个 URL 之后反而。此外,Windows 可能内置了大量用于处理无效图像的“魔法”。在值得信赖的图像编辑器中打开 JPG 并将其另存为新文件可能会有所帮助。这可能会纠正问题(假设它是无效图像)。 那些双斜线是干什么用的? 【参考方案1】:

太棒了,我遇到了同样的问题,它在 eclipse 中支持 24 种图像格式,但在 maven 的命令提示符下仅支持 12 种图像格式。将 jai_imageio.jar 放入 maven 的测试路径后,maven 也开始支持 24 种图像格式了。

【讨论】:

您还可以使用 ImageIO.getReaderFormatNames() 来获取您的环境中 ImageReaders 支持的所有格式。【参考方案2】:

好吧,因为我换了笔记本电脑,我查看了我的旧笔记本电脑,并在 jre/ext/lib 中找到了这个 JAR jai-imageio.jar(我知道这是个坏主意)。我把它移到我的项目/库中,它工作了! 我猜这个 jai-imageio.jar 包含额外的图像阅读器。

【讨论】:

【参考方案3】:

来自ImageIO.read() 的 Javadocs

返回 BufferedImage 作为结果 解码提供的文件 ImageReader 自动选择 从目前注册的人中。 File 被包裹在一个 ImageInputStream。如果没有注册 ImageReader 声称能够 读取结果流,null 是 返回。

尝试创建一个ImageInputStream,然后将其传递给ImageIO.read() 方法,而不是发送文件本身。

【讨论】:

我认为是环境问题。我正在尝试将我所有的工作迁移到一台新的笔记本电脑上。我刚刚在我以前的笔记本电脑中测试了相同的代码,它工作正常。我可能在 EXT 文件夹中缺少一些罐子。我会继续寻找。感谢您的回复。

以上是关于使用 ImageIO.read 的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageIO.read() 生成的图像是不是仍使用传递给它的相同内存?

ImageIO.read() 返回 null

ImageIO.read() 返回 403 错误

尝试使用 ImageIO.read(class.getResource(URL)) 加载图像,但 getResource 返回 null

Java压缩图片ImageIO.read()报错

ImageIO.read(getClass().getResource("imagepath")) 中 getclass() 的实际目的是啥 [重复]