后端生成图片验证码

注:以下代码主要使用kotlin进行编写,kotlin可兼容java,可以直接使用。IDEA也支持将java与kotlin代码进行互相转换。

1、引入依赖:

Gradle(若你使用的是gradle依赖管理,使用这个):

implementation("com.github.penggle:kaptcha:2.3.2")

Maven(若你使用的maven依赖管理,使用这个):

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

若未用依赖管理工具,则可将maven仓库对应的依赖jar包拉下导入lib。

2、配置类(和配置文件2选1即可)
@Configuration
class KaptchaConfig {
    @Bean
    fun producer(): Producer {
        val properties = Properties()

        //图片边框
        properties["kaptcha.border"] = "no"

        //图片中有几位字符
        properties["kaptcha.textproducer.char.length"] = "4"

        // 图片长宽
        properties["kaptcha.image.height"] = "50"
        properties["kaptcha.image.width"] = "100"

        //图片显示样式
        properties["kaptcha.obscurificator.impl"] = "com.google.code.kaptcha.impl.WaterRipple"

        //字体颜色
        properties["kaptcha.textproducer.font.color"] = "blue"

        //字体大小
        properties["kaptcha.textproducer.font.size"] = "40"

        //干扰 可选参数com.google.code.kaptcha.impl.NoNoise、com.google.code.kaptcha.impl.DefaultNoise;
        properties["kaptcha.noise.impl"] = "com.google.code.kaptcha.impl.DefaultNoise"
        properties["kaptcha.noise.color"] = "255,96,0"

        //排除b、g、i、l、o、q、s、z,1、0、9等比较难判断的字母和数字
        properties["kaptcha.textproducer.char.string"] = "acdefhkmnprtwxy2345678"
        val config = Config(properties)
        return config.producerImpl
    }
}
3、配置文件(和配置类2选一即可)
kaptcha:
  # 边框
  border: "no"
  textproducer:
    char:
      # 图片中有几位字符
      length: 4
      # 有哪些字符
      string: acdefhkmnprtwxy2345678

    font:
      # 字体颜色
      color: blue
      # 字体大小
      size: 40
  noise:
    # 干扰项 com.google.code.kaptcha.impl.NoNoise、com.google.code.kaptcha.impl.DefaultNoise
    impl: com.google.code.kaptcha.impl.DefaultNoise
    color: 255,96,0
  image:
    # 高
    height: 50
    # 宽
    width: 100

  obscurificator:
    # 图片显示样式
    impl: com.google.code.kaptcha.impl.WaterRipple
4、使用(以下是kotlin的写法,java换成对应的类注入即可)
@Autowired
private lateinit var producer: Producer

fun getPicVeriCode(): String {
  
  // 随机获取内容
  val verificationCode = producer.createText()
  val verificationPic = generatePicVerification(verificationCode)
  // 之后可以将验证码放入redis,设置过期时间为 60s,之后进行验证码校验
  return verificationPic
}

// 这里生成的base64放入img标签可直接展示。
fun generatePicVerification(verificationCode: String): String {
  // 生成对应的图片
  val bi = producer.createImage(verificationCode)
  val outputStream = ByteArrayOutputStream()
  ImageIO.write(bi, "jpeg", outputStream)
  val base64Image = "data:image/jpeg;base64," + Base64.encodeBase64String(outputStream.toByteArray())
  return "<img src='$base64Image'/>"
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