修复Graphics2D的资源没释放问题

This commit is contained in:
Looly 2024-03-15 16:37:41 +08:00
parent 3a70158d96
commit 03a92830a6
6 changed files with 58 additions and 39 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog # 🚀Changelog
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.8.27(2024-03-12) # 5.8.27(2024-03-15)
### 🐣新特性 ### 🐣新特性
* 【extra 】 FreemarkerEngine修改默认版本参数 * 【extra 】 FreemarkerEngine修改默认版本参数
@ -16,6 +16,7 @@
* 【json 】 修复JSONUtil序列化和反序列化预期的结果不一致问题pr#3507@Github * 【json 】 修复JSONUtil序列化和反序列化预期的结果不一致问题pr#3507@Github
* 【http 】 修复CVE-2022-22885HttpGlobalConfig可选关闭信任hostissue#2042@Github * 【http 】 修复CVE-2022-22885HttpGlobalConfig可选关闭信任hostissue#2042@Github
* 【core 】 修复DateUtil.betweenYear闰年2月问题issue#I97U3J@Gitee * 【core 】 修复DateUtil.betweenYear闰年2月问题issue#I97U3J@Gitee
* 【captcha】 修复Graphics2D的资源没释放问题issue#I98PYN@Gitee
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.8.26(2024-02-10) # 5.8.26(2024-02-10)

View File

@ -71,11 +71,15 @@ public class CircleCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g = ImgUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); final Graphics2D g = ImgUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
try{
// 随机画干扰圈圈 // 随机画干扰圈圈
drawInterfere(g); drawInterfere(g);
// 画字符串 // 画字符串
drawString(g, code); drawString(g, code);
} finally {
g.dispose();
}
return image; return image;
} }

View File

@ -171,6 +171,7 @@ public class GifCaptcha extends AbstractCaptcha {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//或得图形上下文 //或得图形上下文
Graphics2D g2d = image.createGraphics(); Graphics2D g2d = image.createGraphics();
try{
//利用指定颜色填充背景 //利用指定颜色填充背景
g2d.setColor(ObjectUtil.defaultIfNull(this.background, Color.WHITE)); g2d.setColor(ObjectUtil.defaultIfNull(this.background, Color.WHITE));
g2d.fillRect(0, 0, width, height); g2d.fillRect(0, 0, width, height);
@ -196,7 +197,9 @@ public class GifCaptcha extends AbstractCaptcha {
);//绘制椭圆边框 );//绘制椭圆边框
g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y); g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y);
} }
} finally {
g2d.dispose(); g2d.dispose();
}
return image; return image;
} }

View File

@ -62,11 +62,15 @@ public class LineCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
try {
// 干扰线 // 干扰线
drawInterfere(g); drawInterfere(g);
// 字符串 // 字符串
drawString(g, code); drawString(g, code);
} finally {
g.dispose();
}
return image; return image;
} }

View File

@ -73,6 +73,7 @@ public class ShearCaptcha extends AbstractCaptcha {
final BufferedImage image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB); 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 Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
try{
// 画字符串 // 画字符串
drawString(g, code); drawString(g, code);
@ -80,6 +81,9 @@ public class ShearCaptcha extends AbstractCaptcha {
shear(g, this.width, this.height, ObjectUtil.defaultIfNull(this.background, Color.WHITE)); shear(g, this.width, this.height, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
// 画干扰线 // 画干扰线
drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ImgUtil.randomColor()); drawInterfere(g, 0, RandomUtil.randomInt(this.height) + 1, this.width, RandomUtil.randomInt(this.height) + 1, this.interfereCount, ImgUtil.randomColor());
} finally {
g.dispose();
}
return image; return image;
} }

View File

@ -1338,8 +1338,11 @@ public class ImgUtil {
final BufferedImage bimage = new BufferedImage( final BufferedImage bimage = new BufferedImage(
img.getWidth(null), img.getHeight(null), imageType); img.getWidth(null), img.getHeight(null), imageType);
final Graphics2D bGr = GraphicsUtil.createGraphics(bimage, backgroundColor); final Graphics2D bGr = GraphicsUtil.createGraphics(bimage, backgroundColor);
try{
bGr.drawImage(img, 0, 0, null); bGr.drawImage(img, 0, 0, null);
} finally {
bGr.dispose(); bGr.dispose();
}
return bimage; return bimage;
} }