Jcaptcha验证码介绍

2018-12-01  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读