在不增加位深度的情况下将TIF转换为JPG

9
我正在尝试将TIF图像转换为JPG图像。我正在使用以下代码:
    SeekableStream s = new FileSeekableStream(tiffUrl);
    TIFFDecodeParam param = null;
    ImageDecoder dec = ImageCodec.createImageDecoder(EXT_TIFFX, s, param);
    RenderedImage op = dec.decodeAsRenderedImage(0);
    FileOutputStream fos = new FileOutputStream(jpgUrl);
    JPEGEncodeParam jpgparam = new JPEGEncodeParam();
    jpgparam.setQuality(quality);               
    ImageEncoder en = ImageCodec.createImageEncoder(EXT_JEPGX, fos, jpgparam);
    en.encode(op);
    fos.flush();
    fos.close();
    s.close();

在转换之前,我的图像大小大约为92KB,位深度为1。 转换后,我的新JPG图像大小约为1573KB,位深度为24。
我需要将我的新图像管理在100KB以下。如果我将位深度控制到1本身,我想这可以做到。
有没有解决方案可以帮助我执行这个操作?

请查看libnetpbm,还有一些命令行工具(netpbm)。如果jfif(.jpeg)支持1位像素,则我认为它们可以完成此操作。 - ctrl-alt-delor
4
保持图像大小在100KB以下的简单方法是保持原样。JPEG压缩不支持1位像素深度,对于这种类型的图像无用。 - r3mainer
@squeamishossifrage所说的没错。TIFF有几种针对1比特/像素数据进行优化的无损压缩算法。对于JPEG,你可以使用灰度,但这将导致每像素8比特(并且是有损的)。JBIG会更适合。 - Harald K
1
如果你的像素只有1位深度,那么为什么要尝试JPEG压缩呢?这种压缩是基于平滑小的颜色变化。但在这里,你只有2种颜色,不存在小的颜色变化。 - Joffrey
1个回答

1

依我所见,你应该使用Apache Commons Imaging,因为它是一种先进而完整的图像解决方案。我使用它将Tiff图像写入PDF。有很多示例。希望这能帮到你!


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