在java中的Tiff文件压缩

时间:2012-12-17 04:45:02

标签: java

如何在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();

2 个答案:

答案 0 :(得分:2)

TIFF使用无损压缩,所以如果我正确理解你的问题,我希望TIFF大于原始JPEG。请看这里的简单描述:

http://www.cambridgeincolour.com/tutorials/imagetypes.htm

答案 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);
    }