dromara / hutool

🍬A set of tools that keep Java sweet.
https://hutool.cn
Other
29.01k stars 7.5k forks source link

[Hutool-Captcha] 无法生成透明背景的验证码 #3558

Closed Whitroom closed 5 months ago

Whitroom commented 5 months ago

版本情况

JDK版本: openjdk 17.0.9 dragonwell hutool版本: 5.8.27(请确保最新尝试是否还有问题)

问题描述(包括截图)

  1. 复现代码
package com.example;

import java.awt.Color;

import cn.hutool.captcha.CircleCaptcha;
import cn.hutool.captcha.generator.MathGenerator;

public class Main {
    public static void main(String[] args) {
        MathGenerator mathGenerator = new MathGenerator(1);
        CircleCaptcha circleCaptcha = new CircleCaptcha(130, 25, 0, 0);
        circleCaptcha.setGenerator(mathGenerator);
        circleCaptcha.setBackground(new Color(255, 255, 255, 0));
        circleCaptcha.write("./captcha.png");
    }
}
  1. 输出图片 captcha
  2. 我们需要的效果 captcha
  3. 可选的解决方案 在阅读源码的时候,发现CircleCaptcha类的createImage函数中创建了BufferedImage对象,并设定了BufferedImage.TYPE_INT_RGB,改成BufferedImage.TYPE_INT_ARGB就可以实现了(59行)。

其他类型的验证码也有一样的问题,有机会的话可以顺便改下😄。

looly commented 5 months ago

感谢。

5.8.28修改此处逻辑。

新逻辑是,当设置背景为null时,则背透明。