JImageResizer, redimensionando imagens em lote com Thumbnailator e WindowBuilder Pro
Autor: Rodrigo Menezes | Publicado: 2012-06-17T14:25:00-07:00

Semana passada eu procurei um plugin para trabalhar com Swing no Eclipse e para minha surpresa descobri que o Google tinha lançado o&nbsp;WindowBuilder Pro, um plugin para o Eclipse que se provou até agora ser o melhor para edição de layout para Java, dando suporte a Swing e GWT.



WindowBuilder&nbsp;Pro



Muitas vezes eu corria para o Netbeans quando precisava fazer algum programa em Swing, pois seu editor é&nbsp;amigável, mas o código gerado para os componentes UI não pode ser modificado fora do editor visual e além disso ele gera um código muito&nbsp;caótico&nbsp;para manutenção.

Depois de testar o&nbsp;WindowBuilder&nbsp;eu posso dizer que o melhor editor, fácil de usar e com muitos recursos ele trabalha de maneira bi-direcional, ou seja eu posso editar o código dos componentes tanto no editor visual quando no fonte de maneira&nbsp;transparente,&nbsp;principalmente&nbsp;porque ele gera um código super limpo.



Código gerado pelo WindowBuilder Pro



Outra grande vantagem é dele dar suporte alguns Layout Managers como o MiG Layout&nbsp;que é simples de trabalhar e bastante poderoso.

Tive a ideia de fazer um pequeno projeto para testar o&nbsp;WindowBuilder e resolvi criar um aplicativo muito simples de redimensionamento de imagens em lote.

Meu pai sempre me pede para redimensionar imagens para ele e eu costumo fazer isto em vários programas, então eu pensei em criar um redimensionador de imagens o simples e básico&nbsp;possível. Aproveitei uma ótima biblioteca criada para geração de thumbnail, o Thumbnailator&nbsp;e comecei o projeto.

Graças a simplicidade do&nbsp;Thumbnailator, a tarefa de redimensionar a imagem, salvando em outro arquivo se resumiu a esta linha abaixo.



Thumbnails.of(file).size(tamanho, tamanho).outputQuality(quality).toFile(fileDestino);





Um dos problema iniciais que eu tive foi como obter o tamanho em pixels das imagens sem precisar ler todo seu&nbsp;conteúdo e após uns minutos achei o código abaixo obtido neste link.


 public static Dimension getImageDimension(File file) {
  ImageInputStream in = null;
  try {
   in = ImageIO.createImageInputStream(file);
   final Iterator&lt;ImageReader> readers = ImageIO.getImageReaders(in);
   if (readers.hasNext()) {
    ImageReader reader = (ImageReader) readers.next();
    try {
     reader.setInput(in);
     return new Dimension(reader.getWidth(0), reader.getHeight(0));
    } finally {
     reader.dispose();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (in != null)
    try {
     in.close();
    } catch (IOException e) { }
  } 
  return null;
 }


Minha intenção desde o inicio foi criar algo Open Source, então em breve vou colocar o projeto em algum Code Hosting voltado para projetos Open Sources como o Google Code.

Atualmente estou mantendo este projeto no Assembla, que se mostrou um&nbsp;ótimo&nbsp;serviço gratuito que não obriga que o projeto seja publico. Quem tiver interesse me avisa que eu publico o zip com source aqui mesmo.

Para quem tiver interesse em usar o JImageResizer, pode fazer o download nos link abaixo:
-&nbsp;JImageResizer 0.01