Java 生成图形验证码

445 阅读1分钟

引入kaptcha库

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

创建bean

<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
    <property name="config">
        <bean class="com.google.code.kaptcha.util.Config">
            <constructor-arg>
                <props>
                    <prop key="kaptcha.border">yes</prop>
                    <prop key="kaptcha.border.color">105,179,90</prop>
                    <prop key="kaptcha.textproducer.font.color">blue</prop>
                    <prop key="kaptcha.image.width">125</prop>
                    <prop key="kaptcha.image.height">45</prop>
                    <prop key="kaptcha.textproducer.font.size">45</prop>
                    <prop key="kaptcha.session.key">code</prop>
                    <prop key="kaptcha.textproducer.char.length">4</prop>
                    <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
                </props>
            </constructor-arg>
        </bean>
    </property>
</bean>

Java代码

@Resource
private Producer captchaProducer;

// create the text for the image
String capText = captchaProducer.createText();

// create the image with the text
BufferedImage bufferedImage = captchaProducer.createImage(capText);

//io流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
    //写入流中
    ImageIO.write(bufferedImage, "png", baos);
} catch (IOException e) {
    e.printStackTrace();
}
//转换成字节
byte[] bytes = baos.toByteArray();
BASE64Encoder encoder = new BASE64Encoder();
//转换成base64串
String png_base64 = encoder.encodeBuffer(bytes).trim();
//删除 \r\n
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");
System.out.println("值为:"+"data:image/jpg;base64,"+png_base64); 

// todo 将 capText 保存到redis中,用于后续校验

验证Base64