美文网首页
Jcaptcha验证码介绍

Jcaptcha验证码介绍

作者: 枯木风 | 来源:发表于2018-12-01 14:25 被阅读0次

    组件介绍

    组件 作用
    FontGenerator 设置字体随机大小范围,字体名称
    BackgroundGenerator 设置背景颜色图片大小
    TextPaster 设置单词的最小最大长度,设置字的颜色,设置单词在图像中的位置是固定还是随机
    ImageDeformation、ImageFilter 非必须,指定为图片变形的类,可以用变形类和过滤器两种方式
    WordToImage 将FontGenerator、BackgroundGenerator、TextPaster、ImageDeformation和ImageFilter组装到一起,属于中间环节的类,类似一个容器
    WordGenerator 设置取词的范围,设置一定范围,或从本地词库读取
    CaptchaFactory 将配置的类,组成工程类, 也属于包装类

    结构图如下:

    使用

    FontGenerator

    Font类,用于设置字体的样式和字体随机的大小范围

    在com.octo.captcha.component.image.fontgenerator包中包含了几种Font类

    Font 作用 示例 效果
    RandomFontGenerator 设置随机出现的字体样式随机的字体大小范围 RandomFontGenerator fonts = new RandomFontGenerator (new Integer(20), new Integer(30));
    TwistedRandomFontGenerator 设置字体的随机大小范围,并对字体进行简单的扭曲变形,字体左右倾斜的效果 TwistedRandomFontGenerator fonts = new TwistedRandomFontGenerator(new Integer(20), new Integer(30));
    TwistedAndShearedRandomFontGenerator TwistedRandomFontGenerator的子类,和 TwistedRandomFontGenerator类的构造器参数也相同,显示效果相近,采用的算法有所不同
    DeformedRandomFontGenerator 构造器的参数和上两个类相同,采用的方式也类似

    BackgroundGenerator

    Background设置背景颜色或背景图片、设置图片大小

    在com.octo.captcha.component.image.backgroundgenerator包中包含了的Background类

    Background 作用 示例 效果
    UniColorBackgroundGenerator 设置图片大小和以单一颜色为背景的图片背景,可以设置一个或多个备选颜色。
    如果想让颜色更加多变,则可以使用RandomRangeColorGenerator类,设置随机取得的RGB值,让RGB值分别的随机取得,则RGB值随机搭配的颜色将会更加多变
    UniColorBackgroundGenerator background = new UniColorBackgroundGenerator(new Integer(200), new Integer(100), Color.BLUE);
    MultipleShapeBackgroundGenerator 设置一种多变的背景花纹 MultipleShapeBackgroundGenerator background = new MultipleShapeBackgroundGenerator (200,100,Color.RED,Color.BLUE,10,10,8,8,Color.WHITE,Color.YELLOW,3);
    GradientBackgroundGenerator 设置一种渐变颜色的背景,也可以设置多种颜色的渐变背景 GradientBackgroundGenerator background = new GradientBackgroundGenerator(200, 100, Color.BLACK, Color.WHITE);
    FunkyBackgroundGenerator 设置四种不同颜色混杂在一起的背景。
    如果创建过程中,给SingleColorGenerator类改为使用RandomListColorGenerator或其他类,也可以让四种颜色随机变化
    SingleColorGenerator leftUpColor = new SingleColorGenerator(Color.RED); SingleColorGenerator leftDownColor = new SingleColorGenerator(Color.YELLOW); SingleColorGenerator rightUpColor = new SingleColorGenerator(Color.BLUE); SingleColorGenerator rightDownColor = new SingleColorGenerator(Color.GREEN); FunkyBackgroundGenerator background = new FunkyBackgroundGenerator( 200, 100, leftUpColor, leftDownColor, rightUpColor, rightDownColor, 0.5f);
    FileReaderRandomBackgroundGenerator 设置从指定目录读取图片作为生成图片的背景,目录中的图片,会在类构造期间就全部读取到内存 FileReaderRandomBackgroundGenerator background = new FileReaderRandomBackgroundGenerator(200, 100, "E:¥¥testproject¥¥jcaptcha¥¥images¥¥backgrounds");
    EllipseBackgroundGenerator 一种花样的背景,该类到目前为止没有更多的配置选项,只能设置图片大小,颜色和其他相关的值都不能设置

    TextPaster

    TextPaster可以设置单词的最小和最大长度和设置字的颜色(前景颜色),设置单词在图像中的位置是固定还是随机
    在com.octo.captcha.component.image.textpaster包中包含了的常用TextPaster类

    TextPaster 作用 示例 效果
    RandomTextPaster 最常用的TextPaster,可以设置生成单词的随机长度范围,和设置一种或多种前景颜色,生成的字符串在图像中的位置是随机 RandomTextPaster textPaster = new RandomTextPaster(new Integer(5), new Integer(10), Color.BLACK);

    也可以设置多种随机前景颜色:Color[] colors = new Color[]{Color.RED,Color.YELLOW,Color.BLUE}; RandomListColorGenerator randomColors = new RandomListColorGenerator(colors); RandomTextPaster textPaster = new RandomTextPaster(new Integer(5), new Integer(10), randomColors);
    SimpleTextPaster 和RandomTextPaster用法和参数都相同,但是生成的字符串位置不变
    NonLinearTextPaster 设置非直线的TextPaster,最后生成的文本成非直线的排列 NonLinearTextPaster textPaster = new NonLinearTextPaster (new Integer(5), new Integer(10), Color.BLACK);
    DoubleTextPaster 可以形成两行好像重影效果的文本,单词位置固定 DoubleTextPaster textPaster = new DoubleTextPaster(new Integer(5),new Integer(10), Color.BLACK);
    DoubleRandomTextPaster 和DoubleTextPaster类类似的效果,但是单词在图像中出现的位置和第二行字上下位置,是随机的
    DecoratedRandomTextPaster 为生成的文本加上修饰,例如干扰线干扰点 SingleColorGenerator lineColor = new SingleColorGenerator(Color.BLUE); TextDecorator decorator1 = new LineTextDecorator(new Integer(1), lineColor, AlphaComposite.SRC_OVER); TextDecorator[] decorators = new TextDecorator[] { decorator1 }; SingleColorGenerator color = new SingleColorGenerator(Color.RED); DecoratedRandomTextPaster textPaster = new DecoratedRandomTextPaster(new Integer(5), new Integer(10), color, decorators);

    LineTextDecorator的构造器的最后一个参数是干扰线的类型,在该参数上进行修改,也能取得不错的效果,例如将AlphaComposite.SRC_OVER改为AlphaComposite.CLEAR、AlphaComposite.SRC_IN、AlphaComposite.XOR

    LineTextDecorator类是线型的装饰器,Captcha还提供了一种点状的装饰类:
    SingleColorGenerator dColor = new SingleColorGenerator(Color.BLUE); TextDecorator decorator2 = new BaffleTextDecorator(new Integer(1), dColor, AlphaComposite.SRC_OUT); TextDecorator[] decorators = new TextDecorator[] { decorator2 }; SingleColorGenerator color = new SingleColorGenerator(Color.RED); DecoratedRandomTextPaster textPaster = new DecoratedRandomTextPaster(new Integer(5), new Integer(10), color, decorators);








    Deformation和ImageFilter

        这两种类,都提供了对图片字体进行进一步变形的功能,Deformation类是Captcha框架中提供的变形类 和接口,ImageFilter是一个使用java提供图形图像方面服务的公司提供的通用的图形变形过滤器,可以实现的效果很多。

        Deformation和ImageFilter都分为3层,一种是在文字级别的,一种是在背景级别的,还有在整个图片级别的,用于在图片生成不同的阶段对图片进行变形。

        Deformation类,当前Captcha只提供了一种选择,就是PuzzleImageDeformation类,该类的效果是将 图片旋转,然后直接贴在原来图片的上面,所以效果不是很好,相信以后Captcha会提供更多的Deformation类,并且会不断完善,但是目前,不推荐使用。

        ImageFilter过滤器,有很多现有的资源可以供选择使用,是目前最好的选择。

    // font  
    RandomFontGenerator fonts = new RandomFontGenerator(new Integer(20), new Integer(20));  
    
    // background  
    BackgroundGenerator background = new UniColorBackgroundGenerator(new Integer(400), new Integer(300), Color.white);  
    
    // textPaster  
    RandomTextPaster textPaster =  new RandomTextPaster(new Integer(5), new Integer(5), Color.BLACK);  
    
    // no deformation  
    ImageDeformation noneDeformation = new ImageDeformationByFilters( new ImageFilter[] {});
    
    // filter创建过滤器  
    ImageDeformation filters =  new ImageDeformationByFilters( new ImageFilter[] { new TwirlFilter() });  DeformedComposedWordToImage cwti =   new DeformedComposedWordToImage(fonts, background, textPaster, noneDeformation, filters, noneDeformation);  
    
    // 设置随机取词范围
    RandomWordGenerator words = new RandomWordGenerator("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    GimpyFactory gimpy = new GimpyFactory(words, cwti);  
    SimpleListImageCaptchaEngine engine = new SimpleListImageCaptchaEngine();
    engine.setFactories(new CaptchaFactory[] { gimpy });  
    FastHashMapCaptchaStore captchaStore = new FastHashMapCaptchaStore();
    
    // 创建Captcha服务  
    DefaultManageableImageCaptchaService defaultService = new  DefaultManageableImageCaptchaService(captchaStore, engine, 180, 100000, 75000);  
    return defaultService;
    

        上述的代码,是在创建一个Captcha服务器的过程中,将过滤器加入其中,其中使用的font、background、 和testPaster类,都使用了最简单的,没有变形效果的类,意在只查看过滤器对整个图片的映像。

    更多过滤器效果,可以参见Java Image Filters

    相关文章

      网友评论

          本文标题:Jcaptcha验证码介绍

          本文链接:https://www.haomeiwen.com/subject/ywzlcqtx.html