A perda de qualidade é praticamente inevitável em redimensionamento de imagens, mas daria para passar alguns RenderingHints para tentar reduzir essa perda.
Salvar em formatos “lossless” como “PNG” também pode ajudar.
Inté.
ViniGodoy
A compressão que o Java usa para o .jpg é muito agressiva.
Dê uma olhada nesse artigo, que explica como usar um método de compressão de maior qualidade:
ViniGodoy, vi o artigo, alterei o codigo, porem continua sem qualidade. Aumentou um pouco o tamanho do arquivo só! hehehe
Segue alteração que fiz:
publicstaticStringredimensionar(StringfileName,inttamanhoMaximo)throwsIOException{intlargura=0;intaltura=0;FileInputStreamfis=newFileInputStream(newFile(fileName));BufferedImageimagem=ImageIO.read(fis);/** * Calcula proporcionalidade de acordo com o tamanhoMaximo */if(imagem.getWidth()>imagem.getHeight()){largura=tamanhoMaximo;altura=(int)(largura*imagem.getHeight()/imagem.getWidth());}else{altura=tamanhoMaximo;largura=(int)(altura*imagem.getWidth()/imagem.getHeight());}BufferedImagenew_img=newBufferedImage(largura,altura,BufferedImage.TYPE_INT_RGB);// new_img.getGraphics().drawImage(imagem, 0, 0, largura, altura, null);Graphics2Dg=new_img.createGraphics();g.drawImage(imagem,0,0,largura,altura,null);Stringtmp[]=fileName.split(".");Stringextensao="jpg";//tmp[tmp.length - 1];Stringnome=String.valueOf(Calendar.getInstance().getTimeInMillis())+"."+extensao;StringnewFileName=System.getProperty("java.io.tmpdir")+System.getProperty("file.separator")+nome;// ImageIO.write(new_img, "jpg", new File(newFileName));Iterator<ImageWriter>iter=ImageIO.getImageWritersByFormatName("jpeg");ImageWriterwriter=(ImageWriter)iter.next();ImageWriteParamiwp=writer.getDefaultWriteParam();iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);iwp.setCompressionQuality(1);// an integer between 0 and 1// 1 specifies minimum compression and maximum qualityFileImageOutputStreamoutput=newFileImageOutputStream(newFile(newFileName));writer.setOutput(output);IIOImageimage=newIIOImage(new_img,null,null);writer.write(null,image,iwp);writer.dispose();returnnewFileName;}
Valeu
ViniGodoy
Tente passar alguns renderinghints para o seu Graphics:
Você está aumentando o tamanho da imagem? Se estiver fazendo isso, não é só o problema do JPEG que faz diminuir a qualidade.
Ou seja, você tem de usar a dica do ViniGodoy.