[RESOLVIDO] Redimensionar imagem

Oi pessoal, dúvida de um sistema já em funcionamento. Criei uma ferramenta que faz upload de uma imagem, recorta a imagem, salva esta imagem recortada e cria uma miniatura(Esse é o problema).
Tudo ocorre ok, mas a miniatura, no momento em que eu a salvo, fica com uma especie de layer de cor em cima dela, a imagem é toda branca e ele cobre com um alpha sepia mais ou menos, até agora não sei o que pode ser e estou doido com isso já kkkkkkk, segue o código que realiza o redimensionamento. O código que precede não tem erros.

public void salvarImagemRecortada{
.
.
BufferedImage miniatura = ImageIO.read(new File(newFileName));
ImageIO.write(resizeTrick(miniatura, 100, 55), "jpeg", new File(newFileName2));
.
.
}

private static BufferedImage resize(BufferedImage image, int width, int height) {
        int type = image.getType() == 0 ? BufferedImage.TYPE_INT_RGB : image.getType();
        BufferedImage resizedImage = new BufferedImage(width, height, type);
        Graphics2D g = resizedImage.createGraphics();
        g.setComposite(AlphaComposite.Src);
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawImage(image, 0, 0, width, height, null);
        g.dispose();
        return resizedImage;
    }

    private static BufferedImage resizeTrick(BufferedImage image, int width, int height) {
        image = createCompatibleImage(image);
        image = resize(image, 100, 100);
        image = blurImage(image);
        return resize(image, width, height);
    }

    public static BufferedImage blurImage(BufferedImage image) {
        float ninth = 1.0f / 9.0f;
        float[] blurKernel = {
            ninth, ninth, ninth,
            ninth, ninth, ninth,
            ninth, ninth, ninth
        };

        Map<RenderingHints.Key, Object> map = new HashMap<RenderingHints.Key, Object>();
        map.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        map.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        map.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        RenderingHints hints = new RenderingHints(map);
        BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, blurKernel), ConvolveOp.EDGE_NO_OP, hints);
        return op.filter(image, null);
    }

    private static BufferedImage createCompatibleImage(BufferedImage image) {
        GraphicsConfiguration gc = BufferedImageGraphicsConfig.getConfig(image);
        int w = image.getWidth();
        int h = image.getHeight();
        BufferedImage result = gc.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
        Graphics2D g2 = result.createGraphics();
        g2.drawRenderedImage(image, null);
        g2.dispose();
        return result;
    }

n tem exception, já debuguei e está tudo ok, n entendo o porquê de isso estar acontecendo. Estou postando um exemplo de recorte aqui dele e da miniatura.

obs, a imagem aqui no upload da miniatura parece estar ok, mas se você fizer o download dela, você verá o sépia.



cara, não analisei o seu código e não seu o que pode ser… mas tenta com esse meu para ver se resolve…

[code]/**
*
* @param tamanhoMax tamanho máximo que vai ficar a imagem
* @param caminho caminho da imagem original
* @param novoCaminho caminho da imagem depois de alterada
* @param formatoImagem jpg,pgn,gif
* @throws IOException
*/
private static void redimensionaImagem(int tamanhoMax,String caminho,String novoCaminho,String formatoImagem) throws IOException
{
BufferedImage image = ImageIO.read(new File(caminho));

		System.out.println(image.getWidth()+" x "+image.getHeight());
		
		int altura=0;
		int largura=0;
		
		
		if(image.getWidth()<tamanhoMax && image.getHeight()<tamanhoMax)
		{
			altura =image.getHeight();
			largura = image.getWidth();
		}
		else
		{
			if(image.getWidth() == image.getHeight())
			{
				altura = tamanhoMax;
				largura = tamanhoMax;
			}
			else if(image.getWidth() > image.getHeight())
			{
				float x = (image.getHeight()*100)/image.getWidth();
				float diferenca = (100-x)/100;
				
				altura = (int) (tamanhoMax - (tamanhoMax*diferenca));
				largura = tamanhoMax;
			}
			else if(image.getWidth() < image.getHeight())
			{
				float x = (image.getWidth()*100)/image.getHeight();
				float diferenca = (100-x)/100;
				
				largura = (int) (tamanhoMax - (tamanhoMax*diferenca));
				altura = tamanhoMax;
			}
		}
		
		BufferedImage imageCopy = new BufferedImage(largura, altura, image.getType());
		
		Graphics2D g2d = imageCopy.createGraphics();  
		g2d.drawImage(image, 0, 0, largura, altura, null);  
		g2d.dispose();  
		
		
		ImageIO.write(imageCopy, formatoImagem, new File(novoCaminho));
	}[/code]

não entendi a utilização dele. Como faço para setar altura e largura na chamada do método?

use assim:

[code]
BufferedImage image = ImageIO.read(new File(caminho));
BufferedImage imageCopy = new BufferedImage(largura, altura, image.getType());

        Graphics2D g2d = imageCopy.createGraphics();    
        g2d.drawImage(image, 0, 0, largura, altura, null);    
        g2d.dispose();    
          
          
        ImageIO.write(imageCopy, formatoImagem, new File(novoCaminho));  [/code]

Consegui fazê-lo funcionar e também entendi o porque da coloração da imagem, é reaproveitamento de buffer já escrito, eu não estava chamando o caminho para o redimensionamento, e sim aproveitando o que já estava em buffer. No final, todos aqueles métodos que eu havia testado estavam funcionando kkkkkkkkk

vlw a atenção alves.felipe
[tópico resolvido]