使用patchca生成验证码
2015-09-07 14:21
363 查看
public class ValidationCode { private ColorFactory colorFactory = null; private RandomFontFactory fontFactory = null; private RandomWordFactory wordFactory = null; private TextRenderer textRenderer = null; public ConfigurableCaptchaService getConfigurableCaptchaService(){ ConfigurableCaptchaService configurableCaptchaService = new ConfigurableCaptchaService(); // 颜色创建工厂,使用一定范围内的随机色 colorFactory = new RandomColorFactory(); configurableCaptchaService.setColorFactory(colorFactory); // 随机字体生成器 fontFactory = new RandomFontFactory(); fontFactory.setMaxSize(32); fontFactory.setMinSize(28); configurableCaptchaService.setFontFactory(fontFactory); // 随机字符生成器,去除掉容易混淆的字母和数字,如o和0等 wordFactory = new RandomWordFactory(); wordFactory.setCharacters("abcdefghkmnpqstwxyz23456789"); wordFactory.setMaxLength(5); wordFactory.setMinLength(4); configurableCaptchaService.setWordFactory(wordFactory); // 自定义验证码图片背景 MyCustomBackgroundFactory backgroundFactory = new MyCustomBackgroundFactory(); configurableCaptchaService.setBackgroundFactory(backgroundFactory); // 图片滤镜设置 ConfigurableFilterFactory filterFactory = new ConfigurableFilterFactory(); List<BufferedImageOp> filters = new ArrayList<BufferedImageOp>(); WobbleImageOp wobbleImageOp = new WobbleImageOp(); wobbleImageOp.setEdgeMode(AbstractImageOp.EDGE_MIRROR); wobbleImageOp.setxAmplitude(2.0); wobbleImageOp.setyAmplitude(1.0); filters.add(wobbleImageOp); filterFactory.setFilters(filters); configurableCaptchaService.setFilterFactory(filterFactory); // 文字渲染器设置 textRenderer = new BestFitTextRenderer(); textRenderer.setBottomMargin(3); textRenderer.setTopMargin(3); configurableCaptchaService.setTextRenderer(textRenderer); // 验证码图片的大小 configurableCaptchaService.setWidth(82); configurableCaptchaService.setHeight(32); return configurableCaptchaService; } /** * 自定义验证码图片背景,主要画一些噪点和干扰线 */ private class MyCustomBackgroundFactory implements BackgroundFactory { private Random random = new Random(); public void fillBackground(BufferedImage image) { Graphics graphics = image.getGraphics(); // 验证码图片的宽高 int imgWidth = image.getWidth(); int imgHeight = image.getHeight(); // 填充为白色背景 graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, imgWidth, imgHeight); // 画100个噪点(颜色及位置随机) for(int i = 0; i < 100; i++) { // 随机颜色 int rInt = random.nextInt(255); int gInt = random.nextInt(255); int bInt = random.nextInt(255); graphics.setColor(new Color(rInt, gInt, bInt)); // 随机位置 int xInt = random.nextInt(imgWidth - 3); int yInt = random.nextInt(imgHeight - 2); // 随机旋转角度 int sAngleInt = random.nextInt(360); int eAngleInt = random.nextInt(360); // 随机大小 int wInt = random.nextInt(6); int hInt = random.nextInt(6); graphics.fillArc(xInt, yInt, wInt, hInt, sAngleInt, eAngleInt); // 画5条干扰线 if (i % 20 == 0) { int xInt2 = random.nextInt(imgWidth); int yInt2 = random.nextInt(imgHeight); graphics.drawLine(xInt, yInt, xInt2, yInt2); } } } } public static void main(String[] args) { ValidationCode validationCode = new ValidationCode(); // 得到验证码对象,有验证码图片和验证码字符串 Captcha captcha = validationCode.getConfigurableCaptchaService().getCaptcha(); // 取得验证码字符串 String validationCodeTest = captcha.getChallenge(); // 取得验证码图片并输出 BufferedImage bufferedImage = captcha.getImage(); System.out.println("验证码字符串:"+validationCodeTest); String code = "code.jpg"; try { ImageIO.write(bufferedImage, "jpg", new File("D:/img/"+code)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- solr/lucence和关系数据库的混合使用
- AngularJS执行流程详解
- Windows API 之 CreateToolhelp32Snapshot
- UVA 10328 Coin Toss
- MAC系统配置环境变量(ant,apktool为例),多渠道打包
- 记录:捕鱼达人开发笔记
- 让 Chrome 不再显示 https 页面中的 http 请求警报
- 修改RK3288-PopMetal的printk的波特率
- liunx 创建远程用户帐号
- 六.压缩解压命令
- Codeforces 508D Tanya and Password
- 2015-9-7 记
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
- C++List用法
- Item 23:非成员非友元函数好于成员函数 Effective C++笔记
- Unity-使用面向对象的思想
- 关于URL编码/javascript/js url 编码/url的三个js编码函数
- 五.进程管理命令
- 将标准输入复制到标准输出
- Access转成SQL数据库的方法