繁体   English   中英

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

[英]Convert JPEG image to TIFF without increasing file size

我想将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中读到的那样,这意味着没有压缩:

该类允许编码参数的规范。 默认情况下,图像在没有任何压缩的情况下进行编码,并且写出包含条带而不是图块。

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

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

但请注意,TIFF通常用于无损压缩。 如果要使用JPEG压缩,请首先检查您生成的TIFF文件的预期接收者是否可以处理它。

您可以通过设置压缩质量级别来控制质量。 不幸的是,以这种方式转换文件是有损的。 理想的方法是找到一个不解码的程序,然后重新编码jpeg数据,而是将其转换为tiff格式而不修改压缩。 我没见过这样的实用工具。 我不知道如何在编码案例中设置质量,但你可以尝试使用“jpeg:75”或“jpeg:50”代替“Jpeg”进行压缩(我的基础是tiffcp命令)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM