2

我正在尝试使用 BufferedImage 从文件中读取 TIFF 图像。以下是我的代码:

String filename = "/image/parrot.tiff";
File f = new File (filename);
try{
        BufferedImage img = ImageIO.read(f);
}catch (Exception e){
        System.out.println("Something went wrong!");
}

但它不起作用。我有一个名为 testInput 的方法来测试文件是否被正确读取:

public void testInput(){
    System.out.println(f.exists());
    System.out.println(f.canRead());
    System.out.println(f.canWrite());
}*/

他们三个总是返回“false”,上面的代码总是返回“出错了!”。我已经为插件添加了 JAI ImageIO 来读取 TIFF 图像。知道似乎是什么问题吗?

4

3 回答 3

5

您需要确保您实际上已准备好 JAI。JAI 是 ImageIO 的插件扩展,如果不存在,则无法解码 TIFF。这是一个快速的单元测试:

@Test
public void canGetTiffDecoder()
{
    Iterator<ImageReader> reader = ImageIO.getImageReadersByFormatName("TIFF");
    assertNotNull(reader);
    assertTrue("No tiff decoder", reader.hasNext());
}
于 2012-01-10T16:40:46.307 回答
2

这可能看起来很傻,但你确定你的文件放在

/image/parrot.tiff

?

根据 Javadoc,exists() 返回:

当且仅当此抽象路径名表示的文件或目录存在时才为真;否则为假

所以我认为路径可能是错误的。根据您的评论,我认为正确的路径应该是

src/image/parrot.tiff

如果不是,请尝试

src/image/parrot.tiff

在所有情况下,您都必须更好地了解 Java(以及大多数其他语言)中文件路径的管理方式;-)

于 2012-01-02T10:26:59.957 回答
1

使用什么格式的 tif 也很重要。即使使用 JAI 插件,也仅支持某些形式的 tiff。例如,当我下载 bluemarble.tif 图像时,我得到了深入的内部工作:

原因:java.lang.RuntimeException:不支持平面(带序)格式 TIFF。

因此,如果没有专门的库的帮助,则不支持某些 tif 文件格式。这些库之一是 GDAL。 http://gdal.org/java/ 然而,许多支持库将需要本地代码,并且可能无法在可移植的纯 java 上下文中工作。

于 2012-07-13T15:14:44.913 回答