使用 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(class.getResource(URL)) 加载图像,但 getResource 返回 null
ImageIO.read(getClass().getResource("imagepath")) 中 getclass() 的实际目的是啥 [重复]