【问题标题】:Convert JPEG image to TIFF without increasing file size在不增加文件大小的情况下将 JPEG 图像转换为 TIFF
【发布时间】:2017-08-03 02:41:26
【问题描述】:

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

【问题讨论】:

  • 这与各种格式压缩图像的方式有关。通常情况下,您会发现由于他们采用不同的方法,您很难获得可比的表现
  • TIFF 是一种非常开放的容器格式,可以通过多种不同的方式进行压缩和编码。您还可以在 TIFF 中使用 JPEG 压缩(尽管通常 TIFF 与无损压缩一起使用,它的压缩效果不如 JPEG 等有损压缩算法)。例如:stackoverflow.com/questions/6760524/jpeg-in-tiff-encoding
  • @ErwinBolwidt:是的,完全正确。我冒昧地将您的评论扩展为答案,希望您不要介意。
  • @sleske 没问题,谢谢。没有时间给出完整的答案。

标签: java jpeg tiff image-compression


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    此类允许指定编码参数。经过 默认情况下,图像未经任何压缩进行编码,并写入 由条带组成,而不是瓷砖。

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多