0

我编写了一个方法,应该使用 Java 中的 ImageIO 库来压缩 JPEG 图像。但是,当我尝试压缩一些图像时,它们的大小实际上会增加!(从大约 21 kb 到 36 kb)。知道为什么会这样吗?我的代码如下所示:

public boolean compressJPG(String originPath, String destinationPath){
    float compression = 0.1f;
    File in = new File(originPath);
    File out = new File(destinationPath);
    try {
        RenderedImage image = ImageIO.read(in);
        ImageWriter writer = null;
        Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
        if(iter.hasNext()){
            writer = (ImageWriter) iter.next();
        }
        ImageOutputStream outStream = ImageIO.createImageOutputStream(out);
        writer.setOutput(outStream);
        MyImageWriteParam iwparam = new MyImageWriteParam();
        iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ;
        iwparam.setCompressionQuality(compression);
        writer.write(null, new IIOImage(image, null, null), iwparam);
        outStream.flush();
        writer.dispose();
        outStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return true;
}

 public float setJPGCompressionQuality(float quality) {
    if (quality < 0.0F || quality > 1.0F) {
        throw new IllegalArgumentException("Quality out-of-bounds!");
    }
    return 256 - (quality * 256);
}
4

1 回答 1

2

这可能是由于ImageWriteParam.MODE_EXPLICIT模式而发生的。

如果交集不为空,则写入将从第一个子采样像素开始,并根据 IIOParam.setSourceSubsampling 指定的水平和垂直子采样因子在相交边界内包括其他像素。

使用 MODE_DEFAULT 而不是 MODE_EXPLICIT。

于 2013-09-25T13:57:58.470 回答