spaykz
Junho 9, 2006, 1:46am
#1
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);
spaykz
Junho 23, 2006, 7:21pm
#3
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
spaykz
Junho 28, 2006, 12:51am
#5
Este codigo cria uma figura .jpg toda escura da figura q eu tentei redmensionar…
vc sabe pq?
vlw
bzy
Março 27, 2008, 8:38am
#6
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.