我正在尝试将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();
}
}
答案 0 :(得分:3)
正如Erwin Bolwidt在评论中所解释的那样:
TIFF是一种容器格式,可以包含不同类型的图像,压缩或未压缩。但是,您使用的是TIFFEncodeParam
的默认设置。正如您在Javadoc for the class中所读到的,这意味着没有压缩:
此类允许指定编码参数。通过 默认情况下,图像在没有任何压缩的情况下进行编码,并被写入 由条带组成,而不是瓷砖。
因此,您的TIFF文件比使用有损图像压缩的JPEG文件大得多。
如果您想要更小的文件大小,则必须指定压缩(使用setCompression
)。您可以使用DEFLATE
进行无损压缩,或使用JPEG
进行JPEG压缩(然后还应使用setJPEGEncodeParam
设置JPEG参数)。后者应该产生类似于JPEG文件的文件大小。
但请注意,TIFF通常用于无损压缩。如果要使用JPEG压缩,请首先检查您生成的TIFF文件的预期接收者是否可以处理它。
答案 1 :(得分:0)
您可以通过设置压缩质量等级来控制质量。不幸的是,以这种方式转换文件是有损的。理想的方法是找到一个程序,该程序不对jpeg数据进行解码,然后对其进行重新编码,而是将其传输为tiff格式,而无需修改压缩率。我还没有看到这样的工具。 我不确定如何在编码情况下设置质量,但是可以尝试使用“ jpeg:75”或“ jpeg:50”代替“ Jpeg”进行压缩(我将其基于tiffcp命令)。 / p>