2014-07-24 40 views
6

Sto tentando di convertire le immagini TIF/TIFF in JPG che funziona bene ma per poche immagini TIF viene visualizzato un IllegalArgumentException: tag Bad endianness (non 0x4949 o 0x4d4d).Converti TIF/TIFF in JPG: tag Bad endianness

Eccezione:

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 

Codice funzione:

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; 
     } 
    } 

Se qualcuno conosce il problema e può aiutare in questo.

+2

Ispeziona il file TIFF con un editor esadecimale. Quali sono i primi 4 byte? – usr2564301

+0

Ho ispezionato l'immagine in editor esadecimale. Vedo qualcosa del tipo, ff d8 ff e0 00 10 4a 46 ... –

+5

Ciò significa che stai passando un file JPEG ad esso quando si aspetta un file TIFF. – BitBank

risposta

0

Come indicato in un commento di bitbank, significa che stai trasmettendo un file JPEG quando si aspetta di ottenere un file TIFF.

0

Sorprendentemente, questo JAI

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

non ha lo stesso fallimento e solo funziona indipendentemente immagine "genere". Non utilizzare questo particolare metodo (passando il nome del file), vedere Is JAI closing file handles too early?

0

Ho riscontrato questo problema e si è rivelato un problema front-end. Sì, stavo cercando di caricare il tipo di file sbagliato, ma mi aspettavo una corretta gestione e un messaggio di avviso grazioso. Invece stavo ottenendo l'errore che hai descritto.

Nel mio caso, stavo usando ExtJS e ho avuto una funzione di errore come questo:

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

invece di:

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

e questo stavo gettando tale eccezione, invece di visualizzare il mio messaggio mettere in guardia.