微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

读取 tiff 图像时数组索引越界异常

如何解决读取 tiff 图像时数组索引越界异常

我这里有代码。(Classname=test2.java)

    final String filepath = "brabrabra.tif";
    final String jpg = filepath + ".jpg";
    ImageInputStream iis = null;

    iis = ImageIO.createImageInputStream(new File(filepath));
    Iterator<ImageReader> ite = ImageIO.getimageReaders(iis);
    if (ite != null && ite.hasNext()) {
        ImageReader reader = ite.next();
        reader.setInput(iis);
        int numPage = reader.getNumImages(true);
        IntStream.range(0,numPage).forEach(v -> {
        try {
            BufferedImage tiff = reader.read(v);
            ImageIO.write(tiff,"jpeg",new File(fullpathjpeg));
        } catch (IOException e) {
            e.getMessage();
            e.printstacktrace();
        }
    });

和异常日志

Exception in thread "main" java.lang.Arrayindexoutofboundsexception: 1909
at com.sun.media.imageioimpl.plugins.tiff.TIFFFaxDecompressor.decodeT6(TIFFFaxDecompressor.java:1169)
at com.sun.media.imageioimpl.plugins.tiff.TIFFFaxDecompressor.decodeRaw(TIFFFaxDecompressor.java:680)
at com.sun.media.imageio.plugins.tiff.TIFFDecompressor.decode(TIFFDecompressor.java:2514)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.decodeTile(TIFFImageReader.java:1137)
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1417)
at javax.imageio.ImageReader.read(ImageReader.java:939)
at test2.lambda$0(test2.java:44)
at java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:110)
at java.util.stream.IntPipeline$Head.forEach(IntPipeline.java:559)
at test2.main(test2.java:41)

这一行给了我一个错误

BufferedImage tiff = **reader.read(v);**

我不知道为什么会出现此错误。奇怪的是,几乎所有的 tiff 文件都可以正常读取并转换为 jpg 文件,但有些则不是。我比较了它们之间的 tiff 文件,但没有具体区别。(当然我发现了一些差异,如大小、字节等,但我认为这些与此错误无关。

有人可以帮我吗?


这个文件是问题的原因

differences

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。