package cn.newstrength.common.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.apache.commons.codec.binary.Base64;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;
/**
*/
@Configuration
public class KaptchaConfig {
@Bean
public DefaultKaptcha defaultKaptcha() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 是否开启验证码图片的边框,默认为 true,建议保留
properties.setProperty("kaptcha.border", "no");
// 设置验证码图片边框的颜色,格式为 RGB,这里是绿色 (105,179,90)
properties.setProperty("kaptcha.border.color", "105,179,90");
// 设置验证码的文字(也就是随机字符)的颜色,这里是蓝色
properties.setProperty("kaptcha.textproducer.font.color", "black");
// 设置验证码图片的宽度,单位是像素,这里是 125px
properties.setProperty("kaptcha.image.width", "125");
// 设置验证码图片的高度,单位是像素,这里是 45px
properties.setProperty("kaptcha.image.height", "45");
// 设置验证码文字的字体大小,单位是像素,这里是 35px
properties.setProperty("kaptcha.textproducer.font.size", "35");
// 设置验证码存储在 Session 中的 key 名称,默认通常是 "KAPTCHA_SESSION_KEY"
// 这里你自定义成 "code",后续你可以通过 session.getAttribute("code") 获取验证码文本
properties.setProperty("kaptcha.session.key", "code");
// 设置验证码的字符长度,也就是图片中显示几个字符,这里设置为 4 个字符
properties.setProperty("kaptcha.textproducer.char.length", "4");
// 是否添加干扰线
// properties.setProperty("kaptcha.noise.impl", "no");
// 设置验证码所使用的字体名称,可以指定多个,用逗号分隔
// 这里指定了 "宋体,楷体,微软雅黑",系统会尝试按顺序使用这些字体
// 如果字体不存在,可能会使用默认字体
properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
public static void main(String[] args) {
// 启动 Spring 上下文,并加载 KaptchaConfig 配置类
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(KaptchaConfig.class);
// 从 Spring 容器中获取 DefaultKaptcha Bean
DefaultKaptcha d = context.getBean(DefaultKaptcha.class);
try {
String text = d.createText();
BufferedImage bi = d.createImage(text);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", outputStream);
String base64Image = "data:image/jpeg;base64," + Base64.encodeBase64String(outputStream.toByteArray());
System.out.println("字符串为:"+base64Image);
} catch (Exception e) {
e.printStackTrace();
}
}
}