Thursday, June 19, 2008

Executing Ant tasks programatically

/*
* AntRunner.java
*/

import java.io.File;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.taskdefs.Ant;


public class AntRunner {

public AntRunner() {
}

public static void main(String args[]) throws Exception {

File buildFile = new File("/path/to/build.xml");
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.init();
ProjectHelper helper = ProjectHelper.getProjectHelper();
p.addReference("ant.projectHelper", helper);
helper.parse(p, buildFile);
DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
p.addBuildListener(consoleLogger);
p.executeTarget(p.getDefaultTarget());
}
}

Thursday, June 5, 2008

JCaptcha Image Changing using Java Script


 

Hi, the last post describe all the steps about JCaptcha implementation.

Now if want to change the Image on click of Captcha image it's very simple. Just replace the code of last post index.jsp with below one.

And the solution work.

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>


 


 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>


<head>


<title>My JSP 'index.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css">

    -->

<script language="JavaScript" type="text/javascript">


<!--

//function gets the next captcha image


 


function next() {

var now = new Date();


var newSrc = './jcaptcha?' + now.getTime();


if (document.images) {

    document.images.captcha.src = newSrc;


}

}


//-->

</script>


</head>


 


<body>


<form action="./register" method="post">


<a href="javascript:next();">


<img name="captcha" src="./jcaptcha" />


</a>

    <input type='text' name='j_captcha_response' value=''>

    <br/>

    <input type="submit" value="Submit"/>

    

</form>

<br>


</body>

</html>

JCaptcha with JSP Servlet

First need to download JAR file for JCaptcha from

http://sourceforge.net/project/downloading.php?groupname=jcaptcha&filename=jcaptcha-bin-1.0-RC6.zip&use_mirror=osdn

You also need common apache library.

Now create a Web Applications in NetBeans or Eclipse and add the jars to your application classpath.

Now need to create Other classes:

CaptchaServiceSingleton.java


package com.ss;

import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;

public class CaptchaServiceSingleton {

 private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(
   new FastHashMapCaptchaStore(),new MyCaptchaEngine(),180,100000,75000);

 public static ImageCaptchaService getInstance() {
  return instance;
 }

}

And MyCaptchaEngine.java



package com.ss;

import java.awt.Font;
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomRangeColorGenerator;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.RandomTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.image.wordtoimage.WordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.image.ListImageCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;

public class MyCaptchaEngine extends ListImageCaptchaEngine {

 protected void buildInitialFactories() {

  WordGenerator wgen = new RandomWordGenerator(
    "ABCDEFGHIJKLMNPQRSTUVWXYZ123456789");
  RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(
    new int[] { 0, 100 },new int[] { 0, 100 },new int[] { 0, 100 });

  TextPaster textPaster = new RandomTextPaster(new Integer(4),
    new Integer(6), cgen, true);

  BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator(
    new Integer(200), new Integer(100));

  /**
   * BackgroundGenerator backgroundGenerator = new
   * GradientBackgroundGenerator(new Integer(200),new
   * Integer(100),Color.blue,Color.white);
   */

  Font[] fontsList = new Font[] {
    new Font("Arial", 1, 10),new Font("Tahoma", 10, 15),new Font("Verdana", 11, 12),
  };

  FontGenerator fontGenerator = new RandomFontGenerator(new Integer(20),
    new Integer(35), fontsList);

  WordToImage wordToImage = new ComposedWordToImage(fontGenerator,
    backgroundGenerator, textPaster);

  this.addFactory(new GimpyFactory(wgen, wordToImage));

 }
}



Now Create Servlet named ImageCaptchaServlet:


