java-在不增加文件大小的情况下将JPEG图像转换为TIFF

我正在尝试将JPEG图像转换为TIFF.转换后的TIFF图像大三倍.

有人可以帮我得到原始JPEG大小的TIFF图像吗?

import com.sun.media.jai.codec.FileSeekableStream;     
import com.sun.media.jai.codec.ImageCodec;     
import com.sun.media.jai.codec.ImageDecoder;     
import com.sun.media.jai.codec.ImageEncoder;     
import com.sun.media.jai.codec.JPEGDecodeParam;       
import com.sun.media.jai.codec.SeekableStream;      
import com.sun.media.jai.codec.TIFFEncodeParam;      
import java.io.FileOutputStream;     


public class ConvertJPEGtoTIFF{    
public static void main(String args[]) throws Exception{            
  // read input JPEG file           
  SeekableStream s = new FileSeekableStream("C:\\Testsmall\\Desert.jpg");
  JPEGDecodeParam jpgparam = new JPEGDecodeParam();     
  ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", s, jpgparam);     
  RenderedImage op = dec.decodeAsRenderedImage(0);     
  FileOutputStream fos = new FileOutputStream("C:\\Testsmall\\index33.tiff");    
  TIFFEncodeParam param = new TIFFEncodeParam();     
  ImageEncoder en = ImageCodec.createImageEncoder("tiff", fos, param);     
  en.encode(op);
  fos.flush();
  fos.close();    
}     
}     

解决方法:

正如Erwin Bolwidt在评论中解释的那样:

TIFF是一种容器格式,可以包含不同类型的压缩或未压缩图像.但是,您正在使用TIFFEncodeParam的默认设置.正如您在Javadoc for the class中所读到的,这意味着没有压缩:

This class allows for the specification of encoding parameters. By
default, the image is encoded without any compression, and is written
out consisting of strips, not tiles.

因此,您的TIFF文件比使用有损图像压缩的JPEG文件大得多.

如果要减小文件大小,则必须指定压缩(使用setCompression).您可以使用DEFLATE进行无损压缩,或使用JPEG进行JPEG压缩(然后还应使用setJPEGEncodeParam设置JPEG参数).后者应产生类似于JPEG文件的文件大小.

但是请注意,TIFF通常与无损压缩一起使用.如果要使用JPEG压缩,请首先检查生成的TIFF文件的预期收件人是否可以处理它.

上一篇:在Java中显示TIFF图像


下一篇:标记TIFF文件的Java API