sprintboot验证码kaptcha 自定义图片样式

前言

本文教大家如何自定义kaptcha的图片样式,效果如下:
在这里插入图片描述


一、kaptcha默认的图片样式的问题

这里我以鱼眼效果为例,大家看下默认的效果:
在这里插入图片描述
从上图大家可以看到,文字变形很严重,不是很好辨认。
下面是xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 生成kaptcha的bean-->
    <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
        <property name="config">
            <bean class="com.google.code.kaptcha.util.Config">
                <constructor-arg type="java.util.Properties">
                    <!--设置kaptcha属性 -->
                    <props>
                        <prop key="kaptcha.border ">yes</prop>
                        <prop key="kaptcha.border.color">105,179,90</prop>
                        <prop key="kaptcha.textproducer.font.color">black</prop>
                        <prop key="kaptcha.image.width">100</prop>
                        <prop key="kaptcha.image.height">44</prop>
                        <prop key="kaptcha.textproducer.font.size">27</prop>
                        <prop key="kaptcha.session.key">code</prop>
                        <prop key="kaptcha.textproducer.char.length">4</prop>
                        <prop key="kaptcha.textproducer.font.names">Arial, Courier</prop>
                        <prop key="kaptcha.textproducer.char.string">0123456789</prop>
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.FishEyeGimpy</prop>
                        <!--                        <prop key="kaptcha.noise.color">black</prop>-->
                        <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
                        <prop key="kaptcha.textproducer.char.space">3</prop>
                        <prop key="kaptcha.textproducer.impl">com.google.code.kaptcha.text.impl.DefaultTextCreator</prop>         </props>
                </constructor-arg>
            </bean>
        </property>
    </bean>
</beans>

其中图片效果用的是com.google.code.kaptcha.impl.FishEyeGimpy

二、自定义图片效果的步骤

这里我还是以鱼纹效果为例

1.创建自定义鱼纹效果类

代码如下(示例):

package com.zjyc.qzaft.entity.customs;

import com.google.code.kaptcha.impl.FishEyeGimpy;

import java.awt.*;
import java.awt.image.BufferedImage;

/**
 * Author: mek
 * Date: 2022\5\14 0014
 * Time: 10:37
 * Description: 自定义鱼眼纹效果
 */
public class AftFishEyeGimpy extends FishEyeGimpy {
    @Override
    public BufferedImage getDistortedImage(BufferedImage baseImage) {
        Graphics2D graph = (Graphics2D)baseImage.getGraphics();
        int imageHeight = baseImage.getHeight();
        int imageWidth = baseImage.getWidth();
        int horizontalLines = imageHeight / 7;
        int verticalLines = imageWidth / 7;
        int horizontalGaps = imageHeight / (horizontalLines + 1);
        int verticalGaps = imageWidth / (verticalLines + 1);

        int i;
        for(i = horizontalGaps; i < imageHeight; i += horizontalGaps) {
            graph.setColor(Color.blue);
            graph.drawLine(0, i, imageWidth, i);
        }

        for(i = verticalGaps; i < imageWidth; i += verticalGaps) {
            graph.setColor(Color.red);
            graph.drawLine(i, 0, i, imageHeight);
        }

        int[] pix = new int[imageHeight * imageWidth];
        int j = 0;

        for(int j1 = 0; j1 < imageWidth; ++j1) {
            for(int k1 = 0; k1 < imageHeight; ++k1) {
                pix[j] = baseImage.getRGB(j1, k1);
                ++j;
            }
        }

		/*这里删除了默认鱼纹效果类的渲染代码*/

        return baseImage;
    }
}

2.修改kaptcha.xml配置

将图片效果类设置成自己的AftFishEyeGimpy类
代码如下(示例):

<prop key="kaptcha.obscurificator.impl">com.zjyc.qzaft.entity.customs.AftFishEyeGimpy</prop>

总结

自定义图片效果的方法,就是新建类继承默认的效果类,然后重写getDistortedImage函数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot中整合Kaptcha,你可以按照以下步骤进行操作: 步骤1:添加Kaptcha依赖 在你的Spring Boot项目的pom.xml文件中,添加Kaptcha的依赖: ```xml <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version> </dependency> ``` 步骤2:配置Kaptcha 在application.properties(或application.yml)文件中,添加以下配置: ```properties # Kaptcha Configurations kaptcha.border = no kaptcha.border.color = black kaptcha.textproducer.font.color = black kaptcha.image.width = 150 kaptcha.image.height = 50 kaptcha.textproducer.char.string = ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 kaptcha.textproducer.char.length = 4 kaptcha.noise.impl = com.google.code.kaptcha.impl.NoNoise kaptcha.background.clear.from = white kaptcha.background.clear.to = white kaptcha.textproducer.font.size = 40 ``` 步骤3:创建验证码接口 在你的控制器中创建一个用于生成验证码图片的接口,例如: ```java @RestController public class CaptchaController { @GetMapping("/captcha") public void getCaptcha(HttpServletRequest request, HttpServletResponse response) { // 创建DefaultKaptcha对象并配置参数 DefaultKaptcha kaptcha = new DefaultKaptcha(); Properties properties = new Properties(); properties.setProperty("kaptcha.border", "no"); properties.setProperty("kaptcha.textproducer.font.color", "black"); kaptcha.setConfig(new Config(properties)); // 生成验证码文本 String text = kaptcha.createText(); // 将验证码文本保存到session中 request.getSession().setAttribute("captcha", text); // 创建验证码图片并输出到response中 BufferedImage image = kaptcha.createImage(text); try { OutputStream out = response.getOutputStream(); ImageIO.write(image, "jpg", out); out.flush(); } catch (IOException e) { e.printStackTrace();

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

if...else...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值