main 方法使用 spring 管理的 bean 对象

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();
        }
    }
    
}

 

posted @ 2025-08-22 10:39  雪化山河  阅读(8)  评论(0)    收藏  举报