Java library for JPG Compression

I have to compress the JPG images with good quality. Please suggest a good java library for image compression.Thanks
[130 byte] By [DavidATa] at [2007-11-27 3:49:22]
# 1
check this... http://reader.imagero.com/
Teja_Chaitu_Kantamnenia at 2007-7-12 8:53:13 > top of Java-index,Java Essentials,New To Java...
# 2
The J2SE already comes with the capacity to do that:package javax.imageio: http://java.sun.com/javase/6/docs/api/javax/imageio/package-summary.html
DrLaszloJamfa at 2007-7-12 8:53:13 > top of Java-index,Java Essentials,New To Java...
# 3

Demo:

import java.awt.*;

import java.net.*;

import java.io.*;

import java.util.*;

import javax.imageio.*;

import java.awt.image.*;

import javax.swing.*;

import javax.swing.event.*;

public class ImageCompressExample implements Runnable, ChangeListener {

private BufferedImage original;

private JLabel compressedLabel;

private JSlider slider;

private int byteCount;

public ImageCompressExample(String url) throws IOException {

original = ImageIO.read(new URL(url));

}

public void run() {

slider = new JSlider();

slider.setMajorTickSpacing(10);

slider.setPaintTicks(true);

slider.setPaintLabels(true);

slider.addChangeListener(this);

compressedLabel= new JLabel();

updateCompressedLabel();

JPanel labelPanel = new JPanel(new GridLayout(2,1));

JLabel originalLabel = new JLabel(new ImageIcon(original));

originalLabel.setBorder(BorderFactory.createTitledBorder("original image"));

labelPanel.add(originalLabel);

labelPanel.add(compressedLabel);

JFrame f = new JFrame();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().add(labelPanel, BorderLayout.CENTER);

f.getContentPane().add(slider, BorderLayout.SOUTH);

f.pack();

f.setResizable(false);

f.setLocationRelativeTo(null);

f.setVisible(true);

}

public void stateChanged(ChangeEvent e) {

if (!slider.getValueIsAdjusting())

updateCompressedLabel();

}

private void updateCompressedLabel() {

int value = slider.getValue();

compressedLabel.setIcon(new ImageIcon(compress(original, value/100f)));

String title = String.format("compression quality = %d%%, bytes = %,d", value, byteCount);

compressedLabel.setBorder(BorderFactory.createTitledBorder(title));

}

public BufferedImage compress(BufferedImage image, float quality) {

try {

Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("jpeg");

ImageWriter writer = writers.next();

ImageWriteParam param = writer.getDefaultWriteParam();

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

param.setCompressionQuality(quality);

ByteArrayOutputStream out = new ByteArrayOutputStream();

writer.setOutput(ImageIO.createImageOutputStream(out));

writer.write(null, new IIOImage(image, null, null), param);

byte[] data = out.toByteArray();

this.byteCount = data.length;

ByteArrayInputStream in = new ByteArrayInputStream(data);

return ImageIO.read(in);

} catch (IOException e) {

throw new RuntimeException(e);

}

}

public static void main(String[] args) {

try {

String url = "http://www.rsportscars.com/foto/03/carreragt06.jpg";

EventQueue.invokeLater(new ImageCompressExample(url));

} catch (IOException e) {

e.printStackTrace();

}

}

}

DrLaszloJamfa at 2007-7-12 8:53:13 > top of Java-index,Java Essentials,New To Java...