我正在尝试使用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图像。知道什么似乎是问题吗?
答案 0 :(得分:5)
你需要确保你准备好了JAI。 JAI是ImageIO的插件扩展,如果不存在,则无法解码TIFF。这是一个快速的单元测试:
@Test
public void canGetTiffDecoder()
{
Iterator<ImageReader> reader = ImageIO.getImageReadersByFormatName("TIFF");
assertNotNull(reader);
assertTrue("No tiff decoder", reader.hasNext());
}
答案 1 :(得分:2)
看起来很傻,但你确定你的文件放在
中/image/parrot.tiff
根据Javadoc,exists()返回:
当且仅当此抽象路径名表示的文件或目录存在时才为true;否则是假的
所以我认为这条路可能是错的。根据你的评论,我认为正确的道路应该是
src/image/parrot.tiff
如果不是,请尝试
src/image/parrot.tiff
在所有情况下,您必须更好地了解如何使用Java(以及大多数其他语言)管理文件路径; - )
答案 2 :(得分:1)
使用什么格式的tif也很重要。即使使用JAI插件,也只支持某些形式的tiff。例如,当我下载bluemarble.tif图像时,深入了解我的内部工作:
引起:java.lang.RuntimeException:不支持平面(带序)格式TIFF。
因此,如果没有专业库的帮助,则不支持某些tif文件格式。其中一个库是GDAL。 http://gdal.org/java/然而,许多支持库将需要本机代码,并且可能无法在可移植的纯Java上下文中工作。