Jak odczytać TIFF-a za pomocą ImageIO.read() bądź inaczej

0

Witam, borykam się z problemem od dłuższego czasu. Mianowicie Nie mogę odczytać obrazka TIFF. Jest mi on potrzebny ponieważ potrzebuje dalej przekazać BufferedImage.

 private BufferedImage safeReadStreamToBufferedImage(InputStream inputStreamWithImageData) {
        try {
            return ImageIO.read(inputStreamWithImageData);
        } catch (Exception e) {
            logger.error(getClass(), "safeReadStreamToBufferedImage, errorMsg = " + e.getMessage(), e);
            return null;
        }
    }

Powyższy kod działa dla innych formatów typu png, jpg... zaś nie radzi sobię z TIFF/TIF.

Czy istnieje jakiś sposób by powyższa metoda zadziałała dla TIFF-a ? Szukałem sporo aczkolwiek nie osiągnąłem efektu... Pozdrawiam

0

Na początek proponuję założyć 1 temat na 1 problem i w nim się udzielać.

0

Powyższy kod, który zamieściłeś zadziała Ci pod jednym warunkiem. Musisz dodać do projektu specjalną bibliotekę JAI ImageIO. JRE domyślnie nie obsługuje przechwytywania plików TIFF. Musisz sobie pomóc tą biblioteczką. Jak używać JAI ImageIO. Myślę, że jak sobie poczytasz na ten temat to poradzisz sobie już dalej. ;)

0
Schakal napisał(a):

Powyższy kod, który zamieściłeś zadziała Ci pod jednym warunkiem. Musisz dodać do projektu specjalną bibliotekę JAI ImageIO. JRE domyślnie nie obsługuje przechwytywania plików TIFF. Musisz sobie pomóc tą biblioteczką. Jak używać JAI ImageIO. Myślę, że jak sobie poczytasz na ten temat to poradzisz sobie już dalej. ;)

Zainstalowałem ta bibliotekę już wcześniej ale nadal nie potrafię sobie poradzić z tym czytaniem tiff-a obiekt Buffered image z tiffa jest mi niezbędny...

0

Hmm to trochę dziwne. W takim razie zrób prosty test. (Oczywiście w poniższym kodzie *filename * to musi byc sciezka do Twojego pliku TIFF)

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

Jeśli exception jest rzucany sprawdź najpierw czy scieżka do pliku jest prawidłowa. Na to także prosty teścik:

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

Następnie, jeśli scieżka do pliku jest prawidłowa sprawdź czy JAI plugin działa poprawnie. Utwórz JUnita:

@Test
public void canGetTiffDecoder()
{
    Iterator<ImageReader> reader = ImageIO.getImageReadersByFormatName("TIFF");
    assertNotNull(reader);
    assertTrue("No tiff decoder", reader.hasNext());
}

Jeśli powższe testy przejdą. No to zostaje ostania możliwość, która powoduje błąd odczytu. Otóż może chodzić o format pliku TIFF. Tych formatów jest kilka. I nie każdy jest obsługiwany przez JAI plugin. Jeśli akurat Twoj pliczek - nie jest na tej liście. To JAI nie pomoże. W takim przypadku spróbuj się wspomóc jeszcze biblioteką GDAL
Jak problem będzie nadal wystepował. Wrzuć więcej informacji. Kod i błędy jakie są rzucane w konsoli ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1