From 9a3d6857dbe3a4aa076e13f777b2bbfc5bf61e5a Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 15 Mar 2024 17:03:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DGraphics2D=E7=9A=84=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=B2=A1=E9=87=8A=E6=94=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/hutool/core/data/id/ULID.java | 4 +- .../hutool/swing/captcha/CircleCaptcha.java | 12 ++-- .../hutool/swing/captcha/GifCaptcha.java | 55 ++++++++++--------- .../hutool/swing/captcha/LineCaptcha.java | 12 ++-- .../hutool/swing/captcha/ShearCaptcha.java | 17 +++--- 5 files changed, 57 insertions(+), 43 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/data/id/ULID.java b/hutool-core/src/main/java/org/dromara/hutool/core/data/id/ULID.java index 5b6acd32b..880bea43f 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/data/id/ULID.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/data/id/ULID.java @@ -234,7 +234,7 @@ public class ULID implements Comparable, Serializable { * @param timestamp 时间戳 */ private static void checkTimestamp(final long timestamp) { - Assert.isTrue((timestamp & TIMESTAMP_MASK) == 0), "ULID does not support timestamps after +10889-08-02T05:31:50.655Z!") - ; + Assert.isTrue((timestamp & TIMESTAMP_MASK) == 0, + "ULID does not support timestamps after +10889-08-02T05:31:50.655Z!"); } } diff --git a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/CircleCaptcha.java b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/CircleCaptcha.java index 57bbbe604..4495ccabf 100644 --- a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/CircleCaptcha.java +++ b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/CircleCaptcha.java @@ -85,11 +85,15 @@ public class CircleCaptcha extends AbstractCaptcha { final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); - // 随机画干扰圈圈 - drawInterfere(g); + try{ + // 随机画干扰圈圈 + drawInterfere(g); - // 画字符串 - drawString(g, code); + // 画字符串 + drawString(g, code); + } finally { + g.dispose(); + } return image; } diff --git a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/GifCaptcha.java b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/GifCaptcha.java index a63aec5ce..11f0e8300 100644 --- a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/GifCaptcha.java +++ b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/GifCaptcha.java @@ -13,9 +13,9 @@ package org.dromara.hutool.swing.captcha; +import com.madgag.gif.fmsware.AnimatedGifEncoder; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.core.util.RandomUtil; -import com.madgag.gif.fmsware.AnimatedGifEncoder; import org.dromara.hutool.swing.captcha.generator.CodeGenerator; import org.dromara.hutool.swing.captcha.generator.RandomGenerator; @@ -183,32 +183,35 @@ public class GifCaptcha extends AbstractCaptcha { final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); //或得图形上下文 final Graphics2D g2d = image.createGraphics(); - //利用指定颜色填充背景 - g2d.setColor(ObjUtil.defaultIfNull(this.background, Color.WHITE)); - g2d.fillRect(0, 0, width, height); - AlphaComposite ac; - // 字符的y坐标 - final float y = (height >> 1) + (font.getSize() >> 1); - final float m = 1.0f * (width - (chars.length * font.getSize())) / chars.length; - //字符的x坐标 - final float x = Math.max(m / 2.0f, 2); - g2d.setFont(font); - // 指定透明度 - if (null != this.textAlpha) { - g2d.setComposite(this.textAlpha); + try{ + //利用指定颜色填充背景 + g2d.setColor(ObjUtil.defaultIfNull(this.background, Color.WHITE)); + g2d.fillRect(0, 0, width, height); + AlphaComposite ac; + // 字符的y坐标 + final float y = (height >> 1) + (font.getSize() >> 1); + final float m = 1.0f * (width - (chars.length * font.getSize())) / chars.length; + //字符的x坐标 + final float x = Math.max(m / 2.0f, 2); + g2d.setFont(font); + // 指定透明度 + if (null != this.textAlpha) { + g2d.setComposite(this.textAlpha); + } + for (int i = 0; i < chars.length; i++) { + ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha(chars.length, flag, i)); + g2d.setComposite(ac); + g2d.setColor(fontColor[i]); + g2d.drawOval( + RandomUtil.randomInt(width), + RandomUtil.randomInt(height), + RandomUtil.randomInt(5, 30), 5 + RandomUtil.randomInt(5, 30) + );//绘制椭圆边框 + g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y); + } + } finally { + g2d.dispose(); } - for (int i = 0; i < chars.length; i++) { - ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, getAlpha(chars.length, flag, i)); - g2d.setComposite(ac); - g2d.setColor(fontColor[i]); - g2d.drawOval( - RandomUtil.randomInt(width), - RandomUtil.randomInt(height), - RandomUtil.randomInt(5, 30), 5 + RandomUtil.randomInt(5, 30) - );//绘制椭圆边框 - g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y); - } - g2d.dispose(); return image; } diff --git a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/LineCaptcha.java b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/LineCaptcha.java index 022de5e65..f79e3137e 100644 --- a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/LineCaptcha.java +++ b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/LineCaptcha.java @@ -77,11 +77,15 @@ public class LineCaptcha extends AbstractCaptcha { final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); - // 干扰线 - drawInterfere(g); + try{ + // 干扰线 + drawInterfere(g); - // 字符串 - drawString(g, code); + // 字符串 + drawString(g, code); + } finally { + g.dispose(); + } return image; } diff --git a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/ShearCaptcha.java b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/ShearCaptcha.java index cd7d35137..e97e90a18 100644 --- a/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/ShearCaptcha.java +++ b/hutool-swing/src/main/java/org/dromara/hutool/swing/captcha/ShearCaptcha.java @@ -85,13 +85,16 @@ public class ShearCaptcha extends AbstractCaptcha { final BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjUtil.defaultIfNull(this.background, Color.WHITE)); - // 画字符串 - drawString(g, code); - - // 扭曲 - shear(g, this.width, this.height, ObjUtil.defaultIfNull(this.background, Color.WHITE)); - // 画干扰线 - drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ColorUtil.randomColor()); + try{ + // 画字符串 + drawString(g, code); + // 扭曲 + shear(g, this.width, this.height, ObjUtil.defaultIfNull(this.background, Color.WHITE)); + // 画干扰线 + drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ColorUtil.randomColor()); + } finally { + g.dispose(); + } return image; }