Olá pessoal. Estou com problema para lidar com imagens. Estou criando uma aplicação WEB que
quando um usuário digita um determinado código em um campo, o sistema busca a imagem
correspondente é exibe na página.O problema é que estas imagens podem aparecer em dois
tamanhos, quando aparece no tamanho grande (original) não há problema,
mas quando aparece no formato pequeno a imagem perde a qualidade, obs( o problema não é dela
ficar deformada e sim baixa resolução). Estou definindo o tamanho da imagem fia <tag> por meio
do width e height. Se eu for criar uma imagem para cada caso vai me dar muito trabalho, pois
são muitas imagens. Alguém conhece alguma solução para este caso?
Problema ao redimensionar imagens
T
5 Respostas
M
Olá, talvez seja interessante você criar um código para redimensionar a imagem.
Vou te passar um até interessante:import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.swing.ImageIcon;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class Miniatura {
private String imagesDir = "c:/temp/";
public static void main(String[] args) {
new Miniatura().iniciar();
}
public void iniciar() {
int width = 200; // Lagura da miniatura
int height = 200; // Altuta da miniatura
int quality = 80; // Qualidade da imagem [0~100]
File file = new File(imagesDir + "DSC00001.JPG");
try {
Image image = new ImageIcon(file.toURL()).getImage();
redimensionar(image, width, height, quality, file.getName());
System.out.println("A imagem " + file.getName()
+ " foi redimensionada com sucesso");
} catch (MalformedURLException e) {
System.out.println("MalformedURLException " + e.getMessage());
}
}
// Método para redimensionar imagens (criar thubmnails)
private void redimensionar(Image image, int width, int height, int quality,
String nomeImagem) {
// Calculos necessários para manter as propoçoes da imagem, conhecido
// como "aspect ratio"
double thumbRatio = (double) width / (double) height;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
height = (int) (width / imageRatio);
} else {
width = (int) (height * imageRatio);
}
// Fim do cálculo
BufferedImage thumbImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, width, height, null);
BufferedOutputStream out;
try {
out = new BufferedOutputStream(new FileOutputStream(imagesDir
+ nomeImagem));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder
.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
} catch (FileNotFoundException e) {
System.out.println("FileNotFoundException " + e.getMessage());
} catch (ImageFormatException e) {
System.out.println("ImageFormatException " + e.getMessage());
} catch (IOException e) {
System.out.println("IOException " + e.getMessage());
}
}
}
P
Marco,
Cara funcionou perfeitamente! Salvou minha vida! Valew.
abraços,
Desculpa meio q reviver o tópico… mais pode ajudar alguém…
usar o pacote com.sun.image.codec.jpeg pode dar problemas, e aconteceu comigo ^^…
aki: http://stackoverflow.com/questions/1906673/import-com-sun-image-codec-jpeg
e aki: http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
D
Olá pessoas, sou novo no fórum e reparei uma coisa: este código é para desktop, bom eu procuro uma solução utilizando JAI ou não, só que para web, com servlets ou até JSP mesmo.
Alguém sabe como?
- PS: já tentei capturar as dimensões no meu JSP com .getWidth() mas não é reconhecido este método . =/
att
D
Pow muito bom ;]
Criado 15 de setembro de 2008
Ultima resposta 25 de jun. de 2009
Respostas 5
Participantes 5
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo JavaScript Assertivo: Testes e qualidade de codigo em... Por Gabriel Ramos — Casa do Codigo