Hi,
I'd like to do following with a jpeg file:
1) obtains the width and height of a jpeg image.
2) reduce the size of a jpeg image, example, its file size is 1MB, i'd
like to reduce it to 500k
any ideas how to achieve these? thanks.
Angelo
I have a little utility that I use to save JPEGs with more compression
than you get with ImageIO.write(). It allows you to select the amount
of compression so here's what I suggest.
1) Read the image file with ImageIO you can get the dimensions from the
BufferedImage
2) Use my utility to write the image to a file
3) Check the size of the written file, if it is small enough
you're done if not increase the compression do #2 again
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.imageio.stream.*;
import javax.imageio.plugins.jpeg.*;
public class JPEGWriter {
public static void write(RenderedImage image, float quality, File file)
throws IOException {
if (quality < 0.0f || quality > 1.0f)
throw new IllegalArgumentException("0.0 < Quality < 1.0");
ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("JPEG");
if (!iter.hasNext())
throw new IOException("No Writers Available");
writer = (ImageWriter)iter.next();
if (file.exists())
file.delete();
ImageOutputStream ios = ImageIO.createImageOutputStream(file);
writer.setOutput(ios);
JPEGImageWriteParam iwp = new JPEGImageWriteParam(null);
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(quality);
writer.write(null,new IIOImage(image,null,null),iwp);
ios.flush();
writer.dispose();
ios.close();
}
}