import java.awt.image.BufferedImage; import java.awt.Image; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.ImageWriteParam; import javax.imageio.stream.ImageOutputStream; public class ImageWriterTest4 extends ImageWriterTest1 { public ImageWriterTest4(String sourceFile, String destinationFile, float quality) { super(); BufferedImage image = readImage(sourceFile); writeImage(image, destinationFile, quality); } protected void writeImage(BufferedImage image, String filename, float quality) { Iterator writers = ImageIO.getImageWritersBySuffix(getSuffix(filename)); if (writers.hasNext()) { ImageWriter writer = (ImageWriter)writers.next(); try { ImageOutputStream stream = ImageIO.createImageOutputStream(new File(filename)); writer.setOutput(stream); ImageWriteParam param = writer.getDefaultWriteParam(); if (param.canWriteCompressed()) { param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(quality); } else { System.out.println("Compression is not supported."); } writer.write(null, new IIOImage(image, null, null), param); writer.dispose(); return; } catch (IOException ex) { ex.printStackTrace(); } } } public static void main(String[] args) { if (args.length == 3) { new ImageWriterTest4(args[0], args[1], Float.parseFloat(args[2])); } else { System.out.println("Usage: java ImageWriterTest4 "); } } }