mirror of
https://github.com/dromara/tianai-captcha.git
synced 2026-05-07 06:04:34 +08:00
U 优化代码
This commit is contained in:
@@ -4,6 +4,7 @@ import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
|||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
||||||
import cloud.tianai.captcha.generator.common.util.ImgWriter;
|
import cloud.tianai.captcha.generator.common.util.ImgWriter;
|
||||||
|
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -36,6 +37,41 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
|||||||
/** 默认滑块图片类型. */
|
/** 默认滑块图片类型. */
|
||||||
public String defaultSliderImageType = DEFAULT_SLIDER_IMAGE_TYPE;
|
public String defaultSliderImageType = DEFAULT_SLIDER_IMAGE_TYPE;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
/** 资源管理器. */
|
||||||
|
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
|
||||||
|
/** 初始化默认资源. */
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
protected boolean initDefaultResource = false;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private boolean init = false;
|
||||||
|
|
||||||
|
public AbstractImageCaptchaGenerator() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImageCaptchaGenerator init() {
|
||||||
|
if (init) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
doInit();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("[{}]初始化失败,ex", this.getClass().getSimpleName(), e);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
init = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
|
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||||
|
this.initDefaultResource = initDefaultResource;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ImageCaptchaInfo generateCaptchaImage(String type) {
|
public ImageCaptchaInfo generateCaptchaImage(String type) {
|
||||||
return generateCaptchaImage(type, defaultBgImageType, defaultSliderImageType);
|
return generateCaptchaImage(type, defaultBgImageType, defaultSliderImageType);
|
||||||
@@ -104,4 +140,14 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
|||||||
return getImageResourceManager().getResourceInputStream(resource);
|
return getImageResourceManager().getResourceInputStream(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化
|
||||||
|
*/
|
||||||
|
protected abstract void doInit();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImageCaptchaResourceManager getImageResourceManager() {
|
||||||
|
return imageCaptchaResourceManager;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package cloud.tianai.captcha.generator;
|
package cloud.tianai.captcha.generator;
|
||||||
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||||
@@ -14,6 +13,11 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
|||||||
public interface ImageCaptchaGenerator {
|
public interface ImageCaptchaGenerator {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化
|
||||||
|
*/
|
||||||
|
ImageCaptchaGenerator init();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成验证码图片
|
* 生成验证码图片
|
||||||
*
|
*
|
||||||
|
|||||||
+9
-5
@@ -1,12 +1,11 @@
|
|||||||
package cloud.tianai.captcha.generator.impl;
|
package cloud.tianai.captcha.generator.impl;
|
||||||
|
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
|
||||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
|
||||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
||||||
|
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
@@ -16,8 +15,6 @@ import java.io.InputStream;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.wrapFile2BufferedImage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
* @date 2022/4/27 11:46
|
* @date 2022/4/27 11:46
|
||||||
@@ -34,6 +31,14 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
|
|||||||
@Setter
|
@Setter
|
||||||
protected Integer interferenceCount = 2;
|
protected Integer interferenceCount = 2;
|
||||||
|
|
||||||
|
|
||||||
|
public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractClickImageCaptchaGenerator() {
|
||||||
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
|
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
|
||||||
@@ -97,7 +102,6 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 随机获取点击的图片
|
* 随机获取点击的图片
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -7,9 +7,12 @@ import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
|||||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
@@ -19,27 +22,42 @@ import java.util.Map;
|
|||||||
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
||||||
|
|
||||||
private Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new HashMap<>(4);
|
private Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new HashMap<>(4);
|
||||||
|
private Map<String, BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator>> imageCaptchaGeneratorProviderMap = new HashMap<>(4);
|
||||||
|
|
||||||
private ImageCaptchaResourceManager imageCaptchaResourceManager;
|
@Setter
|
||||||
private boolean initDefaultResource;
|
@Getter
|
||||||
|
|
||||||
private String defaultCaptcha = CaptchaTypeConstant.SLIDER;
|
private String defaultCaptcha = CaptchaTypeConstant.SLIDER;
|
||||||
|
|
||||||
public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
this.initDefaultResource = initDefaultResource;
|
|
||||||
init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void init() {
|
@Override
|
||||||
|
protected void doInit() {
|
||||||
// 滑块验证码
|
// 滑块验证码
|
||||||
addImageCaptchaGenerator(CaptchaTypeConstant.SLIDER, new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource));
|
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.SLIDER, (type, context) ->
|
||||||
|
new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
|
||||||
// 旋转验证码
|
// 旋转验证码
|
||||||
addImageCaptchaGenerator(CaptchaTypeConstant.ROTATE, new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource));
|
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.ROTATE, (type, context) ->
|
||||||
|
new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
|
||||||
// 拼接验证码
|
// 拼接验证码
|
||||||
addImageCaptchaGenerator(CaptchaTypeConstant.CONCAT, new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource));
|
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.CONCAT, (type, context) ->
|
||||||
|
new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
|
||||||
// 点选文字验证码
|
// 点选文字验证码
|
||||||
addImageCaptchaGenerator(CaptchaTypeConstant.WORD_IMAGE_CLICK, new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource));
|
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.WORD_IMAGE_CLICK, (type, context) ->
|
||||||
|
new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addImageCaptchaGeneratorProvider(String key, BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> provider) {
|
||||||
|
imageCaptchaGeneratorProviderMap.put(key, provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> removeImageCaptchaGeneratorProvider(String key) {
|
||||||
|
return imageCaptchaGeneratorProviderMap.remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> getImageCaptchaGeneratorProvider(String key) {
|
||||||
|
return imageCaptchaGeneratorProviderMap.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) {
|
public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) {
|
||||||
@@ -50,6 +68,10 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
|||||||
return imageCaptchaGeneratorMap.remove(key);
|
return imageCaptchaGeneratorMap.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ImageCaptchaGenerator getImageCaptchaGenerator(String key) {
|
||||||
|
return imageCaptchaGeneratorMap.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
|
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
|
||||||
String type = param.getType();
|
String type = param.getType();
|
||||||
@@ -59,14 +81,13 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
|||||||
}
|
}
|
||||||
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type);
|
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type);
|
||||||
if (imageCaptchaGenerator == null) {
|
if (imageCaptchaGenerator == null) {
|
||||||
|
BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> provider = imageCaptchaGeneratorProviderMap.get(type);
|
||||||
|
if (provider == null) {
|
||||||
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type);
|
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type);
|
||||||
}
|
}
|
||||||
|
imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k -> provider.apply(k, this));
|
||||||
|
}
|
||||||
|
|
||||||
return imageCaptchaGenerator.generateCaptchaImage(param);
|
return imageCaptchaGenerator.generateCaptchaImage(param);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
|
||||||
return imageCaptchaResourceManager;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-6
@@ -30,7 +30,11 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
|
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
|
||||||
|
|
||||||
public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doInit() {
|
||||||
if (initDefaultResource) {
|
if (initDefaultResource) {
|
||||||
initDefaultResource();
|
initDefaultResource();
|
||||||
}
|
}
|
||||||
@@ -91,9 +95,4 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
imageCaptchaInfo.setTolerant(0.05F);
|
imageCaptchaInfo.setTolerant(0.05F);
|
||||||
return imageCaptchaInfo;
|
return imageCaptchaInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
|
||||||
return imageCaptchaResourceManager;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-26
@@ -1,9 +1,5 @@
|
|||||||
package cloud.tianai.captcha.generator.impl;
|
package cloud.tianai.captcha.generator.impl;
|
||||||
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
|
||||||
import cloud.tianai.captcha.common.util.FontUtils;
|
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
|
||||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||||
import cloud.tianai.captcha.common.util.FontUtils;
|
import cloud.tianai.captcha.common.util.FontUtils;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition;
|
||||||
@@ -14,66 +10,78 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
|||||||
import cloud.tianai.captcha.resource.ResourceStore;
|
import cloud.tianai.captcha.resource.ResourceStore;
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||||
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
|
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
|
||||||
import lombok.Data;
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import sun.font.FontDesignMetrics;
|
import sun.font.FontDesignMetrics;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_RESOURCE_PATH;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
* @date 2022/4/27 11:46
|
* @date 2022/4/27 11:46
|
||||||
* @Description 点选验证码
|
* @Description 点选验证码
|
||||||
*/
|
*/
|
||||||
@Data
|
|
||||||
public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickImageCaptchaGenerator {
|
public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickImageCaptchaGenerator {
|
||||||
|
|
||||||
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
|
|
||||||
/** 字体包. */
|
/** 字体包. */
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected Font font;
|
protected Font font;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected FontDesignMetrics metrics;
|
protected FontDesignMetrics metrics;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected Integer clickImgWidth = 80;
|
protected Integer clickImgWidth = 80;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected Integer clickImgHeight = 80;
|
protected Integer clickImgHeight = 80;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected int tipImageInterferenceLineNum = 2;
|
protected int tipImageInterferenceLineNum = 2;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
protected int tipImageInterferencePointNum = 5;
|
protected int tipImageInterferencePointNum = 5;
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||||
if (initDefaultResource) {
|
|
||||||
initDefaultResource();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SneakyThrows({IOException.class, FontFormatException.class})
|
||||||
|
protected void doInit() {
|
||||||
|
if (this.font == null) {
|
||||||
// 使用默认字体
|
// 使用默认字体
|
||||||
Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC");
|
Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC");
|
||||||
InputStream inputStream = new ClassPathResourceProvider().doGetResourceInputStream(fontResource);
|
InputStream inputStream = new ClassPathResourceProvider().doGetResourceInputStream(fontResource);
|
||||||
Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream);
|
Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream);
|
||||||
font = font.deriveFont(Font.BOLD, 70);
|
this.font = font.deriveFont(Font.BOLD, 70);
|
||||||
|
}
|
||||||
this.metrics = FontDesignMetrics.getMetrics(font);
|
this.metrics = FontDesignMetrics.getMetrics(font);
|
||||||
this.font = font;
|
if (initDefaultResource) {
|
||||||
setClickImgHeight(clickImgWidth);
|
initDefaultResource();
|
||||||
setClickImgWidth(clickImgHeight);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
|
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
|
||||||
boolean initDefaultResource,
|
boolean initDefaultResource,
|
||||||
Font font) {
|
Font font) {
|
||||||
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||||
this.font = font;
|
this.font = font;
|
||||||
this.metrics = FontDesignMetrics.getMetrics(font);
|
|
||||||
setClickImgWidth(font.getSize() + 10);
|
|
||||||
setClickImgHeight(font.getSize() + 10);
|
|
||||||
if (initDefaultResource) {
|
|
||||||
initDefaultResource();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void initDefaultResource() {
|
public void initDefaultResource() {
|
||||||
ResourceStore resourceStore = imageCaptchaResourceManager.getResourceStore();
|
ResourceStore resourceStore = imageCaptchaResourceManager.getResourceStore();
|
||||||
// 添加一些系统的资源文件
|
// 添加一些系统的资源文件
|
||||||
@@ -132,9 +140,4 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
|
|||||||
return clickImageCaptchaInfo;
|
return clickImageCaptchaInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
|
||||||
return imageCaptchaResourceManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-19
@@ -11,16 +11,6 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
|||||||
import cloud.tianai.captcha.resource.ResourceStore;
|
import cloud.tianai.captcha.resource.ResourceStore;
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||||
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
|
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
|
||||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
|
||||||
import cloud.tianai.captcha.generator.common.constant.SliderCaptchaConstant;
|
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.RotateImageCaptchaInfo;
|
|
||||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
|
||||||
import cloud.tianai.captcha.resource.ResourceStore;
|
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
|
||||||
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -32,10 +22,6 @@ import java.util.LinkedList;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.*;
|
|
||||||
import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_RESOURCE_PATH;
|
|
||||||
import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
* @date 2022/4/22 16:43
|
* @date 2022/4/22 16:43
|
||||||
@@ -46,7 +32,12 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
|
protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
|
||||||
|
|
||||||
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
|
||||||
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doInit() {
|
||||||
if (initDefaultResource) {
|
if (initDefaultResource) {
|
||||||
initDefaultResource();
|
initDefaultResource();
|
||||||
}
|
}
|
||||||
@@ -133,9 +124,4 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
|
||||||
return imageCaptchaResourceManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-13
@@ -1,13 +1,12 @@
|
|||||||
package cloud.tianai.captcha.generator.impl;
|
package cloud.tianai.captcha.generator.impl;
|
||||||
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
|
||||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
|
||||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||||
import cloud.tianai.captcha.generator.common.constant.SliderCaptchaConstant;
|
import cloud.tianai.captcha.generator.common.constant.SliderCaptchaConstant;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||||
import cloud.tianai.captcha.generator.common.model.dto.SliderImageCaptchaInfo;
|
import cloud.tianai.captcha.generator.common.model.dto.SliderImageCaptchaInfo;
|
||||||
|
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
||||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||||
import cloud.tianai.captcha.resource.ResourceStore;
|
import cloud.tianai.captcha.resource.ResourceStore;
|
||||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||||
@@ -24,8 +23,6 @@ import java.util.LinkedList;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
* @Date 2020/5/29 8:06
|
* @Date 2020/5/29 8:06
|
||||||
@@ -43,12 +40,13 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
*/
|
*/
|
||||||
public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template";
|
public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template";
|
||||||
|
|
||||||
protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
|
|
||||||
|
|
||||||
|
|
||||||
public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
|
public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
|
||||||
boolean initDefaultResource) {
|
boolean initDefaultResource) {
|
||||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
super(imageCaptchaResourceManager, initDefaultResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doInit() {
|
||||||
if (initDefaultResource) {
|
if (initDefaultResource) {
|
||||||
initDefaultResource();
|
initDefaultResource();
|
||||||
}
|
}
|
||||||
@@ -140,11 +138,6 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
|
||||||
return imageCaptchaResourceManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int randomObfuscateX(int sliderX, int slWidth, int bgWidth) {
|
protected int randomObfuscateX(int sliderX, int slWidth, int bgWidth) {
|
||||||
if (bgWidth / 2 > (sliderX + (slWidth / 2))) {
|
if (bgWidth / 2 > (sliderX + (slWidth / 2))) {
|
||||||
// 右边混淆
|
// 右边混淆
|
||||||
|
|||||||
Reference in New Issue
Block a user