java 将TIF/TIFF转换为JPG:字节序标记错误

z9zf31ra  于 2023-03-16  发布在  Java
关注(0)|答案(3)|浏览(263)

我试图将TIF / TIFF图像转换为JPG,这可以正常工作,但对于少数TIF图像,我会收到一个IllegalArgumentException:字节序标记错误(不是0x 4949或0x 4d 4d)。
例外情况:

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

如果有人知道这个问题,并可以帮助在这方面。

ovfsdjhp

ovfsdjhp1#

正如bitbank的注解中所述,这意味着当它期望获得TIFF文件时,您将JPEG文件传递给它。

frebpwbc

frebpwbc2#

令人吃惊的是这个JAI

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

不会出现同样的错误,无论图像“种类”如何都能正常工作。但是不要使用这个特殊的方法(传入文件名),请参见Is JAI closing file handles too early?

5jvtdoz2

5jvtdoz23#

我遇到了这个问题,结果是前端问题。是的,我试图上传错误的文件类型,但我期待正确的处理和优雅的弹出消息警报。相反,我得到了你描述的错误。
在我的例子中,我使用的是extjs,我有一个失败函数,如下所示:

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

而不是:

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

这是抛出异常,而不是显示消息提醒。

相关问题