Чтение изображения TIFF из файла с использованием BufferedImage и JAI - PullRequest
2 голосов
/ 02 января 2012

Я пытаюсь прочитать изображение TIFF из файла, используя BufferedImage.Вот мой код:

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());
}*/

Три из них всегда будут возвращать «ложь», а приведенный выше код всегда возвращает «Что-то пошло не так!».Я уже добавил JAI ImageIO для плагина для чтения изображений в формате TIFF.Есть идеи, в чем проблема?

Ответы [ 3 ]

5 голосов
/ 10 января 2012

Вы должны убедиться, что JAI наготове. JAI - это расширение плагина для ImageIO, и если его там нет, вы не сможете декодировать TIFF. Вот быстрый юнит-тест:

@Test
public void canGetTiffDecoder()
{
    Iterator<ImageReader> reader = ImageIO.getImageReadersByFormatName("TIFF");
    assertNotNull(reader);
    assertTrue("No tiff decoder", reader.hasNext());
}
2 голосов
/ 02 января 2012

Это может показаться глупым, но вы уверены, что ваш файл помещен в

/image/parrot.tiff

Согласно Javadoc, существует () возвращает:

true тогда и только тогда, когда существует файл или каталог, обозначенный этим абстрактным путем; ложь в противном случае

Так что я думаю, что путь может быть неправильным. Согласно вашему комментарию, я думаю, что правильный путь должен быть

src/image/parrot.tiff

Если это не так, попробуйте

src/image/parrot.tiff

Во всех случаях вы должны лучше понимать, как управляются пути к файлам в Java (и в большинстве других языков); -)

1 голос
/ 13 июля 2012

Также имеет значение, какой формат tif используется.Даже с плагином JAI поддерживаются только некоторые формы tiff.Например, когда я загрузил образ bluemarble.tif, глубоко во внутренней работе я получил:

Причина: java.lang.RuntimeException: Планарный (последовательный) формат TIFF не поддерживается.

Таким образом, определенные форматы файлов TIF не поддерживаются без помощи специализированных библиотек.Одна из этих библиотек - GDAL.http://gdal.org/java/ Однако многим из вспомогательных библиотек потребуется нативный код, и они могут не работать в переносимом чисто Java-контексте.

...