将JPEG图像转换为TIFF格式而不增加文件大小

4

我正在尝试将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();    
}     
}     

这与各种格式如何压缩图像有关。通常你会发现它们难以进行可比较性的表现,因为它们采取了不同的方法。 - MadProgrammer
4
TIFF是一种非常开放的容器格式,可以通过多种不同的方式进行压缩和编码。你也可以在TIFF中使用JPEG压缩(尽管通常TIFF会使用无损压缩,这种压缩算法与JPEG这样的有损压缩算法相比效果不如)。例如,请参见:http://stackoverflow.com/questions/6760524/jpeg-in-tiff-encoding - Erwin Bolwidt
@ErwinBolwidt:是的,完全正确。我冒昧地将您的评论扩展为一个答案,希望您不介意。 - sleske
没问题,谢谢。 没有时间给出完整答案。 - Erwin Bolwidt
2个回答

3
根据Erwin Bolwidt在评论中的解释:TIFF是一种容器格式,可以包含不同种类的图像,经过压缩或未经压缩。然而,您使用了TIFFEncodeParam的默认设置。正如您可以在类的Javadoc中阅读到的那样,这意味着没有压缩:
“该类允许指定编码参数。默认情况下,图像将被编码而不进行任何压缩,并以条带而非块写出。”
因此,您的TIFF文件比使用有损图像压缩的JPEG文件要大得多。
如果您想获得更小的文件大小,必须指定压缩(使用setCompression)。您可以使用DEFLATE进行无损压缩,或使用JPEG进行JPEG压缩(这时您还应使用setJPEGEncodeParam设置JPEG参数)。后者应产生与JPEG文件大小相似的文件大小。
但请注意,TIFF通常使用无损压缩。如果要使用JPEG压缩,请首先检查所生成的TIFF文件的预期接收者是否能够处理它。

0

您可以通过设置压缩质量级别来控制质量。不幸的是,这种转换方式会导致损失。理想的方法是找到一个程序,它不会解码然后重新编码jpeg数据,而是将其传输到tiff格式而不修改压缩。我没有看到这样的实用程序。 我不确定如何在您的编码情况下设置质量,但您可以尝试在压缩时使用“jpeg:75”或“jpeg:50”代替仅使用“Jpeg”(我基于tiffcp命令进行推断)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接