diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a5ed7763..fce51e6fc 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * 【json 】 JSONConfig增加setWriteLongAsString可选是否将Long写出为String类型(issue#3541@Github) * 【cache 】 CacheUtil.newTimedCache增加有schedulePruneDelay参数的重载方法(issue#I9HO25@Gitee) * 【core 】 NumberChineseFormatter提供阿拉伯转中文支持多位小数的方法(pr#3552@Github) +* 【captcha】 Captcha.setBackground为null时背景透明(issue#3558@Github) ### 🐞Bug修复 * 【http 】 修复HttpUtil.urlWithFormUrlEncoded方法重复编码问题(issue#3536@Github) diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java index 7c4d0ee4c..adb48c32e 100755 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/AbstractCaptcha.java @@ -60,7 +60,7 @@ public abstract class AbstractCaptcha implements ICaptcha { /** * 背景色 */ - protected Color background; + protected Color background = Color.WHITE; /** * 文字透明度 */ diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java index 27e24bc0e..7f6cf2ed1 100755 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/CircleCaptcha.java @@ -82,8 +82,8 @@ public class CircleCaptcha extends AbstractCaptcha { @Override public Image createImage(String code) { - final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - final Graphics2D g = ImgUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); + final BufferedImage image = new BufferedImage(width, height, (null == this.background) ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_INT_RGB); + final Graphics2D g = ImgUtil.createGraphics(image, this.background); try { // 随机画干扰圈圈 diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java index ba86d6587..f6276967a 100755 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/GifCaptcha.java @@ -3,6 +3,7 @@ package cn.hutool.captcha; import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.captcha.generator.RandomGenerator; +import cn.hutool.core.img.ImgUtil; import cn.hutool.core.img.gif.AnimatedGifEncoder; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; @@ -181,13 +182,11 @@ public class GifCaptcha extends AbstractCaptcha { * @return BufferedImage */ private BufferedImage graphicsImage(char[] chars, Color[] fontColor, char[] words, int flag) { - BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + final BufferedImage image = new BufferedImage(width, height, (null == this.background) ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_INT_RGB); //或得图形上下文 - Graphics2D g2d = image.createGraphics(); + final Graphics2D g2d = ImgUtil.createGraphics(image, this.background); try { //利用指定颜色填充背景 - g2d.setColor(ObjectUtil.defaultIfNull(this.background, Color.WHITE)); - g2d.fillRect(0, 0, width, height); AlphaComposite ac; // 字符的y坐标 float y = (height >> 1) + (font.getSize() >> 1); diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java index 197062a7e..55be796cf 100755 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/LineCaptcha.java @@ -74,8 +74,8 @@ public class LineCaptcha extends AbstractCaptcha { @Override public Image createImage(String code) { // 图像buffer - final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); + final BufferedImage image = new BufferedImage(width, height, (null == this.background) ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_INT_RGB); + final Graphics2D g = ImgUtil.createGraphics(image, this.background); try { // 干扰线 diff --git a/hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java b/hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java index 7216837fd..f0c2a1482 100755 --- a/hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java +++ b/hutool-captcha/src/main/java/cn/hutool/captcha/ShearCaptcha.java @@ -84,8 +84,8 @@ public class ShearCaptcha extends AbstractCaptcha { @Override public Image createImage(String code) { - final BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); - final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); + final BufferedImage image = new BufferedImage(width, height, (null == this.background) ? BufferedImage.TYPE_4BYTE_ABGR : BufferedImage.TYPE_INT_RGB); + final Graphics2D g = ImgUtil.createGraphics(image, this.background); try{ // 画字符串 diff --git a/hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaTest.java b/hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaTest.java index c1cef44c5..233635d01 100755 --- a/hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaTest.java +++ b/hutool-captcha/src/test/java/cn/hutool/captcha/CaptchaTest.java @@ -28,8 +28,8 @@ public class CaptchaTest { public void lineCaptchaTest3() { // 定义图形验证码的长和宽 LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 70, 4, 15); - lineCaptcha.setBackground(Color.yellow); - lineCaptcha.write("f:/test/captcha/tellow.png"); + lineCaptcha.setBackground(null); + lineCaptcha.write("d:/test/captcha/tellow.png"); } @Test