Jcaptcha验证码介绍
组件介绍
组件 | 作用 |
---|---|
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