前言
首先这个项目是完全基于java底层开发的,没有经过任何的框架渲染,目前项目中集成了junit测试框架,主要使用@Test
注解。
注意: 建议使用最新版的junit测试框架
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
示例:
1、png格式验证码
@Test
public void getPngCaptcha() throws Exception{
PngCaptcha captcha = new PngCaptcha();
Properties properties = new Properties();
Config config = new Config(properties);
captcha.setConfig(config);
String text = captcha.getText();
System.out.println(text);
BufferedImage image = captcha.RenderImage(text);
captcha.write(new FileOutputStream(new File("路径+验证码命名")), image);
}
效果:
2、 gif格式验证码:
@Test
public void getGifCaptcha() throws Exception {
Properties properties = new Properties();
GifCaptcha captcha = new GifCaptcha();
Config config = new Config(properties);
captcha.setConfig(config);
String text = captcha.getText();
System.out.println(text);
captcha.createGif(text);
captcha.write(new FileOutputStream(new File("路径+验证码命名")), captcha.getImageBytes());
}
效果:
内置功能
1、任意切换图片大小
两行配置代码可以实现改变验证码图片大小:
properties.setProperty(CaptchaConstant.CAPTCHA_IMAGE_WIDTH, "300");
properties.setProperty(CaptchaConstant.CAPTCHA_IMAGE_HEIGHT, "100");
效果:
2、切换字体需求(三种方法)
第一种:代码内置实现了字体配置(默认字体大小30)具体效果如上所示
第二种:自行添加内置字体(字体来源均已在下文提及)
设置字体:
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_FONT_NAMES, "Algerian,AlphabetSoup Tilt BT");
修改字体大小:
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_FONT_SIZE, "36");
png格式效果:
gif格式效果:
第三种:将准备好的字体放在项目的根目录下的resource
目录下
@Test
public void getGifCaptcha() throws Exception {
Properties properties = new Properties();
GifCaptcha captcha = new GifCaptcha();
Config config = new Config(properties);
captcha.setConfig(config);
String text = captcha.getText();
// 注意这行代码
captcha.setTextFont("CASTELAR.ttf", 36f);
captcha.createGif(text);
captcha.write(new FileOutputStream(new File("路径+验证码命名")), captcha.getImageBytes());
}
效果:
3、干扰线,干扰圆
修改干扰线(默认干扰线数量为1)
// 设置干扰线数量(取消则设置数量为0)
properties.setProperty(CaptchaConstant.CAPTCHA_SHADE_NUMBER, "0");
// 设置干扰线厚度(厚度默认为1)
properties.setProperty(CaptchaConstant.CAPTCHA_SHADE_THICKNESS, "5");
// 设置干扰圆数量(取消则设置数量为0)
properties.setProperty(CaptchaConstant.CAPTCHA_NOISE_NUMBER, "0");
取消干扰线干扰圆效果:
设置干扰线干扰圆效果(效果自行设置):
// 设置干扰线数量(取消则设置数量为0)
properties.setProperty(CaptchaConstant.CAPTCHA_SHADE_NUMBER, "3");
// 设置干扰线厚度(厚度默认为1)
properties.setProperty(CaptchaConstant.CAPTCHA_SHADE_THICKNESS, "5");
// 设置干扰圆数量(取消则设置数量为0)
properties.setProperty(CaptchaConstant.CAPTCHA_NOISE_NUMBER, "5");
4、扭曲效果
不添加扭曲效果:
// 添加扭曲效果(默认true)
properties.setProperty(CaptchaConstant.CAPTCHA_IMAGE_SHEAR_ADD, "no");
添加扭曲效果:
// 添加扭曲效果(默认true)
properties.setProperty(CaptchaConstant.CAPTCHA_IMAGE_SHEAR_ADD, "yes");
5、设置验证码内容
设置内容长度:(默认为4位)
// 设置长度(默认四位)
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_LENGTH, "6");
设置内容格式:(内置10种内容格式)
// 数字
NUMBER(1, "NUMBER"),
// 中文数字
NUMBER_ZH(2, "NUMBER_ZH"),
// 中文
CHINESE(3, "CHINESE"),
// 点击中文成语
CHINESE_IDIOM(4, "CHINESE_IDIOM"),
// 小写英文
CHAR(5, "CHAR"),
// 大写
UPPER_CHAR(6, "UPPER_CHAR"),
// 英文和中文混合
STRING(7, "STRING"),
//数字和大小写字符验证码
UPPER_STRING(8, "UPPER_STRING"),
// 算术
ARITHMETIC(9, "ARITHMETIC"),
// 中文算术
ARITHMETIC_ZH(10, "ARITHMETIC_ZH");
示例:
1、数字
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "NUMBER");
2、中文数字
// 设置长度(默认四位)
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_LENGTH, "6");
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "NUMBER_ZH");
3、随机中文
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "CHINESE");
4、中文成语
@Test
public void getGifCaptcha() throws Exception {
Properties properties = new Properties();
GifCaptcha captcha = new GifCaptcha();
// 注意这行代码
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "CHINESE_IDIOM");
Config config = new Config(properties);
captcha.setConfig(config);
String text = captcha.getText();
// 注意这行代码
captcha.createGif(text.split(",")[1]);
captcha.write(new FileOutputStream(new File("路径+验证码命名")), captcha.getImageBytes());
}
6、算术
@Test
public void getGifCaptcha() throws Exception {
Properties properties = new Properties();
GifCaptcha captcha = new GifCaptcha();
// 这行
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "ARITHMETIC");
Config config = new Config(properties);
captcha.setConfig(config);
String text = captcha.getText();
System.out.println(text);
// 这行
int temp = text.indexOf("?");
// 这行
captcha.createGif(text.substring(0, temp));
captcha.write(new FileOutputStream(new File("路径+验证码命名")), captcha.getImageBytes());
}
7、中文算术
properties.setProperty(CaptchaConstant.CAPTCHA_TEXT_TYPE, "ARITHMETIC_ZH");
6、设置边框
设置无边框:
properties.setProperty(CaptchaConstant.CAPTCHA_BORDER, "no");
设置边框厚度及颜色:
properties.setProperty(CaptchaConstant.CAPTCHA_BORDER_THICKNESS, "5");
properties.setProperty(CaptchaConstant.CAPTCHA_BORDER_COLOR, "0,0,0");
7、设置图片背景颜色
properties.setProperty(CaptchaConstant.CAPTCHA_BACKGROUND_COLOR, "0,0,0");
致谢
这个框架花费了我不少的心思,同时也参考了一些开源项目的解决方案,开源不易,感谢分享
- 感谢Kaptcha项目提供需求配置方法的灵感
- 感谢hutool工具类库开发者提供的底层工具支持
项目概况
- 已经对项目的基本逻辑进行了测试(尚未深入地进行测试)
- 项目内置了Base64编码工具类,可以实现将验证码图片进行编码
- 暂时未完善项目的IO流,没有集成前后端数据传输交互
- 没有完善简化操作验证码流程
- 后续会重构底层,添加滑动验证码和行为点击验证码
最后
项目的所有源码均已上传到码云,有需要者自行下载使用。
如果项目对你有所帮助,请动动你们的小手,给我一个小小的star
,谢谢!
免责声明:
项目开发所使用的字体均来源于所使用电脑的windows10系统提供的内置字体,使用者可自行查看 **C:\Windows\Fonts
**目录下的字体,或者是在网上下载喜欢的字体去更改项目内置的字体,后续如有发生任何字体侵权行为,与项目开发者无关,特此声明!