2014-07-24 35 views
6

Próbuję przekonwertować obrazy TIF/TIFF do JPG, który działa dobrze, ale dla kilku obrazów TIF Otrzymuję IllegalArgumentException: Bad tagu endianness (nie 0x4949 lub 0x4d4d).Konwersja TIF/TIFF do JPG: tag Bad endianness

Wyjątek:

java.io.IOException: Bad endianness tag (not 0x4949 or 0x4d4d). 
    at com.sun.media.jai.codecimpl.CodecUtils.toIOException(CodecUtils.java:76) 
    at com.sun.media.jai.codecimpl.TIFFImageDecoder.getNumPages(TIFFImageDecoder.java:98) 
    at com.sun.media.jai.codecimpl.TIFFImageDecoder.decodeAsRenderedImage(TIFFImageDecoder.java:103) 
    at com.sun.media.jai.codec.ImageDecoderImpl.decodeAsRenderedImage(ImageDecoderImpl.java:140) 
    at com.pkg.jae.utils.GenericImageUtils.convertTiffToJpg(GenericImageUtils.java:35) 
    at com.pkg.jae.utils.GenericImageUtils.main(GenericImageUtils.java:92) 
Caused by: java.lang.IllegalArgumentException: Bad endianness tag (not 0x4949 or 0x4d4d). 
    at com.sun.media.jai.codec.TIFFDirectory.getNumDirectories(TIFFDirectory.java:595) 
    at com.sun.media.jai.codecimpl.TIFFImageDecoder.getNumPages(TIFFImageDecoder.java:96) 
    ... 4 more 

Kod Funkcja:

public static void convertTiffToJpg(String strTiffUrl,String strJpgFileDestinationUrl) throws Exception { 
     try { 
      FileSeekableStream obj_FileSeekableStream = new FileSeekableStream(new File(strTiffUrl)); 
      ImageDecoder obj_ImageDecoder = ImageCodec.createImageDecoder(EXT_TIFFX, obj_FileSeekableStream, null); 
      RenderedImage obj_RenderedImage = obj_ImageDecoder.decodeAsRenderedImage(); 
      JAI.create("filestore", obj_RenderedImage,strJpgFileDestinationUrl, EXT_JEPGX); 
      obj_RenderedImage = null; 
      obj_ImageDecoder = null; 
      obj_FileSeekableStream.close(); 
     } catch (Exception ex) { 
      throw ex; 
     } 
    } 

Jeśli ktoś zna ten problem i może pomóc w tym.

+2

Sprawdź plik TIFF za pomocą edytora szesnastkowego. Jakie są pierwsze 4 bajty? – usr2564301

+0

Sprawdziłem obraz w edytorze szesnastkowym. Widzę coś takiego, ff d8 ff e0 00 10 4a 46 ... –

+5

Oznacza to, że przekazujesz plik JPEG, gdy oczekuje pliku TIFF. – BitBank

Odpowiedz

0

Zgodnie z informacją podaną pod numerem bitbank oznacza to, że przekazuje się plik JPEG, gdy oczekuje się pobrania pliku TIFF.

0

zaskakująco, to JAI

RenderedOp renderer = JAI.create("fileload", filename); 
BufferedImage bi = renderer.getAsBufferedImage(); 

nie ma się ten sam błąd i po prostu działa niezależnie od obrazu „rodzaju”. Nie używaj tej konkretnej metody (przekazując nazwę pliku), ale zobacz, Is JAI closing file handles too early?

0

Miałem ten problem i okazało się, że to problem z przodu. Tak, próbowałem załadować niewłaściwy typ pliku, ale oczekiwałem prawidłowej obsługi i miłego powiadomienia o wyskakujących okienkach. Zamiast tego otrzymałem błąd, który opisałeś.

W moim przypadku, używałem ExtJS i miałem funkcję awaryjności takiego:

failure: function (a) { 
...some message alert... 
} 

zamiast:

failure: function (f, a) { 
...some message alert... 
} 

i to było rzucanie tego wyjątku, zamiast wyświetlać moją wiadomość alarm.