您的位置:首页 > 其它

利用simplecaptcha-1.2.1 实现验证码码

2012-09-14 15:13 169 查看
首先在项目上加入 simplecaptcha-1.2.1 jar包 ,下载地址:http://download.csdn.net/detail/zhaokuo719/4570328

本人是在Spring项目中使用:

java代码如下:

package com.zhaokuo.config;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import nl.captcha.Captcha;
import nl.captcha.Captcha.Builder;
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
import nl.captcha.gimpy.DropShadowGimpyRenderer;
import nl.captcha.noise.CurvedLineNoiseProducer;
import nl.captcha.noise.NoiseProducer;
import nl.captcha.servlet.CaptchaServletUtil;
import nl.captcha.text.producer.DefaultTextProducer;
import nl.captcha.text.renderer.DefaultWordRenderer;
import nl.captcha.text.renderer.WordRenderer;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
* @author 赵阔 2012-8-9
*
*/
@Service("simpleCaptcha")
public class SimpleCaptcha {

@Value("${_width}")
private int _width = 200;
@Value("${_height}")
private int _height = 50;
@Value("${_noise}")
private int _noise = 0;
@Value("${_text}")
private String _text = null;
@Value("${chinese_text}")
private String base;

/**
* 因为获取图片只会有get方法
*/
public void showCaptcha(HttpServletRequest req, HttpServletResponse resp,
String name) throws Exception {
Builder builder = new Captcha.Builder(_width, _height);
// 增加边框
builder.addBorder();
NoiseProducer nProd = new CurvedLineNoiseProducer(Color.BLACK, 2);
// 是否增加干扰线条
if (_noise == 1)
builder.addNoise(nProd);
// ----------------自定义字体大小-----------
// 自定义设置字体颜色和大小 最简单的效果 多种字体随机显示
List<Font> fontList = new ArrayList<Font>();
fontList.add(new Font("宋体", Font.HANGING_BASELINE, 40));// 可以设置斜体之类的
fontList.add(new Font("Courier", Font.ITALIC, 40));
fontList.add(new Font("宋体", Font.PLAIN, 40));

// 加入多种颜色后会随机显示 字体空心
List<Color> colorList = new ArrayList<Color>();
//		 colorList.add(Color.green);
// colorList.add(Color.pink);
colorList.add(Color.gray);
//		colorList.add(Color.blue);
DefaultWordRenderer cwr = new DefaultWordRenderer(colorList, fontList);
//ColoredEdgesWordRenderer cwr= new ColoredEdgesWordRenderer(colorList,fontList);
WordRenderer wr = cwr;
// 增加文本,默认为5个随机字符.
if (_text == null) {
builder.addText();
} else {
String[] ts = _text.split(",");
for (int i = 0; i < ts.length; i++) {
String[] ts1 = ts[i].split(":");
if ("chinese".equals(ts1[0])) {
char[] chinese = base.toCharArray();
builder.addText(
new DefaultTextProducer(Integer.parseInt(ts1[1]),
chinese), wr);
} else if ("number".equals(ts1[0])) {
char[] numberChar = new char[] { '0', '1', '2', '3', '4',
'5', '6', '7', '8', '9' };
builder.addText(
new DefaultTextProducer(Integer.parseInt(ts1[1]),
numberChar), wr);
} else if ("word".equals(ts1[0])) {
char[] numberChar = new char[] { 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
't', 'u', 'v', 'w', 'x', 'y', 'z' };
builder.addText(
new DefaultTextProducer(Integer.parseInt(ts1[1]),
numberChar), wr);
} else {
builder.addText(
new DefaultTextProducer(Integer.parseInt(ts1[1]),
null), wr);
}
}
}// --------------添加背景-------------
// 设置背景渐进效果 以及颜色 form为开始颜色,to为结束颜色
GradiatedBackgroundProducer gbp = new GradiatedBackgroundProducer();
gbp.setFromColor(Color.BLUE);
gbp.setToColor(Color.WHITE);

// 无渐进效果,只是填充背景颜色
//		FlatColorBackgroundProducer fbp=new FlatColorBackgroundProducer(Color.white);
// 加入网纹--一般不会用
//		 SquigglesBackgroundProducer sbp=new SquigglesBackgroundProducer();
// 没发现有什么用,可能就是默认的
// TransparentBackgroundProducer tbp = new
// TransparentBackgroundProducer();

builder.addBackground(gbp);

// ---------装饰字体---------------
// 字体边框齿轮效果 默认是3
//		builder.gimp(new BlockGimpyRenderer(1));
// 波纹渲染 相当于加粗
//		builder.gimp(new RippleGimpyRenderer());
// 加网--第一个参数是横线颜色,第二个参数是竖线颜色
//		 builder.gimp(new FishEyeGimpyRenderer(Color.white,Color.black));
// 加入阴影效果 默认3,75
builder.gimp(new DropShadowGimpyRenderer(5, 10));

Captcha captcha = builder.build();

CaptchaServletUtil.writeImage(resp, captcha.getImage());

req.getSession().setAttribute(name, captcha.getAnswer());
}
}


还有个properties文件:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: