我正在尝试将TIF / TIFF图像转换为JPG,但工作正常但是对于很少的TIF图像我得到IllegalArgumentException:Bad endianness标记(不是0x4949或0x4d4d)。
例外:
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;
}
}
如果有人知道这个问题,可以提供帮助。
答案 0 :(得分:0)
正如bitbank的评论中所述,这意味着您希望在获得TIFF文件时将JPEG文件传递给它。
答案 1 :(得分:0)
令人吃惊的是,这个JAI
RenderedOp renderer = JAI.create("fileload", filename);
BufferedImage bi = renderer.getAsBufferedImage();
没有相同的失败,只是无论图像和#34;种类如何都能正常工作。"但是,请不要使用此特定方法(传递文件名),请参阅Is JAI closing file handles too early?
答案 2 :(得分:0)
我遇到了这个问题,结果证明这是一个前端问题。是的,我试图上传错误的文件类型,但我期待正确的处理和亲切的弹出消息提醒。相反,我得到了你描述的错误。
在我的情况下,我使用的是extjs,我有一个像这样的失败函数:
failure: function (a) {
...some message alert...
}
而不是:
failure: function (f, a) {
...some message alert...
}
这就是抛出异常,而不是显示我的消息提醒。