Preciso diminuir o tamanho de uma imagem

Ola, eu não tenho mta experiencia em java, na verdade quase nenhuma… eu estou fazendo o ultimo ano de Sistemas de Informação, e para o meu TCC meu orientador pediu q eu implementasse uma em java para diminuir o tamanho de uma figura…

Sera que alguem ai sabe me falar, vai ser de grande ajuda pois preciso disso para conseguir me formar… e ate agora meu projeto esta andando bem devagar pois não estou conseguindo fazer esse bendito codigo funcionar.

Mto obrigado.

Fiz esta classe a algum tempo, deve te ajudar:

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.RenderedImage;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.FileInputStream;
public class ImgTools extends java.awt.Panel
{
	private BufferedImage img;
	public ImgTools(InputStream in) {
		try {
			JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
			img = decoder.decodeAsBufferedImage();
		}
		catch (Exception e) {

		}
	}
	public ImgTools(String url) {
		try {
			InputStream in = new FileInputStream(url);
			JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
			img = decoder.decodeAsBufferedImage();
		}
		catch (Exception e) {

		}
	}
	public ImgTools(Image imgobj) {
		try {
	        img = new BufferedImage(imgobj.getWidth(this), imgobj.getHeight(this), BufferedImage.TYPE_INT_RGB);
			Graphics2D grapImg = img.createGraphics();
			grapImg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
	        grapImg.drawImage(imgobj,0,0,this);
		}
		catch (Exception e) {

		}
	}
	public int getWidth () {
			return img.getWidth();
	}
	public int getHeight () {
			return img.getHeight();
	}
	public void resize(int width, int height) {	
		if ((width > 0 && height == 0) || (width == 0 && height > 0))
		{
			int size = (width > 0) ? width : height;
			width = img.getWidth();
			height = img.getHeight();
		    float fRatio = (float)img.getWidth() / (float)img.getHeight();
		    if (width > size) {
				width = size;
			    height = (int)((float)size / fRatio);
		    } 
		    if (height > size) {
			    height = size;
			    width = (int)((float)size * fRatio);
			}
		}
		BufferedImage imgNew = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics2D grapImg = imgNew.createGraphics();
		grapImg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
		AffineTransform xform = AffineTransform.getScaleInstance((double)width/img.getWidth(), (double)height/img.getHeight());
		grapImg.drawRenderedImage(img, xform);
		grapImg.dispose();
		img = imgNew;
	}
	public Image getImage() {
		return img.getScaledInstance(img.getWidth(), img.getHeight(), Image.SCALE_DEFAULT);
	}
	public void setOutputImage(OutputStream out, float resolution) {
		try {		
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			JPEGEncodeParam jpegParams = encoder.getDefaultJPEGEncodeParam(img);
			jpegParams.setQuality(resolution, false);
			encoder.setJPEGEncodeParam(jpegParams);
			encoder.encode(img);
		}
		catch (Exception e) {

		}
	}
}

No entanto esta class esta preparada apenas para trabalhar com JPGs, exemplo:

ImgTools imgTools = new ImgTools("image.jpg");
imgTools.resize(500, 400);
imgTools.setOutputImage(out, 0.75);

Se quiser fazer um Resize proporcional, basta colocar o Width ou o Height a zero… assim:

imgTools.resize(500, 0);

ou

imgTools.resize(0, 400);

:wink:

Kra vc poderia me mandar o codigo pronto so pra mim copiar e colar no eclipse pra ele rodar?
e q na verdade nao manjo nada de java… e esse mes ja tenho q começar a fazer artigos e talz… e meu trabalho ta parado…
se alguem pude me manda uma classe funcionando pra faze a reduçao de imagens…
ou podem entrar em contato comigo por email spaykz@hotmail.com

[]s

Redimensionar imagens com Java

Este codigo cria uma figura .jpg toda escura da figura q eu tentei redmensionar…
vc sabe pq?

vlw

Uma observação, tive problemas ao salvar a imagem redimencionada com o mesmo nome da imagem original.

É, salvando em cachê não é isso?

Bom, mas isso acontece com muita gente.

Bom, meu problema é que preciso redimensionar um upload feito no JSP, mas não dá pra usar ImageTools pq não está reconhecendo.

Cara… toda magica daquele código acontece em:

BufferedImage imgNew = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
         Graphics2D grapImg = imgNew.createGraphics();  
         grapImg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
         AffineTransform xform = AffineTransform.getScaleInstance((double)width/img.getWidth(), (double)height/img.getHeight());  
         grapImg.drawRenderedImage(img, xform);  
         grapImg.dispose();

Da uma lida que voce entende.