This commit is contained in:
天爱有情
2022-09-01 10:01:32 +08:00
parent 0b636eaa9f
commit 3ef12d623d
6 changed files with 32 additions and 18 deletions
@@ -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<String, Resource> requiredRandomGetTemplate(String type) {
Map<String, Resource> 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<String, Resource> templateImages, String imageName) {
Resource resource = templateImages.get(imageName);
if (resource == null) {
@@ -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图片至img0,0是img的坐标。
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.drawImage(bufferedImage, 0, 0, null);
graphics2d.dispose();
// 返回复制好的图片,原图片依然没有变,没有旋转,下次还可以使用。
return img;
@@ -44,7 +44,7 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
// 文字点选验证码不需要模板 只需要背景图
Collection<InputStream> 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);
@@ -55,7 +55,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
// 拼接验证码不需要模板 只需要背景图
Collection<InputStream> 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);
@@ -62,13 +62,10 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
@Override
public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 旋转验证码没有混淆
Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) {
return null;
}
Map<String, Resource> templateImages = requiredRandomGetTemplate(param.getType());
Collection<InputStream> 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);
@@ -61,13 +61,10 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
@Override
public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
Boolean obfuscate = param.getObfuscate();
Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) {
return null;
}
Map<String, Resource> templateImages = requiredRandomGetTemplate(param.getType());
Collection<InputStream> 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);