首先在项目上加入 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()); } }