如何在java中压缩tiff文件,当我将jpeg文件添加到tiff时,文件大小正在增加
文件f2 =新文件(“D:/KYCDATA/mani/myimage_compressed.jpeg”);
BufferedImage image3 = ImageIO.read(f2);
List<BufferedImage> list = new ArrayList<BufferedImage>();
list.add(image3);
File tiffFile = new File("D:/KYCDATA/mani/mani.tiff");
if(tiffFile.exists()) {
tiffFile.delete();
}
ImageOutputStream ios = null;
ImageWriter writer = null;
Iterator it = ImageIO.getImageWritersByFormatName("tiff");
if (it.hasNext()) {
writer = (ImageWriter) it.next();
}
ios = ImageIO.createImageOutputStream(tiffFile);
writer.setOutput(ios);
IIOImage iioImage = null;
for (int i = 0; i < list.size(); i++) {
iioImage = new IIOImage(list.get(i), null, null);
if (i == 0) {
writer.write(iioImage);
} else {
writer.writeInsert(i, iioImage, null);
}
writer.endWriteSequence();
答案 0 :(得分:2)
TIFF使用无损压缩,所以如果我正确理解你的问题,我希望TIFF大于原始JPEG。请看这里的简单描述:
答案 1 :(得分:0)
您需要在ImageWriteParam对象上设置压缩模式,然后将此参数传递给编写器。
添加以下代码以获取默认编写器参数并设置压缩模式
ImageWriteParam writeParam = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("PackBits");
修改你的代码,将我们在上面设置的writeParam添加到write方法
if (i == 0) {
writer.write( null,iioImage,writeParam);
} else {
writer.writeInsert(i, iioImage, writeParam);
}