| Blog信息 |
|
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7662916 建立时间:2006年5月29日 |

| |
|
[Java Open Source]A Java Sample For jCaptcha 软件技术
lhwork 发表于 2006/7/17 10:58:16 |
|
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(); } }}
td { font-size: 12px }
.commentTextBox
{
font-family : Verdana;
font-size: 13px;
}
.userData { BEHAVIOR: url(#default#userdata) }
|
|
|