From 3ef12d623d518e0bfe696cb43a13ebdd7ff06e2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E7=88=B1=E6=9C=89=E6=83=85?= Date: Thu, 1 Sep 2022 10:01:32 +0800 Subject: [PATCH] =?UTF-8?q?U=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractImageCaptchaGenerator.java | 20 +++++++++++++++++++ .../common/util/CaptchaImageUtils.java | 12 +++++------ .../AbstractClickImageCaptchaGenerator.java | 2 +- .../StandardConcatImageCaptchaGenerator.java | 2 +- .../StandardRotateImageCaptchaGenerator.java | 7 ++----- .../StandardSliderImageCaptchaGenerator.java | 7 ++----- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java index 5274a76..e6dd37b 100644 --- a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java @@ -1,5 +1,7 @@ package cloud.tianai.captcha.generator; +import cloud.tianai.captcha.common.exception.ImageCaptchaException; +import cloud.tianai.captcha.common.util.CollectionUtils; import cloud.tianai.captcha.generator.common.model.dto.GenerateParam; import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo; import cloud.tianai.captcha.generator.impl.transform.Base64ImageTransform; @@ -91,6 +93,24 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener return doGenerateCaptchaImage(param); } + + protected Map requiredRandomGetTemplate(String type) { + Map templateMap = imageCaptchaResourceManager.randomGetTemplate(type); + if (CollectionUtils.isEmpty(templateMap)) { + throw new ImageCaptchaException("随机获取模板资源失败, 获取到的资源为空, type=" + type); + } + return templateMap; + } + + protected Resource requiredRandomGetResource(String type) { + Resource resource = imageCaptchaResourceManager.randomGetResource(type); + if (resource == null) { + throw new ImageCaptchaException("随机获取资源失败, 获取到的资源为空, type=" + type); + } + return resource; + } + + protected InputStream getTemplateFile(Map templateImages, String imageName) { Resource resource = templateImages.get(imageName); if (resource == null) { diff --git a/src/main/java/cloud/tianai/captcha/generator/common/util/CaptchaImageUtils.java b/src/main/java/cloud/tianai/captcha/generator/common/util/CaptchaImageUtils.java index bbca7e8..0b332c0 100644 --- a/src/main/java/cloud/tianai/captcha/generator/common/util/CaptchaImageUtils.java +++ b/src/main/java/cloud/tianai/captcha/generator/common/util/CaptchaImageUtils.java @@ -169,18 +169,18 @@ public class CaptchaImageUtils { /** * 旋转图片 * - * @param bufferedimage + * @param bufferedImage * @param degree * @return */ - public static BufferedImage rotateImage(final BufferedImage bufferedimage, + public static BufferedImage rotateImage(final BufferedImage bufferedImage, final double degree) { // 得到图片宽度。 - int w = bufferedimage.getWidth(); + int w = bufferedImage.getWidth(); // 得到图片高度。 - int h = bufferedimage.getHeight(); + int h = bufferedImage.getHeight(); // 得到图片透明度。 - int type = bufferedimage.getColorModel().getTransparency(); + int type = bufferedImage.getColorModel().getTransparency(); BufferedImage img;// 空的图片。 Graphics2D graphics2d;// 空的画笔。 (graphics2d = (img = new BufferedImage(w, h, type)) @@ -190,7 +190,7 @@ public class CaptchaImageUtils { // 旋转,degree是整型,度数,比如垂直90度。 graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2); // 从bufferedimagecopy图片至img,0,0是img的坐标。 - graphics2d.drawImage(bufferedimage, 0, 0, null); + graphics2d.drawImage(bufferedImage, 0, 0, null); graphics2d.dispose(); // 返回复制好的图片,原图片依然没有变,没有旋转,下次还可以使用。 return img; diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java index 79f34c8..6301c51 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java @@ -44,7 +44,7 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa // 文字点选验证码不需要模板 只需要背景图 Collection inputStreams = new LinkedList<>(); try { - Resource resourceImage = getImageResourceManager().randomGetResource(param.getType()); + Resource resourceImage = requiredRandomGetResource(param.getType()); InputStream resourceInputStream = getImageResourceManager().getResourceInputStream(resourceImage); inputStreams.add(resourceInputStream); BufferedImage bgImage = CaptchaImageUtils.wrapFile2BufferedImage(resourceInputStream); diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java index 70fa4c7..d1387f1 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java @@ -55,7 +55,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen // 拼接验证码不需要模板 只需要背景图 Collection inputStreams = new LinkedList<>(); try { - Resource resourceImage = imageCaptchaResourceManager.randomGetResource(param.getType()); + Resource resourceImage = requiredRandomGetResource(param.getType()); InputStream resourceInputStream = imageCaptchaResourceManager.getResourceInputStream(resourceImage); inputStreams.add(resourceInputStream); BufferedImage bgImage = wrapFile2BufferedImage(resourceInputStream); diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java index bd44735..f5288ec 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java @@ -62,13 +62,10 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen @Override public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) { // 旋转验证码没有混淆 - Map templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType()); - if (templateImages == null || templateImages.isEmpty()) { - return null; - } + Map templateImages = requiredRandomGetTemplate(param.getType()); Collection inputStreams = new LinkedList<>(); try { - Resource resourceImage = imageCaptchaResourceManager.randomGetResource(param.getType()); + Resource resourceImage = requiredRandomGetResource(param.getType()); InputStream resourceInputStream = imageCaptchaResourceManager.getResourceInputStream(resourceImage); inputStreams.add(resourceInputStream); BufferedImage cutBackground = CaptchaImageUtils.wrapFile2BufferedImage(resourceInputStream); diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java index bed0e23..92c23de 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java @@ -61,13 +61,10 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen @Override public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) { Boolean obfuscate = param.getObfuscate(); - Map templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType()); - if (templateImages == null || templateImages.isEmpty()) { - return null; - } + Map templateImages = requiredRandomGetTemplate(param.getType()); Collection inputStreams = new LinkedList<>(); try { - Resource resourceImage = imageCaptchaResourceManager.randomGetResource(param.getType()); + Resource resourceImage = requiredRandomGetResource(param.getType()); InputStream resourceInputStream = imageCaptchaResourceManager.getResourceInputStream(resourceImage); inputStreams.add(resourceInputStream); BufferedImage cutBackground = CaptchaImageUtils.wrapFile2BufferedImage(resourceInputStream);