`
fancyboy2050
  • 浏览: 240962 次
  • 性别: Icon_minigender_1
  • 来自: 皇城根儿下
社区版块
存档分类
最新评论

Kaptcha使用

    博客分类:
  • java
阅读更多
简单的装备起来很简单,网上一大把,就不说了。
但是许多时候因为产品啊,领导啊等等什么的需求就出来了,怎么去让它适应需求?

1.kaptcha可配置项:
kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,no
kaptcha.border.color   边框颜色   默认为Color.BLACK
kaptcha.border.thickness  边框粗细度  默认为1
kaptcha.producer.impl   验证码生成器  默认为DefaultKaptcha
kaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreator
kaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwx
kaptcha.textproducer.char.length   验证码文本字符长度  默认为5
kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
kaptcha.textproducer.font.size   验证码文本字符大小  默认为40
kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACK
kaptcha.textproducer.char.space  验证码文本字符间距  默认为2
kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoise
kaptcha.noise.color   验证码噪点颜色   默认为Color.BLACK
kaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipple
kaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRenderer
kaptcha.background.impl   验证码背景生成器   默认为DefaultBackground
kaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAY
kaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITE
kaptcha.image.width   验证码图片宽度  默认为200
kaptcha.image.height  验证码图片高度  默认为50 


2.kaptcha提供了很好的可扩展性,而且扩展的方式也很简单,只需要实现相关接口,然后把我们自定义的对象添加到配置项里面就可以了,如Producer,WordRenderer,GimpyEngine,BackgroundProducer,NoiseProducer,TextProducer这些接口,我们可以随意的扩展。

3.关于对生成的验证码进行加噪点,一些干扰因素,kaptcha也提供了许多现成的filter供选择,它自己默认的干扰因素生成类WaterRipple就是由RippleFilter,WaterFilter两个filter组成的,这些filter实现了各种对文本样式变化处理,位于com.jhlabs.image package下。

自己实现一个WordRenderer
public class ZHWordRenderer  extends Configurable implements WordRenderer{

    public ZHWordRenderer()
    {
    }

    public BufferedImage renderWord(String word, int width, int height)
    {
        int fontSize = getConfig().getTextProducerFontSize();
// 这个地方我们自定义了验证码文本字符样式,虽然是可以配置的,但是字体展示都粗体,我们希望不是粗体就只有自定义这个渲染类了
        String paramName = "kaptcha.textproducer.font.names";
    	String paramValue = (String)getConfig().getProperties().get(paramName);
    	String fontNames[] = paramValue.split(",");
    	Font fonts[] = new Font[fontNames.length];
        for(int i = 0; i < fontNames.length; i++){
            fonts[i] = new Font(fontNames[i], Font.ITALIC, fontSize);
        }

        java.awt.Color color = getConfig().getTextProducerFontColor();
        int charSpace = getConfig().getTextProducerCharSpace();
        BufferedImage image = new BufferedImage(width, height, 2);
        Graphics2D g2D = image.createGraphics();
        
        g2D.setColor(color);
        RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
        
        g2D.setRenderingHints(hints);
        java.awt.font.FontRenderContext frc = g2D.getFontRenderContext();
        Random random = new Random();
        int startPosY = (height - fontSize) / 5 + fontSize;
        char wordChars[] = word.toCharArray();
        Font chosenFonts[] = new Font[wordChars.length];
        int charWidths[] = new int[wordChars.length];
        int widthNeeded = 0;
        for(int i = 0; i < wordChars.length; i++)
        {
            chosenFonts[i] = fonts[random.nextInt(fonts.length)];
            char charToDraw[] = {
                wordChars[i]
            };
            GlyphVector gv = chosenFonts[i].createGlyphVector(frc, charToDraw);
            charWidths[i] = (int)gv.getVisualBounds().getWidth();
            if(i > 0)
                widthNeeded += 2;
            widthNeeded += charWidths[i];
        }

        int startPosX = (width - widthNeeded) / 2;
        for(int i = 0; i < wordChars.length; i++)
        {
            g2D.setFont(chosenFonts[i]);
            char charToDraw[] = {
                wordChars[i]
            };
            g2D.drawChars(charToDraw, 0, charToDraw.length, startPosX, startPosY);
            startPosX = startPosX + charWidths[i] + charSpace;
        }

        return image;
    }
}
分享到:
评论
1 楼 lsjinpeng 2012-09-17  
这个中文乱码怎么弄啊?

相关推荐

    谷歌验证码kaptcha安装与使用教程

    下面将详细介绍Kaptcha的安装与使用过程。 1. **Kaptcha的安装** - Kaptcha提供了jar包,如`kaptcha-2.3.2-jdk14.jar`和`kaptcha-2.3.2.jar`,它们包含了Kaptcha的核心类和依赖。将这两个文件添加到你的Java项目的...

    kaptcha-2.3.2-API文档-中文版.zip

    赠送jar包:kaptcha-2.3.2.jar; 赠送原API文档:kaptcha-2.3.2-javadoc.jar; 赠送源代码:kaptcha-2.3.2-sources.jar; 赠送Maven依赖信息文件:kaptcha-2.3.2.pom; 包含翻译后的API文档:kaptcha-2.3.2-javadoc-...

    kaptcha-2.3.2.jar

    谷歌的kaptcha库是其中一款广泛使用的开源验证码生成器,尤其以其2.3.2版本备受推崇。本文将深入探讨kaptcha-2.3.2.jar的核心功能、使用方法以及如何通过配置参数来定制验证码的显示效果。 一、kaptcha概述 ...

    java验证码组件kaptcha使用方法

    下面我们将详细介绍Kaptcha的使用方法。 首先,要在项目中使用Kaptcha,你需要将`kaptcha-2.3.jar`包导入到你的项目类路径中。这个JAR文件包含了Kaptcha的核心组件和依赖,使你能够快速地集成验证码功能。 接下来...

    使用Kaptcha生成随机码

    使用Kaptcha生成随机码的一个demo

    SpringBoot集成kaptcha验证码

    在Controller中,使用kaptcha生成验证码: ```java @Controller public class CaptchaController { @Autowired private Producer captchaProducer; @GetMapping("/captcha") public void captcha...

    谷歌验证码使用工具——kaptcha-2.3.2

    【谷歌验证码使用工具——kaptcha-2.3.2】是一款基于Java的开源验证码生成库,主要用于网站的身份验证,防止自动化的机器人或者恶意攻击者进行非法操作。kaptcha这个名字是"CAPTCHA"(Completely Automated Public ...

    kaptcha2.3.2.jar

    6. **示例代码**:文件可能提供了一些简单的Java代码片段,展示如何快速开始使用kaptcha。 总之,kaptcha是一个强大的验证码生成工具,对于Java开发者来说,它提供了一种便捷的方式来保护他们的应用免受自动化攻击...

    Kaptcha近期成熟版本

    在本文中,我们将深入探讨Kaptcha的特性、工作原理以及如何在实际项目中集成和使用。 Kaptcha的核心功能在于生成难以由机器识别的图像验证码,这些图像通常包含随机的字母或数字组合,用户在提交表单前需要正确输入...

    kaptcha验证码使用

    ### Kaptcha验证码使用详解 #### 一、Kaptcha简介 Kaptcha是一款强大的验证码生成工具,由Java编写而成,被广泛应用于Web应用中。其最大的特点在于高度可定制性,允许开发者根据需求调整验证码的样式与内容。这...

    kaptcha-2.3.2.rar

    本文将深入探讨Kaptcha 2.3.2版本,解析其核心概念、使用方法以及实际应用场景。 1. **Kaptcha简介** Kaptcha是由Google开源的一个Java验证码生成框架,它的设计目标是提供一个简单易用的API,帮助开发者快速创建...

    kaptcha-2.3.2-google验证码插件

    6. **README.txt**:这是一个重要的文档,通常会提供插件的基本介绍、安装指南、使用示例以及注意事项等内容,帮助开发者快速理解和使用kaptcha。 7. **kaptcha.war**:这是一个Web应用归档文件,用于部署在Servlet...

    kaptcha验证码jar包和源码包.zip

    在实际使用中,你可能需要将Kaptcha集成到Spring、Struts或其他Web框架中。这通常涉及到在配置文件中声明一个Kaptcha bean,并在需要的地方注入这个bean以生成验证码。例如,在Spring中,可以在`applicationContext....

    kaptcha-2.3.2 生成验证码

    在Web开发中,`kaptcha` 是一个广泛使用的Java库,用于生成复杂的图像验证码。`kaptcha-2.3.2` 是该库的一个版本,提供了丰富的功能和定制选项。 `kaptcha` 库的核心是生成器(Generator),它负责创建独一无二且...

    验证码例子(kaptcha插件的使用)

    在本案例中,我们将探讨如何使用`Kaptcha`插件来生成动态验证码。`Kaptcha`是一个开源Java库,专为生成验证码图像而设计,具有高度可配置性,可以轻松集成到Web应用中。 首先,我们需要了解`Kaptcha`插件的基本用法...

    kaptcha-2.3.zip

    javadoc目录下则是kaptcha库的API文档,通过阅读这些文档,开发者可以了解类、方法和接口的具体使用方式。src目录包含源代码,对于想要自定义验证码样式或者深入理解其工作原理的开发者来说,这是一个宝贵的资源。...

    kaptcha验证码小程序

    这个"kaptcha验证码小程序"是基于kaptcha开发的一个简单的示例项目,旨在帮助初学者了解和学习如何使用kaptcha来创建验证码。 kaptcha的核心特性包括: 1. **可定制性**:kaptcha提供了一系列参数供开发者调整...

    kaptcha.jar

    本文将深入探讨kaptcha.jar这一验证码资源包,揭示其工作原理、功能特性以及在实际应用中的使用方法。 kaptcha.jar是一个专门用于生成验证码的Java库,它为开发者提供了简单易用的API,以生成各种复杂度的图像...

    Kaptcha验证码类库及配置

    2. **配置(Configuration)**:在使用Kaptcha时,我们需要在Spring或其他配置文件中设置相关属性,比如验证码长度、字体样式、文本颜色、背景颜色、边框、噪声线等。这可以通过XML配置或Java代码完成。 3. **存储...

Global site tag (gtag.js) - Google Analytics