Create dynamic text image like as captcha

  • Dynamic captcha images create and download below jar file
  • Mail.jar
  • activation.jar

package com.barcode.demo;

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.imageio.ImageIO;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class CreateCaptchaImage {

 public static void main(String[] args) {

  cutomCaptchaGeneration();
 }

 /**
  * Default constructor.
  *
  * @param title
  *            the frame title.
  */
 public static void cutomCaptchaGeneration() {
  File file = null;
  Timestamp timestamp = new Timestamp(System.currentTimeMillis());
  try {
   file = File
     .createTempFile(timestamp.getTime() + "_Captcha", ".png");
  } catch (IOException e) {
   e.printStackTrace();
  }

  StringBuffer sb = createHtmlData();

  sendEmailToRecepint(file, sb);

 }

 private static StringBuffer createHtmlData() {
  StringBuffer sb = new StringBuffer();
  sb.append("<html><head></head><body><table><tr><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr><tr>");
  sb.append("<td rowspan=");
  sb.append(10);
  sb.append('"');
  sb.append(" colspan=");
  sb.append(3);
  sb.append('"');
  sb.append('>');
  sb.append("<img src=");
  sb.append("'");
  sb.append("cid:ea-image");
  sb.append("'");
  sb.append("width=");
  sb.append('"');
  sb.append(200);
  sb.append('"');
  sb.append("height=");
  sb.append('"');
  sb.append(200);
  sb.append('"');
  sb.append('/');
  sb.append('>');
  sb.append("</td><th></th><th></th><th></th></tr></body></html>");
  return sb;

  /**
   * <td rowspan="10" colspan="3">
   * <img src='cid:ea-image'
   * style="display: block; margin-left: auto; margin-right: auto;"
   * width="200" height="200"/></td>
   */
 }

 private static void sendEmailToRecepint(File file, StringBuffer sb) {
  // Recipient's email ID needs to be mentioned.
  String to = "kmandal@gmail.com";
  // Sender's email ID needs to be mentioned
  String from = "kmandal@kmical.com";
  final String username = "kmandal";// change accordingly
  final String password = "XXXXXXXXXXXXXXXX";// change accordingly

  // Assuming you are sending email through relay.jangosmtp.net
  String host = "XXXXXXXXXXXXXXXXXX";

  Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.host", host);
  props.put("mail.smtp.port", "25");

  Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
     protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password);
     }
    });

  try {

   // Create a default MimeMessage object.
   Message message = new MimeMessage(session);

   // Set From: header field of the header.
   message.setFrom(new InternetAddress(from));

   // Set To: header field of the header.
   message.setRecipients(Message.RecipientType.TO,
     InternetAddress.parse(to));

   // Set Subject: header field
   message.setSubject("Demo snapshot");

   MimeMultipart multipart = new MimeMultipart();
   BodyPart messageBodyPart = new MimeBodyPart();

   messageBodyPart.setContent(sb.toString(), "text/HTML");
   multipart.addBodyPart(messageBodyPart);

   messageBodyPart = new MimeBodyPart();
   createCaptchaImage(file);

   DataSource fds = new FileDataSource(file);
   messageBodyPart.setDataHandler(new DataHandler(fds));
   // ea-image is image file name
   messageBodyPart.setHeader("Content-ID", "<ea-image>");

   // add image to the multipart
   multipart.addBodyPart(messageBodyPart);

   // put everything together
   message.setContent(multipart);

   Transport.send(message);

  } catch (Exception e) {
   System.out.println("Error of file");
  }
 }

 public static void createCaptchaImage(File file) {
  Timestamp timestamp = new Timestamp(System.currentTimeMillis());
  BufferedImage image = new BufferedImage(200, 40,
    BufferedImage.TYPE_BYTE_INDEXED);
  Graphics2D graphics = image.createGraphics();
  // Set back ground of the generated image to white
  graphics.setColor(Color.WHITE);
  graphics.fillRect(0, 0, 200, 40);
  // set gradient font of text to be converted to image
  GradientPaint gradientPaint = new GradientPaint(10, 5, Color.BLUE, 20,
    10, Color.LIGHT_GRAY, true);
  graphics.setPaint(gradientPaint);
  Font font = new Font("Comic Sans MS", Font.BOLD, 30);
  graphics.setFont(font);
  // write 'Hello World!' string in the image
  graphics.drawString(String.valueOf(timestamp.getTime()), 5, 30);
  // release resources used by graphics context
  graphics.dispose();

  try {
   ImageIO.write(image, "png", file);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}





Previous
Next Post »