2014-07-24 26 views
6

Ich versuche TIF/TIFF-Bilder in JPG zu konvertieren, was gut funktioniert, aber für wenige TIF-Bilder bekomme ich eine IllegalArgumentException: Bad endianness tag (nicht 0x4949 oder 0x4d4d).TIF/TIFF nach JPG konvertieren: Bad endianness tag

Ausnahme:

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 

Code Funktion:

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

Wenn jemand das Problem kennt und dabei helfen kann.

+2

Überprüfen Sie diese TIFF-Datei mit einem Hex-Editor. Was sind die ersten 4 Bytes? – usr2564301

+0

Ich habe das Bild im Hex-Editor geprüft. Ich sehe etwas wie, ff d8 ff e0 00 10 4a 46 ... –

+5

Das bedeutet, dass Sie eine JPEG-Datei an es übergeben, wenn es eine TIFF-Datei erwartet. – BitBank

Antwort

0

Wie in einem Kommentar von bitbank angegeben, bedeutet dies, dass Sie eine JPEG-Datei an sie übergeben, wenn sie eine TIFF-Datei erwartet.

0

aufrüttelnd diese JAI

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

nicht den gleichen Ausfall hat und funktioniert unabhängig von Bild „Art.“ Verwenden Sie diese bestimmte Methode (Übergabe des Dateinamens) jedoch nicht, siehe Is JAI closing file handles too early?

0

Ich hatte dieses Problem und es stellte sich heraus, dass es sich um ein Front-End-Problem handelt. Ja, ich habe versucht, den falschen Dateityp hochzuladen, aber ich erwartete eine korrekte Handhabung und einen freundlichen Popup-Nachrichtenalarm. Stattdessen habe ich den Fehler erhalten, den Sie beschrieben haben.

In meinem Fall war ich mit extjs und ich hatte eine Fehlerfunktion wie folgt aus:

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

statt:

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

und das diese Ausnahme warf, anstatt meine Nachricht anzuzeigen aufmerksam.