代码如下,从网上找来的,读取一个8页的tiff文件时,当循环获取到第二页时出错
private static void tiffToJPEGByImageIO(String tiff) {
ImageInputStream input;
try {
input = ImageIO.createImageInputStream(new File(tiff));// 以图片输入流形式读取到tif
// Get the reader
ImageReader reader = ImageIO.getImageReaders(input).next();// 获得image阅读器,阅读对象为tif文件转换的流
String path, tiffName;
path = tiff.substring(0, tiff.lastIndexOf("."));
tiffName = tiff.substring(tiff.lastIndexOf("/"),
tiff.lastIndexOf("."));
try {
reader.setInput(input);
// Read page 2 of the TIFF file
int count = reader.getNumImages(true);// tif文件页数
// System.out.println(count);
for (int i = 0; i < count; i++) {
BufferedImage image = reader.read(i, null);// **获取第二页时,这里出错**
File f = new File(path, "\\" + tiffName + "_" + i + ".jpg");
try {
if (!f.exists()) {
f.getParentFile().mkdirs();
f.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
ImageIO.write(image, "JPEG", f);// 保存图片
}
} finally {
reader.dispose();
input.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
错误信息如下:
```Caused by: java.lang.ArrayIndexOutOfBoundsException: 5679
at com.sun.media.jai.codecimpl.TIFFFaxDecoder.nextLesserThan8Bits(TIFFFaxDecoder.java:1488)
at com.sun.media.jai.codecimpl.TIFFFaxDecoder.decodeT6(TIFFFaxDecoder.java:964)
at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1047)
at com.sun.media.jai.codecimpl.SimpleRenderedImage.getData(SimpleRenderedImage.java:462)
at com.sun.media.jai.codecimpl.SimpleRenderedImage.getData(SimpleRenderedImage.java:422)
at com.sun.media.jai.codecimpl.JPEGImageEncoder.encode(JPEGImageEncoder.java:170)
at com.sun.media.jai.opimage.EncodeRIF.create(EncodeRIF.java:74)
... 25 more