Segue abaixo uma classe em java que converte um texto em uma imagem. Tem muitos parametros que estão estáticos e ela precisa ser melhorada... Isso mesmo, carece JavaDoc e torná-la mais genérica. A idéa aqui é ser mais um material na Net que pode servir nas pesquisas sobre o assunto. Quando eu tiver um tempinho eu melhoro ela.
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
/**
* Classe utilitária para criar uma imagem a partir de um texto.
* Essa classe não tem como objetivo ser utilizada para recursos de captcha.
* Possivel uso dessa classe: pares de um teclado virtual.
* Exemplo:
* Text2ImageHelper.criar("1 ou 9","jpeg",response.getOutputStream());
*
*/
public class Text2ImageHelper {
/**
* Ponto de atenção, caso tenhamos muitas imagens em cache. Impacto direto na memoria do servidor.
*/
private static Map
/**
* Convert o texto em uma imagem
* metodo utilitario para criar o stream da imagem dinamica.
* @param text
* @return
* @throws IOException
*/
public static void criar(String text, String tipoImagem, OutputStream os) throws IOException {
BufferedImage buffer = getBufferImage(text);
ImageIO.write(buffer, "jpeg", os);
}
/**
* Usa o cache para recuperar o Buffer. Só cria novo se ainda nao existir no cache.
* @param text
* @return
*/
private static BufferedImage getBufferImage(String text) {
BufferedImage buffer = images.get(text);
if (buffer == null){
buffer = criarBufferImage(text);
images.put(text, buffer);
}
return buffer;
}
/**
* Criar o buffer de imagem. A imagem tem um tamanho de 30kb.
* @param text
* @return
*/
private static BufferedImage criarBufferImage(String text) {
final int WIDTH = 80;
int HEIGHT = 50;
BufferedImage buffer =
new BufferedImage(WIDTH,
HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics g = buffer.createGraphics();
g.setColor(Color.GRAY);
g.fillRect(0,0,WIDTH,HEIGHT);
g.setColor(Color.BLACK);
Font font1 = new Font("Helvetica", Font.BOLD, 22);
g.setFont(font1);
FontMetrics fm = g.getFontMetrics();
Rectangle2D area = fm.getStringBounds(text, g);
g.drawString(text, (int)(WIDTH - area.getWidth())/2,(int)(HEIGHT + area.getHeight())/2);
return buffer;
}
}
Nenhum comentário:
Postar um comentário