JImageResizer - Um Redimensionador de Imagens feito em Java1 Gabriel Silva2, Jeysel Martins3, Jair Alves Barbosa4 Resumo Imagens e fotografias tem sido amplamente compartilhadas atualmente em sites e redes sociais. Devido a essa popularidade, diversos sites se depararam com o problema de armazenamento dessas imagens, e por isso, tem implementado controles de envio para evitar que imagens muito grandes sejam armazenadas em suas bases de dados. Como resultado, os usuários destes sites tem dificuldade em compartilhar imagens muito grandes, por não conhecerem aplicativos que redimensionam imagens de forma fácil. Pensando nisso, resolveu-se elaborar um aplicativo que suprisse esta necessidade. Palavras-chave: Redimensionamento de imagens; Java 1. Introdução Graças aos avanços tecnológicos, atualmente podemos compartilhar e visualizar imagens usando computadores. Esses avanços possibilitam a criação de imagens cada vez mais bem definidas e que, ocupam mais espaço em memória, o que tem se mostrado um grande problema principalmente para serviços relacionados ao compartilhamento de imagens. Para se ter uma idéia do problema enfrentado num serviço de compartilhamento de imagens caso seja utilizada uma camera fotográfica de 12 Megapixels, cada imagem gerada por esta câmera terá, em média, 5 MegaBytes, isso significa que, se em uma rede social existirem 10 milhões de usuários e cada um deles fornecer uma imagem usada como referência, o sistema terá de armazenar algo em torno de 47 Terabytes. Por este motivo, sites e redes sociais que trabalham com imagens tem implementado técnicas para diminuir essa necessidade de armazenamentode imagens. Como exemplo, podemos usar grandes redes sociais, como o Facebook e o Twitter que possibilitam ao usuário o envio de fotografias para compartilhar com seus amigos e seguidores, e que, para controlar o tamanho ocupado em memória pelas imagens enviadas pelos usuários, implementaram sistemas que bloqueiam o envio de imagens muito grandes. 1 Trabalho desenvolvido como projeto de pesquisa no curso Bacharelado em Ciência da Computação da Universidade Católica de Brasília; 2 Aluno do curso de Bacharelado em Ciência da Computação; [email protected] 3 Professor Orientador da FSSW da UCB; [email protected] 4 Professor Co-Orientador da FSSW da UCB; [email protected] Obviamente, apesar de ser uma medida de segurança, essa funcionalidade causa transtornos para os usuários que tentam compartilhar fotografias grandes e não possuem ou não conhecem nenhuma aplicação que redimensione imagens. Atualmente, as aplicações disponíveis com a funcionalidade de redimensionamento de imagens exigem muito do computador, como o Adobe Photoshop, que além de ser um software pago exige recursos de hardware nem sempre disponíveis e ainda não disponibilizam redimensionamento de forma fácil e intuitiva.O desenvolvimento do JImageResizer tem como objetivo resolver esse problema fornecendo o redimensionamento de imagens sem exigir muito do computador, de uma foma fácil, com uma interface amigável e intuitiva para que mesmo um usuário com pouco ou nenhum conhecimento de informática possa redimensionar suas imagens e utilizá-las para compartilhar em sites e redes sociais. 2. Metodologia Para o desenvolvimento do JImageResizer, foi adotada a linguagem de programação Java que permite o desenvolvimento de uma aplicação independente de plataforma (portabilidade) e possui as API's (Application Programmin Interfaces) e ferramentas necessárias para a implementação da aplicação. As principais ferramentas utilizadas no desenvolvimento foram: API Image I/O: essa API é especializada na leitura e escrita de imagens. Toda a leitura e escrite de imagens no sistema foi feita utilizando essa API pois a mesma possibilita a abstração dos bytes que representam uma imagem em um único objeto, utilizado como entrada para renderizar a imagem na interface gráfica e para redimensionar a imagem utilizando a AWT; Swing: uma window toolkit para desenvolvimento de interfaces gráficas. Essa ferramenta foi utilizada para renderizar a interface gráfica por adotar um método de renderização independente do sistema operacional. Apesar de ser um pouco mais lenta, renderiza interfaces similares mesmo em sistemas operacionais diferentes; AWT: (Abstract Window Toolkit) utilizada para realizar o redimensionamento das imagens. A AWT foi utilizada por fornecer classes especializadas em tratamento de imagens e dentre esses “tratamentos”, ela também realiza redimensionamento. O sistema foi organizado em três partes simples, que podem ser vistas na imagem abaixo: • • • Leitura do arquivo: O usuário escolhe a imagem que deseja redimensionar. Nessa etapa, o sistema lê o arquivo escolhido e, com ajuda da API Image I/O, converte os bytes do arquivo em um objeto Image. Essa abstração permite que a saída dessa etapa seja compatível com a entrada da próxima etapa; Redimensionamento: O sistema, apresenta a imagem para o usuário no seu tamanho original e possibilita ao mesmo que informe novos valores para altura e comprimento. O sistema passa a ouvir as requisições do usuário e a cada modificação da altura ou largura da imagem o sistema utiliza as classes AWT para redimensionar a imagem e apresentar o novo resultado para o usuário. Enquanto redimensiona, o usuário pode visualizar a imagem no novo tamanho e o espaço estimado que a imagem usará de memória; Escrita da imagem: Após redimensionar a imagem, o usuário pode salvá-la em arquivo. Nessa etapa, o sistema, novamente, utiliza a API Image I/O dessa vez para escrever o objeto Image redimensionado em um arquivo escolhido pelo usuário. Essas três etapas são apresentadas para o usuário por meio de uma interface gráfica criada utilizando Swing. O desenvolvimento da interface teve como objetivo deixar o sistema intuitivo e fácil de usar. O Swing possibilita a criação componentes gráficos com uma programação Orientada a Objetos, o que abstrai a complexidade da criação de interfaces e possibilita maior flexibilidade no desenvolvimento delas. A saída do sistema é a imagem redimensionada. Como característica adicional, o sistema possibilita ainda a redução do tamanho ocupado em memória mesmo sem redimensionar a imagem, caso a imagem fonte tenha uma resolução muito alta, pela redução da qualidade da mesma. 4. Resultados A aplicação final possibilita o redimensionamento de imagens através de uma interface gráfica intuitiva, o que garante que mesmo usuários com pouco conhecimento técnico consigam utilizá-la, em um computador sem grandes recursos de hardware e em diferentes plataformas, por ter sido desenvolvida em Java. 5. Conclusão O JImageResizer se mostrou muito útil no redimensionamento de imagens para compartilhamento, o que criou a possibilidade de módulos futuros que consigam redimensionar várias imagens ao mesmo tempo e armazenar o resultado em arquivos compactados para compartilhamento via email, por exemplo. 6. Referências Bibliográficas ORACLE. API Swing. Disponível em http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/package-summary.html. Acessado em 15 de abril de 2011. ORACLE. API AWT. Disponível em http://download.oracle.com/javase/1.4.2/docs/api/java/awt/package-summary.html. Acessado em 15 de abril de 2011. ORACLE. Class ImageIO. Disponível em http://download.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html. Acessado em 15 de abril de 2011.