Search code examples
javaimagejavax.imageiojaiicafe

Mutipage TIFF creation with different compressions


I want to encode 2 jpeg images to a TIFF file with 3 pages. The specification is as follow.

  1. JPEG compressed with quality of 35 of image 1
  2. CCITT compressed image of image 1
  3. CCITT compressed image of image 2

I am able to generate separate tiff files for above 3 types. But when I try to combine them I have to give a single compression

param(`params.setCompression(TIFFEncodeParam.COMPRESSION_PACKBITS);`) 

which expands the size.

How do I set different compression to different pages?


Solution

  • After trying with JAI. I switched to icafe

        BufferedImage[] images = new BufferedImage[3];
        images[0]=compressedFront;
        images[1]=frontBinaryImage;
        images[2]=backBinaryImage;
    
    
        ImageParam.ImageParamBuilder builder = ImageParam.getBuilder();
    
        TIFFOptions tiffOptions = new TIFFOptions();
        tiffOptions.setTiffCompression(Compression.JPG);
        tiffOptions.setJPEGQuality(35);
    
    
        ImageParam[] param = new ImageParam[3];
        param[0] =  builder.colorType(ImageColorType.GRAY_SCALE).imageOptions(tiffOptions).build();
    
        tiffOptions = new TIFFOptions(tiffOptions); // Copy constructor
        tiffOptions.setTiffCompression(Compression.CCITTFAX4);
    
    
        param[1] =  builder.colorType(ImageColorType.BILEVEL).imageOptions(tiffOptions).build();
    
        tiffOptions = new TIFFOptions(tiffOptions);
        tiffOptions.setTiffCompression(Compression.CCITTFAX4);
    
        param[2] = builder.colorType(ImageColorType.BILEVEL).imageOptions(tiffOptions).build();
    
        TIFFTweaker.writeMultipageTIFF(rout, param, images);
    
        rout.close();
        fout.close();