import com.octo.captcha.service.CaptchaServiceException;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ImageCaptchaServlet extends HttpServlet {

 public void init(ServletConfig servletConfig) throws ServletException {
  super.init(servletConfig);
 }

 protected void doGet(HttpServletRequest httpServletRequest,
   HttpServletResponse httpServletResponse) throws ServletException,
   IOException {

  byte[] captchaChallengeAsJpeg = null;
  // the output stream to render the captcha image as jpeg into
  ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
  try {
   // get the session id that will identify the generated captcha.
   // the same id must be used to validate the response, the session id
   // is a good candidate!
   String captchaId = httpServletRequest.getSession().getId();

   // call the ImageCaptchaService getChallenge method
   BufferedImage challenge = CaptchaServiceSingleton.getInstance().getImageChallengeForID(
     captchaId,httpServletRequest.getLocale());

   // a jpeg encoder
   JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
   jpegEncoder.encode(challenge);

  } catch (IllegalArgumentException e) {
   httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
   return;
  } catch (CaptchaServiceException e) {
   httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
   return;
  }

  captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
  // flush it in the response

  httpServletResponse.setHeader("Cache-Control", "no-store");
  httpServletResponse.setHeader("Pragma", "no-cache");
  httpServletResponse.setDateHeader("Expires", 0);
  httpServletResponse.setContentType("image/jpeg");

  ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream();

  responseOutputStream.write(captchaChallengeAsJpeg);
  responseOutputStream.flush();
  responseOutputStream.close();
 }
}

Create other Servlet named: Register.java


package com.ss;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.octo.captcha.service.CaptchaServiceException;

public class Register extends HttpServlet {

 public Register() {
  super();
 }

 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();

  out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
  out.println("<HTML>");
  out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  out.println(" <BODY>");
  out.print(" This is ");
  out.print(this.getClass());
  out.println(", using the POST method");
  out.println("<br />");

  Boolean isResponseCorrect = Boolean.FALSE;
  // remenber that we need an id to validate!
  String captchaId = request.getSession().getId();
  // retrieve the response
  String response2 = request.getParameter("j_captcha_response");
  // Call the Service method
  try {
   isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,response2);
   if (isResponseCorrect)
    out.println(" Your Code is matched with captcha..." + captchaId);
   else
    out.println(" Your Code is not matched with captcha..." + captchaId);
  } catch (CaptchaServiceException e) {
   // should not happen, may be thrown if the id is not valid
   out.println(" Erro on Captcha..." + e);
  }

  out.println("<br />");
  out.println(" </BODY>");
  out.println("</HTML>");
  out.flush();
  out.close();
 }

 public void init() throws ServletException {
 }
}


Create JSP page for captcha:

index.jsp


<html>
 <body>
  <form action="./register" method="post">&nbsp; 
   <input type='text' name='j_captcha_response' value=''>
   <br />
   <input type="submit" value="Submit" />
  </form>
  <br />
 </body>
</html>

So, now at end your WEB.xml will have entry like with two servlet:


<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <servlet>
  <description>Captcha Servlet</description>
  <display-name>
   This is the display name of my J2EE component
  </display-name>
  <servlet-name>jcaptcha</servlet-name>
  <servlet-class>com.ss.ImageCaptchaServlet</servlet-class>
  <load-on-startup>0</load-on-startup>
 </servlet>


 <servlet>
  <description>Captcha Servlet</description>
  <display-name>
   This is the display name of my J2EE component
  </display-name>
  <servlet-name>Register</servlet-name>
  <servlet-class>com.ss.Register</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>jcaptcha</servlet-name>
  <url-pattern>/jcaptcha</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
  <servlet-name>Register</servlet-name>
  <url-pattern>/register</url-pattern>
 </servlet-mapping>

 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

</web-app>

And run the application.


Monday, June 2, 2008

Image Filters:

How to use Image Filter?

Here, filteredImage, originalImage is object of BufferedImage please check use of BuffereImage.



public void saturation(float p_saturation) {
  ImageProducer produce = new FilteredImageSource(filteredImage
    .getSource(), new SaturationFilter(p_saturation / 100));
  filteredImage = createBufferedImage(createImage(produce));
  // repaint the filteredImage;
 }

 public void colorTemprature(int p_colorTemprature) {
  ImageProducer produce = new FilteredImageSource(originalImage
    .getSource(), new ColorFilter(p_colorTemprature));
  filteredImage = createBufferedImage(createImage(produce));
  // repaint the filteredImage;
 }

 public void brightness(int p_brightness) {
  ImageProducer produce = new FilteredImageSource(originalImage
    .getSource(), new BrightnessFilter(p_brightness));
  filteredImage = createBufferedImage(createImage(produce));
  // repaint the filteredImage;
 }


Example of image Filters:

BrightnessFilter.java

package com.joshi.image.filter;

// Brightness Filter Class
// BrightnessFilter.java
import java.awt.image.*;

public class BrightnessFilter extends RGBImageFilter {

 int brightness;

