2014-07-24 2 views
6

잘 작동하는 TIF/TIFF 이미지를 TIF/TIFF 이미지로 변환하려고하는데, TIF 이미지가 거의 없으면 다음과 같이 IllegalArgumentException이 발생합니다. (0x4949 또는 0x4d4d가 아닌) 잘못된 엔디안 태그가 있습니다.TIF/TIFF를 JPG로 변환 : 잘못된 엔디안 태그

예외 :

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 

코드 기능 :

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

사람이 문제를 알고 있고이 도움이 될 수 있다면.

+2

16 진수 편집기로 TIFF 파일을 검사하십시오. 첫 번째 4 바이트는 무엇입니까? – usr2564301

+0

16 진수 편집기에서 이미지를 검사했습니다. ff d8 ff e0 00 10 4a 46 ... –

+5

TIFF 파일이 필요할 때 JPEG 파일을 전달한다는 의미입니다. – BitBank

답변

0

bitbank의 설명에서 언급했듯이 이것은 TIFF 파일을 가져올 것으로 예상되면 JPEG 파일을 전달하는 것입니다. 놀랄

0

이 JAI

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

같은 장애를 가지고 단지에 관계없이 이미지의 작동하지 않습니다 "종류." 이 특정 메서드를 사용하지 마십시오 (파일 이름 전달). Is JAI closing file handles too early?

0

이 문제가있어 프런트 엔드 문제로 판명되었습니다. 예, 잘못된 파일 형식을 업로드하려고했지만 올바른 처리와 정중 한 팝업 메시지 알림이 필요했습니다. 대신 당신이 설명하는 오류가 발생했습니다. 내 경우

, 나는에 extjs를 사용하고 있었고, 난 이런 실패의 기능을 가지고 : 대신

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

:

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

을이 그 예외를 던지고, 대신 내 메시지를 표시 경보.