Comprimir .PNG

Estou precisando comprimir o maximo possivel imagens png, independente se vai perder ou nao a qualidade.

Hoje uso esse metodo para gravar em disco, porém ele nao diminue a qualidade. Não achei nenhuma classe para tratar disso.

[code]
Image imagem = null;

	try {
		imagem = ImageIO.read(new File(caminhoImg));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  
     
          int new_w , new_h ;
          if (imagem.getWidth(null) > imagem.getHeight(null)){
        	 new_w = 180; 
        	 new_h = 160;
          }else if(imagem.getWidth(null) < imagem.getHeight(null)){
        	 new_w = 150; 
        	 new_h = 160;
          } else {
         	 new_w = 160; 
        	 new_h = 160;
          }
          imagem =  imagem.getScaledInstance(new_w, new_h, Image.SCALE_FAST); 
               
         BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_ARGB);  

         Graphics2D g = new_img.createGraphics();   
         g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
         g.drawImage(imagem, 0, 0, new_w, new_h, null);  
     
       try {
		ImageIO.write(new_img, "PNG", new File(caminhoImg));
	} catch (IOException e) {
		
		e.printStackTrace();
	}  
}[/code]

agradeço qualquer ajuda.

dá uma olhada.

Olá otavio, vi sua dica, mas isso é o que já estou fazendo.
eu precisava de algo pra diminuir não o tamanho, mas a qualidade do png.