Pregunta

I have written a method that should compress a JPEG image using the ImageIO lib from Java. However, when I attempt to compress some images, their size actually increases! (from approx 21 kb to 36 kb). Any idea why this is happening? My code is shown below:

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);
}
¿Fue útil?

Solución

It may happened due to mode ImageWriteParam.MODE_EXPLICIT.

If the intersection is non-empty, writing will commence with the first subsampled pixel and include additional pixels within the intersected bounds according to the horizontal and vertical subsampling factors specified by IIOParam.setSourceSubsampling.

Use MODE_DEFAULT instead of MODE_EXPLICIT.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top