【发布时间】:2017-06-28 04:33:43
【问题描述】:
我的应用程序负责使用特定的算法将单个 TIFF 文件拆分为多个较小的文件。一切正常,但让我担心的是应用程序生成的文件在大小上超过了原始文件。
应用程序处理的原始文件总大小约为 26mb,生成的文件总大小等于 387mb!下面是过程的代码 sn-p - 在图像压缩和 ImageIO 库方面,我是一名业余爱好者,并且无法在网络上找到任何有用的东西,因此我想问一下是否有什么可以改变的使这些结果更接近。理想情况下,我想使用与原始相同的压缩方式。
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,它演示了如何在不解码图像的情况下执行此操作,从而保留原始压缩/文件大小。
标签: java image-processing compression tiff