简介
Kaptcha 是一个可高度配置的实用验证码生成工具,可自由配置的选项如:
- 验证码的字体
- 验证码字体的大小
- 验证码字体的字体颜色
- 验证码内容的范围(数字,字母,中文汉字!)
- 验证码图片的大小,边框,边框粗细,边框颜色
- 验证码的干扰线
- 验证码的样式(鱼眼样式、3D、普通模糊、…)
示例
Maven依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
kaptcha配置文件
@Component
public class KaptchConfig {
@Bean
public DefaultKaptcha getDefaultKaptcha() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 图片边框
properties.setProperty("kaptcha.border", "no");
// 边框颜色
properties.setProperty("kaptcha.border.color", "black");
//边框厚度
properties.setProperty("kaptcha.border.thickness", "1");
// 图片宽
properties.setProperty("kaptcha.image.width", "120");
// 图片高
properties.setProperty("kaptcha.image.height", "60");
//图片实现类
properties.setProperty("kaptcha.producer.impl", "com.google.code.kaptcha.impl.DefaultKaptcha");
//文本实现类
properties.setProperty("kaptcha.textproducer.impl", "com.google.code.kaptcha.text.impl.DefaultTextCreator");
//文本集合,验证码值从此集合中获取
properties.setProperty("kaptcha.textproducer.char.string", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
//验证码长度
properties.setProperty("kaptcha.textproducer.char.length", "4");
//字体
properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
//字体颜色
properties.setProperty("kaptcha.textproducer.font.color", "black");
//文字间隔
properties.setProperty("kaptcha.textproducer.char.space", "4");
//干扰实现类
properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.DefaultNoise");
//干扰颜色
properties.setProperty("kaptcha.noise.color", "blue");
//干扰图片样式
properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.WaterRipple");
//背景实现类
properties.setProperty("kaptcha.background.impl", "com.google.code.kaptcha.impl.DefaultBackground");
//背景颜色渐变,结束颜色
properties.setProperty("kaptcha.background.clear.to", "white");
//文字渲染器
properties.setProperty("kaptcha.word.impl", "com.google.code.kaptcha.text.impl.DefaultWordRenderer");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
控制器
@RestController
@RequestMapping("/test/kaptch")
public class KaptchController {
@Resource
private DefaultKaptcha defaultKaptcha;
/**
* 生成验证码
* @return
* @throws IOException
*/
@RequestMapping("/code")
public ResultBean<String> code() throws IOException {
// 生成文字验证码
String text = defaultKaptcha.createText();
System.out.println("文字验证码为" + text);
// 生成图片验证码
BufferedImage image = defaultKaptcha.createImage(text);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", out);
// 对字节组Base64编码
return ResultBeanUtil.success(Base64.getEncoder().encodeToString(out.toByteArray()));
}
}
测试
{
"code": 200,
"msg": "成功",
"data": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAA8AHgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0ICngU0CpAKAFAplzeW1jEst1MkMbOqBnOAWJwB+dSgVzPiQfbvEfhzSRypuWvZfZYlyufYsR+VdGGoqrU5ZbWbfok2/yFJ2R1YFPAqrcX9pZjNzcxRdB87AdSAP1IqOTW9MgumtpbyFZU27lLdCxwq/7x7L15HqK5xmkBTwKjjkjckK6sR1API/zkVMBQA4CngVWu7uCwtXubh9kSfebGcfhUtpcRXdus8LBo35VgQQw9QR2NAE4FSAU0CngUAOAp4FRrIhcoHUuOqg81MBQA4CilAooA5ICngUgFZF34r0aw1yLSLq8SK6dN3zcKvoGboCRyP8A64zpSo1Krapxba107CbS3NwV5Dr8mvagda8Xadqa21haK1rbyKmWkiDfNtzxgt/F/hXQa14vTxBMfDvhsTXMlwwiub2FCUgjJwzA9+M89PQmtPxjYQ6Z8P5orWMLa2EW7yv76hSMH15IP1Fd8qU8HRftFac9Enuo9X5X2XlfyJupPTocn8N9Eh8R6a2s6o81/dbj5XnSbkRgTzj6kn8PetC1+Hs91rJkvWlgiiDLEqvuUKRgnPGSemDnAx1AxU/wZZZvChnxh2fy8DoAgC/r1rsfFOrR6NoF1ctK8cgicx7OpOP6Zz+FeYlfRFnmHiK8v9C1q2sdHl86zw6zRQGR1jG4Z3YO1m65z0JJGDmvX9DE50e2NwwaQrnhSuB2GDz09a8o8I2c3iq6iugZlsoZceRIE2qQAWPBBbJyBn1GetezRokMQVFCIowABgAU2mnZgeX/ABYlvr+S10uzScwRETXLRDBHOV+bOB0JwR2rrPh9ced4dRPOMpTq/GGzzuGOOe49c+tcXffYdU1zVLy/lFtNaYZXfZkMBu8vOOVKhRu98epN/wCE2qrdzalDLNE0qTERrDwhV/3nToCMkfhSA9UArG8V6/H4b0GW+YFpCfLhUDJZz0GK2uFBJOAOprzfUWPjHxLqSAk2Og7ZoZF/im2ZK+4460AZPwOvb3U7rXb7UpZJbuaUOWc5wMkED0Gf5V7OBXivwBnM8OuM2C32gEewOT/PNe1gUAOAopwFFAHIgVz3ijwVpvisQtcFoLiJhieIDcUzyp/p6H8QejAp4rahiKuHqKpSlaS6iaTVmVdL0mx0ayS00+2jghXso5J9SepPua4zxt450D+y9X0DzZp7qSBoP3KblDsCOucZXgn8uucUvFnjW81fUP8AhGfCe6a5kJSa5jPT1CnsB3b8vWls/DV54Otks9M0BdY1K7jPn3cjhY0B4KjPQZP4/wAvW+qUsPS+sZhdzlqo31fnJ62X4sz5m3aBy3w3n8VDTZ9I8PNZxp5paS5ucExv3AHPYDjB6e9VfFNjqFx4kttIvtauNSvpeGLZVImLYyq85AALcYyD2xXUeE/hd4j0gMJdcS1ilZWmjt8kthlPXscbhn3NaY+E0llqB1Cx1idrlFURGU8jG4HJIPXIbjnIOCuQV53mtSGmGiqa8lr/AOBO7+6xXInvqbel/DPwyunIt1piySFnYMXdWCliVUkNztUhc98Z71E/gjw/PZXFzpc2p2jWxYq1veyDJUc4LEj1GaqX9/40stPubZbVXl2kK6jcBlOdoHQBgWGT0JGMgAXfB1jrmm/DqZViiutYd3YRs6oCxPIY47c5zz24rBZljF/y9l823+Y+SPY4rTvA97q90bmEWuoSBd7rqMDRtgsrDc68gnbgAjgbh0wTU0CdvAfjhI7iwi0qG4Ty9zS+YhHnKzNv9NgdBxxlc9zXofw+8J6j4buL6S4DCO8ZWdGijT51BG4BHIAOfTJxk46Unjr4byeKZGntb5rd1TKr2LBSFX/dJIJ+nfs1i4T0r00/Ne6/w0+9MOVrZnVeIbm+bw7JLokK3dxKmYtrDawwTn3Bxjj+9XmXhjUPF2i+EzY2fg2d7hYW+1Xd7KIwwG45x1bAOPwrd8PeGfF3hvTxJps0RkjA8/TZ3zbznGWMR6xnOfY+3Qaknja/1i2m03RdOFt4ijys1jqLhCg2n5l/vjOOnbrjIqamE911KL5orfuvVfqrrzBS6M8k+FnhvUrvX9R0hPEFzpuw5mFmAS5XGOT0GGPavpe3iMNvHEztIUUKXbq2B1NeN6J8GNYj1a71i+8StYXV3IzyRaahwNzbiAzHp+FexWFs1np9tbPPJcNDEsZmk+9IQANx9zjJrjKLIFFOAooA5ICuA8d3viPUNUh8MaNaSxR3SbpLvoHTuNw+6o79znHfn0AU8V1YPErDVVVcFJra+1+j+RMo8ysYHhHwhY+FNP8AKgAlupAPPuCPmc+g9F9q6UCminisq9epXqOrVd5PqNJJWQ4CpAKaKeKyGBRXQo6hlYYIIyCKlApoqQUAOAp4FNFPFADgKydf8Mad4jgQXSvFcwndb3cDbJoG9Vb+nStgU8VdOpOlJTg7NCavucVbeJNT8KXEdh4vxJZswS31uJMRt6CZf4G9+h/Amu5idJY1kjZXRgCrKcgj1BqKa3hu7eS3uIkmhkUq8cihlYehB61wGjeZ4W+JyeFtOml/sa5s2ultpm3iB8niMnkL7EnrXeqcMXCU4rlnFXfZry7Py29Cb8uh6SBRSiivNLP/2Q=="
}
随意找一个在线base64字符串转图片的网站,将上面测试结果中的data值拷贝到网页中进行测试