Captcha? is very easy to used, i write a little java?sample to proved its powerful feature!
So first download the jcaptcha-all-1.0-RC3.jar From http://jcaptcha.sourceforge.net/
Then Run the following sample.
/*
?*Copyright???2006?David.turing
?*Email:?securex@163.com
?*QQ群:14966586
?*Blog:?openssl.blogjava.net
?
*/
package
?org.dev2dev.image.captcha;
import
?java.awt.Color;
import
?java.awt.Font;
import
?java.awt.font.TextAttribute;
import
?java.awt.image.BufferedImage;
import
?java.io.File;
import
?java.io.IOException;
import
?java.text.AttributedString;
import
?javax.imageio.ImageIO;
import
?com.octo.captcha.CaptchaException;
import
?com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import
?com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator;
import
?com.octo.captcha.component.image.fontgenerator.FontGenerator;
import
?com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import
?com.octo.captcha.component.image.textpaster.SimpleTextPaster;
import
?com.octo.captcha.component.image.textpaster.TextPaster;
public
?
class
?CaptchaHelper?{
????
private
?FontGenerator?fontGenerator;
????
private
?BackgroundGenerator?background;
????
private
?TextPaster?textPaster;
????
public
?
void
?init(FontGenerator?fontGenerator,
????????????BackgroundGenerator?background,?TextPaster?textPaster)?{
????????
this
.background?
=
?background;
????????
this
.fontGenerator?
=
?fontGenerator;
????????
this
.textPaster?
=
?textPaster;
????}
????
public
?BufferedImage?getImage(String?word)?
throws
?CaptchaException?{
????????
int
?wordLength;
????????
//
Check?your?word?Lenth
????????wordLength?
=
?checkWordLength(word);
????????
//
Process?font?for?word
????????AttributedString?attributedWord?
=
?getAttributedString(word,?wordLength);
????????
//
Contruct?your?Backgroud
????????BufferedImage?background?
=
?getBackround();
????????
//
Contruct?your?captcha?image?include?your?word!
????????
return
?pasteText(background,?attributedWord);
????}
????
public
?AttributedString?getAttributedString(String?word,?
int
?wordLength)?{
????????AttributedString?attributedWord?
=
?
new
?AttributedString(word);
????????
//
Here,?we?provide?each?char?of?the?word?a?kind?of?font,?so,??n?char,?n?font,?hehe?
????????
for
?(
int
?i?
=
?
0
;?i?
<
?wordLength;?i
++
)?{
????????????Font?font?
=
?getFont();
//
get?the?new?font?for?next?character
????????????attributedWord.addAttribute(TextAttribute.FONT,?font,?i,?i?
+
?
1
);
????????}
????????
return
?attributedWord;
????}
????
int
?checkWordLength(String?word)?
throws
?CaptchaException?{
????????
int
?wordLength;
????????
if
?(word?
==
?
null
)?{
????????????
throw
?
new
?CaptchaException(
"
CaptchaHelper:null?word
"
);
????????}?
else
?{
????????????wordLength?
=
?word.length();
????????????
if
?(wordLength?
>
?
this
.getMaxAcceptedWordLength()
????????????????????
||
?wordLength?
<
?getMinAcceptedWordLength())?{
????????????????
throw
?
new
?CaptchaException(
"
CaptchaHelper:invalid?length?word
"
);
????????????}
????????}
????????
return
?wordLength;
????}
????
/**
?????*?
@return
?the?max?word?length?accepted?by?this?word2image?service
?????
*/
????
public
?
int
?getMaxAcceptedWordLength()?{
????????
return
?textPaster.getMaxAcceptedWordLength();
????}
????
/**
?????*?
@return
?the?min?word?length?accepted?by?this?word2image?service
?????
*/
????
public
?
int
?getMinAcceptedWordLength()?{
????????
return
?textPaster.getMinAcceptedWordLength();
????}
????
/**
?????*?
@return
?the?generated?image?height
?????
*/
????
public
?
int
?getImageHeight()?{
????????
return
?background.getImageHeight();
????}
????
/**
?????*?
@return
?teh?generated?image?width
?????
*/
????
public
?
int
?getImageWidth()?{
????????
return
?background.getImageWidth();
????}
????
/**
?????*?
@return
?the?min?font?size?for?the?generated?image
?????
*/
????
public
?
int
?getMinFontSize()?{
????????
return
?fontGenerator.getMinFontSize();
????}
????
/**
?????*?Method?from?imageFromWord?method?to?apply?font?to?String.?Implementations?must?take?into?account?the?minFontSize
?????*?and?the?MaxFontSize.
?????*
?????*?
@return
?a?Font
?????
*/
????Font?getFont()?{
????????
return
?fontGenerator.getFont();
????}
????
/**
?????*?Generates?a?backround?image?on?wich?text?will?be?paste.?Implementations?must?take?into?account?the?imageHeigt?and
?????*?imageWidth.
?????*
?????*?
@return
?the?background?image
?????
*/
????BufferedImage?getBackround()?{
????????
return
?background.getBackground();
????}
????
/**
?????*?Pastes?the?attributed?string?on?the?backround?image?and?return?the?final?image.?Implementation?must?take?into
?????*?account?the?fact?that?the?text?must?be?readable?by?human?and?non?by?programs
?????*
?????*?
@return
?the?final?image
?????*
?????*?
@throws
?CaptchaException?if?any?exception?accurs?during?paste?routine.
?????
*/
????BufferedImage?pasteText(BufferedImage?background,
????????????AttributedString?attributedWord)?
throws
?CaptchaException?{
????????
return
?textPaster.pasteText(background,?attributedWord);
????}
????
/**
?????*?
@param
?args
?????
*/
????
public
?
static
?
void
?main(String[]?args)?{
????????Integer?minAcceptedWordLength?
=
?
new
?Integer(
5
);
????????Integer?maxAcceptedWordLength?
=
?
new
?Integer( 30);
????????Integer?imageHeight?=?new?Integer(100);
????????Integer?imageWidth?=?new?Integer(400);
????????Integer?minFontSize?=?new?Integer(30);
????????Integer?maxFontSize?=?new?Integer(30);
????????BackgroundGenerator?background?=?new?GradientBackgroundGenerator(
????????????????imageWidth,?imageHeight,?Color.white,?Color.white);
????????FontGenerator?fontGenerator?=?new?RandomFontGenerator(minFontSize,
????????????????maxFontSize);
????????TextPaster?textPaster?=?new?SimpleTextPaster(minAcceptedWordLength,
????????????????maxAcceptedWordLength,?Color.blue);
????????CaptchaHelper?chelper?=?new?CaptchaHelper();
????????chelper.init(fontGenerator,?background,?textPaster);
????????BufferedImage?test?=?chelper.getImage("openssl.blogjava.net");
????????if?(test?!=?null)
????????????System.out.println("width="?+?test.getWidth());
????????File?testfile?=?new?File("c:\\a.png");
????????try?{
????????????//?well?the?captcha?picture?is?generate,?open?the?png?file!
????????????ImageIO.write(test,?"PNG",?testfile);
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
}