sábado, 17 de setembro de 2011

Java - Criando Thumbnail de uma imagem

Postarei hoje uma forma que encontrei, e que estou usando, para gerar thumbnail de uma imagem armazenada em byte[].

No meu caso, estou armazenando a imagem no banco de dados e tenho um bean Imagem que tem o atributo 'arquivo' do tipo byte[]. No momento que quero exibí-lo como um thumbnail, eu uso tal código. Esse código pode ser usado em Servlets, por exemplo. Estou usando para gerar um StreamedContent para o p:graphicImage do PrimeFaces.


Vamos ao código:


@Transient
private static final int MAX_THUMBNAIL_WIDTH = 100;
 
@Transient
public byte[] getThumbnail(byte[] arquivo){
   ImageIcon imageIcon = new ImageIcon(arquivo);
   Image inImage = imageIcon.getImage();
   double scale = (double) MAX_THUMBNAIL_WIDTH / (double) inImage.getWidth(null);
 
   int scaledW = (int) (scale * inImage.getWidth(null));
   int scaledH = (int) (scale * inImage.getHeight(null));
 
   BufferedImage outImage = new BufferedImage(scaledW, scaledH, BufferedImage.TYPE_INT_RGB);
 
   AffineTransform tx = new AffineTransform();
   if(scale < 1.0d){
      tx.scale(scale, scale);
   }
 
   Graphics2D g2d = outImage.createGraphics();
   g2d.drawImage(inImage, tx, null);
   g2d.dispose();
 
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   try {
      ImageIO.write(outImage, "jpeg", baos);
      return baos.toByteArray();
   } catch (IOException e) {
      e.printStackTrace();
   }
   finally{
      try {
         baos.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   return null;
}

quarta-feira, 7 de setembro de 2011

Java EE - Por onde começar?

Bom, quando eu queria começar a estudar para Java EE, tracei uma lista de passos de estudo que tem dado certo. Então pensei em ajudar aqueles que estão no Java SE, ou que nem mesmo começou a estudar Java e quer desenvolver para a web usando Java.

Começando com quem nem mesmo conhece Java SE:
- Aprenda pelo menos os conceitos e desenvolva programas em Java SE. Eu indico o livro "Use a cabeça! Java" ou sua versão em inglês (Head First! Java), caso a pessoa não tenha problemas com o mesmo. Eu estudei pelo Deitel e me arrependo. É um livro com leitura muito intediante e cansativa. Não cheguei a ler o que recomendei, mas já me foi muito recomendado e já li "Head First! HTML, CSS & XHTML", da mesma série, e adorei a forma como o livro é feita. Então, não tente pular as coisas, tenha boa lógica de programação e saiba os conceitos de Java.

Para quem já sabe programar em Java SE:
- Se você não sabe HTML, é melhor nem começar a estudar Java EE enquanto não aprender. Também é recomendável aprender Javascript e, se quiser fazer sites com boa aparência sem um webdesigner, saber CSS também. Eu aprendi HTML (e também XHTML, que exiguem mais algumas regras) e CSS com o livro que eu citei antes: Head First! HTML, CSS & XHTML. A versão dele em português é a mesma coisa, trocando "Head First" por "Use a cabeça". Já postei aqui um site com vários e-books em inglês, sendo que lá eu encontrei esse e outros livros. Javascript eu aprendi vendo video-aulas, lendo artigos e treinando mesmo. Lendo o livro que eu disse, você já vai praticar fazer webdesign básico.
- Aprenda a usar JDBC, caso não o saiba ainda. JDBC é usado para se comunicar com o banco de dados. E uma aplicação WEB sem banco de dados não é nada.
- Após aprender os itens acima, inicie seus estudos em JSP e Servlets. Comece aprendendo os conceitos do protocolo HTTP. Depois, aprenda os conceitos de servlet e como uma JSP é feita. Quando chegar em JSP, você verá bastante HTML misturado em scriptlets e depois aprenderá que é sempre bom evitá-los. Estude JSTL e, preferencialmente, desenvolva um projeto simples para fixar as idéias. Boa parte dos meus estudos, eu fiz vendo video-aulas. Mas a maioria, eu aprendi no desenvolvimento de um projeto. A medida que eu ia precisando das coisas, ia estudando, aprendendo e implementando. Aprendi, inclusive, JasperReports/iReport, que é um framework para gerar relatórios.
- Quando estiver seguro com JSP, Servlet e JDBC, comece a estudar os frameworks de mercado. Eu sugiro que inicie com Hibernate. Está cansado de fazer tanto SQL com JDBC? Pois o Hibernate (que segue a especificação JPA), após ser corretamente configurado, vai fazer todo o mapeamento objeto-relacional para você e facilitará todas as operações com banco de dados. Dificilmente você precisará criar queries, e se precisar, poderá usar HQL que funciona em qualquer banco de dados. Outro benefício é que ele funciona independente do banco de dados. Se você fosse mudar o BD de um projeto em JDBC, teria que mudar bastante as SQL. Com o Hibernate, você apenas muda alguns parametros na sua XML de configuração. Depois, vá em busca de outros frameworks (eu fui atrás de JSF e depois pretendo aprender Spring, mas você pode escolher Struts ao invés de JSF, por exemplo). Sugiro que pesquise qual framework tem mais futuro, é mais usado no mercado e o que cada um tem a te oferecer, antes de começar a estudar.