 public BrightnessFilter(int b) {

  brightness = b;

  canFilterIndexColorModel = true;

 }

 public int filterRGB(int x, int y, int rgb) {

  // Get the individual colors

  int r = (rgb >> 16) & 0xff;
  int g = (rgb >> 8) & 0xff;
  int b = (rgb >> 0) & 0xff;

  // Calculate the brightness

  r += (brightness * r) / 100;
  g += (brightness * g) / 100;
  b += (brightness * b) / 100;

  // Check the boundaries

  r = Math.min(Math.max(0, r), 255);
  g = Math.min(Math.max(0, g), 255);
  b = Math.min(Math.max(0, b), 255);

  // Return the result

  return (rgb & 0xff000000) | (r << 16) | (g << 8) | (b << 0);

 }
}

ColorFilter.java
package com.joshi.image.filter;

/** 
* @author SJoshi
*/

// Color Filter Class
// ColorFilter.java

import java.awt.image.*;

public class ColorFilter extends RGBImageFilter {
        int red, green, blue;
 int colorTemprature;

 public ColorFilter(int r, int g, int b) {
  red = r;
  green = g;
  blue = b;
  canFilterIndexColorModel = true;
 }

 public ColorFilter(int p_colorTemprature) {
  colorTemprature = p_colorTemprature;
  red = p_colorTemprature;
  green = p_colorTemprature;
  blue = p_colorTemprature;
  canFilterIndexColorModel = true;
 }

 public int filterRGB(int x, int y, int rgb) {
  if (colorTemprature == 0) {
   return rgb;
  }

  // Filter the colors
  int r = ((rgb >> 16) & 0xff);
  int g = ((rgb >> 8) & 0xff);
  int b = ((rgb >> 0) & 0xff);

  r = r + colorTemprature;
  g = g + colorTemprature;
  b = b + colorTemprature;

  if (r > 255) {
   r = 255 - r;
  }

  if (g > 255) {
   g = 255 - g;
  }

  if (b > 255) {
   b = 255 - b;
  }

  // Return the result
  /*
   * if(red==0) { return rgb; }
   */
  return (rgb & 0xff000000) | (r << 16) | (g << 8) | (b << 0);
 }
}

SaturationFilter.java
package com.joshi.image.filter;
import java.awt.Color;
import java.awt.image.RGBImageFilter;

/**
 * 
 * @author SJoshi
 * 
 */

public class SaturationFilter extends RGBImageFilter {

 /*A private variable used to hold hue/saturation/brightness
   values returned from the static conversion methods in Color.
  */

 private float hsbvals[] = new float[3];

 // the Hue of the indicated new foreground color.
 float fgHue;

 //the Saturation of the indicated new foreground color.
 float fgSaturation;
 
 //the Brightness of the indicated new foreground color.
 float fgBrightness;

 /*
  Construct a HueFilter object which performs color modifications
  to warp existing image colors to have a new primary hue.
  */

 public SaturationFilter(Color fg) {
  Color.RGBtoHSB(fg.getRed(), fg.getGreen(), fg.getBlue(), hsbvals);
  fgHue = hsbvals[0];
  fgSaturation = hsbvals[1];
  fgBrightness = hsbvals[2];
  canFilterIndexColorModel = true;
 }

 public SaturationFilter(float p_saturation) {
  fgSaturation = p_saturation;
  canFilterIndexColorModel = true;
 }

 /*
  * Filter an individual pixel in the image by modifying its
  * hue, saturation, and brightness components to be similar
  * to the indicated new foreground color.
  */

 @Override
 public int filterRGB(int x, int y, int rgb) {
  if (fgSaturation == 0) {
   return rgb;
  }

  int alpha = (rgb >> 24) & 0xff;
  int red = (rgb >> 16) & 0xff;
  int green = (rgb >> 8) & 0xff;
  int blue = (rgb) & 0xff;

  Color.RGBtoHSB(red, green, blue, hsbvals);

  // float newHue = fgHue;
  float newHue = hsbvals[0];
  float newSaturation = fgSaturation;
  float newBrightness = hsbvals[2];// *

  // (hsbvals[1] * fgBrightness + (1 - hsbvals[1]));
  rgb = Color.HSBtoRGB(newHue, newSaturation, newBrightness);

  return (rgb & 0x00ffffff) | (alpha << 24);
 }
}

Contributors