mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复Graphics2D的资源没释放问题
This commit is contained in:
@@ -71,11 +71,15 @@ public class CircleCaptcha extends AbstractCaptcha {
|
||||
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
final Graphics2D g = ImgUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
|
||||
|
||||
// 随机画干扰圈圈
|
||||
drawInterfere(g);
|
||||
try{
|
||||
// 随机画干扰圈圈
|
||||
drawInterfere(g);
|
||||
|
||||
// 画字符串
|
||||
drawString(g, code);
|
||||
// 画字符串
|
||||
drawString(g, code);
|
||||
} finally {
|
||||
g.dispose();
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
@@ -171,32 +171,35 @@ public class GifCaptcha extends AbstractCaptcha {
|
||||
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
//或得图形上下文
|
||||
Graphics2D g2d = image.createGraphics();
|
||||
//利用指定颜色填充背景
|
||||
g2d.setColor(ObjectUtil.defaultIfNull(this.background, Color.WHITE));
|
||||
g2d.fillRect(0, 0, width, height);
|
||||
AlphaComposite ac;
|
||||
// 字符的y坐标
|
||||
float y = (height >> 1) + (font.getSize() >> 1);
|
||||
float m = 1.0f * (width - (chars.length * font.getSize())) / chars.length;
|
||||
//字符的x坐标
|
||||
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(
|
||||
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);
|
||||
float m = 1.0f * (width - (chars.length * font.getSize())) / chars.length;
|
||||
//字符的x坐标
|
||||
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);
|
||||
);//绘制椭圆边框
|
||||
g2d.drawString(words[i] + "", x + (font.getSize() + m) * i, y);
|
||||
}
|
||||
} finally {
|
||||
g2d.dispose();
|
||||
}
|
||||
g2d.dispose();
|
||||
return image;
|
||||
}
|
||||
|
||||
|
@@ -62,11 +62,15 @@ public class LineCaptcha extends AbstractCaptcha {
|
||||
final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
|
||||
|
||||
// 干扰线
|
||||
drawInterfere(g);
|
||||
try {
|
||||
// 干扰线
|
||||
drawInterfere(g);
|
||||
|
||||
// 字符串
|
||||
drawString(g, code);
|
||||
// 字符串
|
||||
drawString(g, code);
|
||||
} finally {
|
||||
g.dispose();
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
@@ -73,13 +73,17 @@ public class ShearCaptcha extends AbstractCaptcha {
|
||||
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));
|
||||
|
||||
// 画字符串
|
||||
drawString(g, code);
|
||||
try{
|
||||
// 画字符串
|
||||
drawString(g, code);
|
||||
|
||||
// 扭曲
|
||||
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());
|
||||
// 扭曲
|
||||
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());
|
||||
} finally {
|
||||
g.dispose();
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
Reference in New Issue
Block a user