我的应用程序负责使用特定的alghoritm将单个TIFF文件分割成多个较小的文件。一切正常,但我关心的是,应用程序生成的文件大小超过原始文件。图像压缩和ImageIO库
应用程序处理的原始文件总大小约为26mb,生成的文件总大小等于387mb!下面是一个过程的代码片段 - 我是一个图像压缩和ImageIO库的amator,并且一直没能找到任何有用的东西,因此我想问问是否有什么我可以改变的那些结果更接近。理想情况下,我想使用与原始相同的压缩。
final ImageWriter writer = ImageIO.getImageWritersByFormatName(resultsExtension).next();
final ImageWriteParam writeParams = writer.getDefaultWriteParam();
writeParams.setCompressionMode(ImageWriteParam.MODE_COPY_FROM_METADATA);
BufferedImage page = ImageUtils.getSinglePageFromTiffFile(documentToSplit, currentPageIndex);
while (currentPageIndex < pagesQty) {
OutputStream outStream = null;
ImageOutputStream imgOutStream = null;
try {
outStream = new FileOutputStream(newDocFile);
imgOutStream = ImageIO.createImageOutputStream(outStream);
writer.setOutput(imgOutStream);
writer.prepareWriteSequence(null);
writer.writeToSequence(new IIOImage(page, null, null), writeParams);
currentPageIndex++;
if (CONDITION) {
writer.endWriteSequence();
break;
}
writer.writeToSequence(new IIOImage(page, null, null), writeParams);
currentPageIndex++;
}
} finally {
if (imgOutStream != null) {
imgOutStream.close();
}
if (outStream != null) {
outStream.close();
}
}
}
getSinglePageFromTiffFile
方法:
public static BufferedImage getSinglePageFromTiffFile(File file, int pageIndex)
throws IOException {
ImageInputStream is = ImageIO.createImageInputStream(file);
ImageReader reader;
try {
reader = ImageIO.getImageReaders(is).next();
reader.setInput(is);
return reader.read(pageIndex);
} finally {
if (is != null) {
is.close();
}
}
}
如果您想将多页TIFF拆分为多个单页TIFF,您可能需要查看[this Q/A](https://stackoverflow.com/q/44565928/1428606),其中演示了如何执行这不需要解码图像,从而保持原始的压缩/文件大小。 – haraldK