读取 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 (将#修改为@)