mirror of
https://github.com/dromara/tianai-captcha.git
synced 2026-05-07 06:04:34 +08:00
U 升级为1.3.3
This commit is contained in:
@@ -2,8 +2,7 @@ package cloud.tianai.captcha.generator;
|
||||
|
||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
||||
import cloud.tianai.captcha.generator.common.util.ImgWriter;
|
||||
import cloud.tianai.captcha.generator.impl.transform.Base64ImageTransform;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
import cloud.tianai.captcha.resource.common.model.dto.Resource;
|
||||
import lombok.Getter;
|
||||
@@ -11,11 +10,7 @@ import lombok.Setter;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.Base64;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -37,10 +32,12 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
||||
/** 默认滑块图片类型. */
|
||||
public String defaultSliderImageType = DEFAULT_SLIDER_IMAGE_TYPE;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
/** 资源管理器. */
|
||||
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
|
||||
|
||||
/** 图片转换器. */
|
||||
protected ImageTransform imageTransform;
|
||||
|
||||
@Getter
|
||||
private boolean init = false;
|
||||
|
||||
@@ -55,6 +52,10 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
||||
init = true;
|
||||
try {
|
||||
log.info("图片验证码[{}]初始化...", this.getClass().getSimpleName());
|
||||
// 设置默认图片转换器
|
||||
if (getImageTransform() == null) {
|
||||
setImageTransform(new Base64ImageTransform());
|
||||
}
|
||||
doInit(initDefaultResource);
|
||||
} catch (Exception e) {
|
||||
init = false;
|
||||
@@ -90,51 +91,6 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
||||
return doGenerateCaptchaImage(param);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 将图片转换成字符串格式
|
||||
*
|
||||
* @param bufferedImage 图片
|
||||
* @param formatType 格式化类型
|
||||
* @return String
|
||||
*/
|
||||
@SneakyThrows(Exception.class)
|
||||
public String transform(BufferedImage bufferedImage, String formatType) {
|
||||
// 这里判断处理一下,加一些警告日志
|
||||
String result = beforeTransform(bufferedImage, formatType);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
if (CaptchaImageUtils.isPng(formatType) || CaptchaImageUtils.isJpeg(formatType)) {
|
||||
// 如果是 jpg 或者 png图片的话 用hutool的生成
|
||||
ImgWriter.write(bufferedImage, formatType, byteArrayOutputStream, -1);
|
||||
} else {
|
||||
ImageIO.write(bufferedImage, formatType, byteArrayOutputStream);
|
||||
}
|
||||
//转换成字节码
|
||||
byte[] data = byteArrayOutputStream.toByteArray();
|
||||
String base64 = Base64.getEncoder().encodeToString(data);
|
||||
return "data:image/" + formatType + ";base64,".concat(base64);
|
||||
}
|
||||
|
||||
public String beforeTransform(BufferedImage bufferedImage, String formatType) {
|
||||
// int type = bufferedImage.getType();
|
||||
// if (BufferedImage.TYPE_4BYTE_ABGR == type) {
|
||||
// // png , 如果转换的是jpg的话
|
||||
// if (CaptchaImageUtils.isJpeg(formatType)) {
|
||||
// // bufferedImage为 png, 但是转换的图片为 jpg
|
||||
// if (log.isWarnEnabled()) {
|
||||
// log.warn("图片验证码转换警告, 原图为 png格式时,指定转换的图片为jpg格式时可能会导致转换异常,如果转换的图片为出现错误,请设置指定转换的类型与原图的类型一致");
|
||||
// } else {
|
||||
// System.err.println("图片验证码转换警告, 原图为 png格式时,指定转换的图片为jpg格式时可能会导致转换异常,如果转换的图片为出现错误,请设置指定转换的类型与原图的类型一致");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// 其它的暂时不考虑
|
||||
return null;
|
||||
}
|
||||
|
||||
protected InputStream getTemplateFile(Map<String, Resource> templateImages, String imageName) {
|
||||
Resource resource = templateImages.get(imageName);
|
||||
if (resource == null) {
|
||||
@@ -169,4 +125,19 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
|
||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
||||
return imageCaptchaResourceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageResourceManager(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageTransform getImageTransform() {
|
||||
return imageTransform;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageTransform(ImageTransform imageTransform) {
|
||||
this.imageTransform = imageTransform;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public interface ImageCaptchaGenerator {
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*
|
||||
* @param initDefaultResource 是否初始化默认资源
|
||||
* @return ImageCaptchaGenerator
|
||||
*/
|
||||
@@ -55,4 +56,26 @@ public interface ImageCaptchaGenerator {
|
||||
*/
|
||||
ImageCaptchaResourceManager getImageResourceManager();
|
||||
|
||||
/**
|
||||
* 设置滑块验证码资源管理器
|
||||
*
|
||||
* @param imageCaptchaResourceManager
|
||||
*/
|
||||
void setImageResourceManager(ImageCaptchaResourceManager imageCaptchaResourceManager);
|
||||
|
||||
/**
|
||||
* 获取图片转换器
|
||||
*
|
||||
* @return ImageTransform
|
||||
*/
|
||||
ImageTransform getImageTransform();
|
||||
|
||||
/**
|
||||
* 设置图片转换器
|
||||
*
|
||||
* @param imageTransform imageTransform
|
||||
* @return ImageTransform
|
||||
*/
|
||||
void setImageTransform(ImageTransform imageTransform);
|
||||
|
||||
}
|
||||
|
||||
@@ -14,9 +14,10 @@ public interface ImageCaptchaGeneratorProvider {
|
||||
* 生成/获取 ImageCaptchaGenerator
|
||||
*
|
||||
* @param resourceManager resourceManager
|
||||
* @param imageTransform imageTransform
|
||||
* @return ImageCaptchaGenerator
|
||||
*/
|
||||
ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager);
|
||||
ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform);
|
||||
|
||||
/**
|
||||
* 验证码类型
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package cloud.tianai.captcha.generator;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
/**
|
||||
* @Author: 天爱有情
|
||||
* @date 2022/8/25 10:21
|
||||
* @Description 图片转换为字符串, 扩展接口, 可以转换为文件地址等
|
||||
*/
|
||||
public interface ImageTransform {
|
||||
|
||||
/**
|
||||
* 转换
|
||||
*
|
||||
* @param bufferedImage 图片
|
||||
* @param transformType 转换类型
|
||||
* @return String
|
||||
*/
|
||||
String transform(BufferedImage bufferedImage, String transformType);
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package cloud.tianai.captcha.generator.impl;
|
||||
|
||||
import cloud.tianai.captcha.common.util.NamedThreadFactory;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
@@ -182,4 +183,19 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
|
||||
public ImageCaptchaResourceManager getImageResourceManager() {
|
||||
return target.getImageResourceManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageResourceManager(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
target.setImageResourceManager(imageCaptchaResourceManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageTransform getImageTransform() {
|
||||
return target.getImageTransform();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageTransform(ImageTransform imageTransform) {
|
||||
target.setImageTransform(imageTransform);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import cloud.tianai.captcha.common.util.ObjectUtils;
|
||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||
import cloud.tianai.captcha.generator.impl.provider.StandardConcatImageCaptchaGeneratorProvider;
|
||||
@@ -33,10 +34,16 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
||||
private String defaultCaptcha = CaptchaTypeConstant.SLIDER;
|
||||
|
||||
protected boolean initDefaultResource = false;
|
||||
|
||||
public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
super(imageCaptchaResourceManager);
|
||||
}
|
||||
|
||||
public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
|
||||
super(imageCaptchaResourceManager);
|
||||
setImageTransform(imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInit(boolean initDefaultResource) {
|
||||
this.initDefaultResource = initDefaultResource;
|
||||
@@ -94,8 +101,24 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
||||
}
|
||||
imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k ->
|
||||
// get and init
|
||||
provider.get(getImageCaptchaResourceManager()).init(initDefaultResource));
|
||||
provider.get(getImageResourceManager(), getImageTransform()).init(initDefaultResource));
|
||||
}
|
||||
return imageCaptchaGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageResourceManager(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
super.setImageResourceManager(imageCaptchaResourceManager);
|
||||
for (ImageCaptchaGenerator imageCaptchaGenerator : imageCaptchaGeneratorMap.values()) {
|
||||
imageCaptchaGenerator.setImageResourceManager(imageCaptchaResourceManager);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setImageTransform(ImageTransform imageTransform) {
|
||||
super.setImageTransform(imageTransform);
|
||||
for (ImageCaptchaGenerator imageCaptchaGenerator : imageCaptchaGeneratorMap.values()) {
|
||||
imageCaptchaGenerator.setImageTransform(imageTransform);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-1
@@ -2,6 +2,7 @@ package cloud.tianai.captcha.generator.impl;
|
||||
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
|
||||
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
@@ -31,6 +32,11 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
|
||||
super(imageCaptchaResourceManager);
|
||||
}
|
||||
|
||||
public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
|
||||
super(imageCaptchaResourceManager);
|
||||
setImageTransform(imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInit(boolean initDefaultResource) {
|
||||
if (initDefaultResource) {
|
||||
@@ -80,7 +86,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
|
||||
|
||||
@SneakyThrows
|
||||
private ImageCaptchaInfo wrapConcatCaptchaInfo(int randomX, int randomY, BufferedImage bgImage, GenerateParam param) {
|
||||
String backGroundImageBase64 = transform(bgImage, param.getBackgroundFormatName());
|
||||
String backGroundImageBase64 = getImageTransform().transform(bgImage, param.getBackgroundFormatName());
|
||||
ImageCaptchaInfo imageCaptchaInfo = ImageCaptchaInfo.of(backGroundImageBase64,
|
||||
null,
|
||||
bgImage.getWidth(),
|
||||
|
||||
+7
-4
@@ -2,6 +2,7 @@ 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.ImageTransform;
|
||||
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.ImageCaptchaInfo;
|
||||
@@ -57,11 +58,13 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
|
||||
|
||||
protected float currentFontTopCoef = 0.0f;
|
||||
|
||||
@SneakyThrows
|
||||
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
super(imageCaptchaResourceManager);
|
||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||
}
|
||||
|
||||
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
|
||||
super(imageCaptchaResourceManager);
|
||||
setImageTransform(imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -141,8 +144,8 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
|
||||
// 提示图片
|
||||
BufferedImage tipImage = genTipImage(checkClickImageCheckDefinitionList).getImage();
|
||||
ImageCaptchaInfo clickImageCaptchaInfo = new ImageCaptchaInfo();
|
||||
clickImageCaptchaInfo.setBackgroundImage(transform(bgImage, param.getBackgroundFormatName()));
|
||||
clickImageCaptchaInfo.setSliderImage(transform(tipImage, param.getSliderFormatName()));
|
||||
clickImageCaptchaInfo.setBackgroundImage(getImageTransform().transform(bgImage, param.getBackgroundFormatName()));
|
||||
clickImageCaptchaInfo.setSliderImage(getImageTransform().transform(tipImage, param.getSliderFormatName()));
|
||||
clickImageCaptchaInfo.setBgImageWidth(bgImage.getWidth());
|
||||
clickImageCaptchaInfo.setBgImageHeight(bgImage.getHeight());
|
||||
clickImageCaptchaInfo.setSliderImageWidth(tipImage.getWidth());
|
||||
|
||||
+8
-5
@@ -2,6 +2,7 @@ package cloud.tianai.captcha.generator.impl;
|
||||
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
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;
|
||||
@@ -29,11 +30,13 @@ import java.util.concurrent.ThreadLocalRandom;
|
||||
*/
|
||||
public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
||||
|
||||
protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
|
||||
|
||||
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
|
||||
super(imageCaptchaResourceManager);
|
||||
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
|
||||
}
|
||||
|
||||
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
|
||||
super(imageCaptchaResourceManager);
|
||||
setImageTransform(imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,8 +116,8 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
|
||||
private ImageCaptchaInfo wrapRotateCaptchaInfo(double degree, int randomX, BufferedImage backgroundImage, BufferedImage sliderImage, GenerateParam param) {
|
||||
String backgroundFormatName = param.getBackgroundFormatName();
|
||||
String sliderFormatName = param.getSliderFormatName();
|
||||
String backGroundImageBase64 = transform(backgroundImage, backgroundFormatName);
|
||||
String sliderImageBase64 = transform(sliderImage, sliderFormatName);
|
||||
String backGroundImageBase64 = getImageTransform().transform(backgroundImage, backgroundFormatName);
|
||||
String sliderImageBase64 = getImageTransform().transform(sliderImage, sliderFormatName);
|
||||
return RotateImageCaptchaInfo.of(degree,
|
||||
randomX,
|
||||
backGroundImageBase64,
|
||||
|
||||
+8
-2
@@ -2,6 +2,7 @@ package cloud.tianai.captcha.generator.impl;
|
||||
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
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;
|
||||
@@ -44,6 +45,11 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
|
||||
super(imageCaptchaResourceManager);
|
||||
}
|
||||
|
||||
public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
|
||||
super(imageCaptchaResourceManager);
|
||||
setImageTransform(imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doInit(boolean initDefaultResource) {
|
||||
if (initDefaultResource) {
|
||||
@@ -127,8 +133,8 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
|
||||
GenerateParam param) {
|
||||
String backgroundFormatName = param.getBackgroundFormatName();
|
||||
String sliderFormatName = param.getSliderFormatName();
|
||||
String backGroundImageBase64 = transform(backgroundImage, backgroundFormatName);
|
||||
String sliderImageBase64 = transform(sliderImage, sliderFormatName);
|
||||
String backGroundImageBase64 = getImageTransform().transform(backgroundImage, backgroundFormatName);
|
||||
String sliderImageBase64 = getImageTransform().transform(sliderImage, sliderFormatName);
|
||||
return SliderImageCaptchaInfo.of(randomX, randomY,
|
||||
backGroundImageBase64,
|
||||
sliderImageBase64,
|
||||
|
||||
+4
-2
@@ -3,8 +3,10 @@ package cloud.tianai.captcha.generator.impl.provider;
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.impl.StandardConcatImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
|
||||
/**
|
||||
* @Author: 天爱有情
|
||||
* @date 2022/5/19 15:12
|
||||
@@ -12,8 +14,8 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
*/
|
||||
public class StandardConcatImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
|
||||
@Override
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
|
||||
return new StandardConcatImageCaptchaGenerator(resourceManager);
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform) {
|
||||
return new StandardConcatImageCaptchaGenerator(resourceManager, imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -3,13 +3,14 @@ package cloud.tianai.captcha.generator.impl.provider;
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.impl.StandardRandomWordClickImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
|
||||
public class StandardRandomWordClickImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
|
||||
@Override
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
|
||||
return new StandardRandomWordClickImageCaptchaGenerator(resourceManager);
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform) {
|
||||
return new StandardRandomWordClickImageCaptchaGenerator(resourceManager, imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -3,6 +3,7 @@ package cloud.tianai.captcha.generator.impl.provider;
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.impl.StandardRotateImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
|
||||
@@ -13,8 +14,8 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
*/
|
||||
public class StandardRotateImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
|
||||
@Override
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
|
||||
return new StandardRotateImageCaptchaGenerator(resourceManager);
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform) {
|
||||
return new StandardRotateImageCaptchaGenerator(resourceManager, imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-3
@@ -1,8 +1,9 @@
|
||||
package cloud.tianai.captcha.generator.impl.provider;
|
||||
|
||||
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator;
|
||||
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
|
||||
@@ -13,8 +14,8 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
|
||||
*/
|
||||
public class StandardSliderImageImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
|
||||
@Override
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
|
||||
return new StandardSliderImageCaptchaGenerator(resourceManager);
|
||||
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform) {
|
||||
return new StandardSliderImageCaptchaGenerator(resourceManager, imageTransform);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package cloud.tianai.captcha.generator.impl.transform;
|
||||
|
||||
import cloud.tianai.captcha.generator.ImageTransform;
|
||||
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
|
||||
import cloud.tianai.captcha.generator.common.util.ImgWriter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Base64;
|
||||
|
||||
/**
|
||||
* @Author: 天爱有情
|
||||
* @date 2022/8/25 10:28
|
||||
* @Description base64 实现
|
||||
*/
|
||||
public class Base64ImageTransform implements ImageTransform {
|
||||
|
||||
@Override
|
||||
@SneakyThrows(IOException.class)
|
||||
public String transform(BufferedImage bufferedImage, String transformType) {
|
||||
// 这里判断处理一下,加一些警告日志
|
||||
String result = beforeTransform(bufferedImage, transformType);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||
if (CaptchaImageUtils.isPng(transformType) || CaptchaImageUtils.isJpeg(transformType)) {
|
||||
// 如果是 jpg 或者 png图片的话 用hutool的生成
|
||||
ImgWriter.write(bufferedImage, transformType, byteArrayOutputStream, -1);
|
||||
} else {
|
||||
ImageIO.write(bufferedImage, transformType, byteArrayOutputStream);
|
||||
}
|
||||
//转换成字节码
|
||||
byte[] data = byteArrayOutputStream.toByteArray();
|
||||
String base64 = Base64.getEncoder().encodeToString(data);
|
||||
return "data:image/" + transformType + ";base64,".concat(base64);
|
||||
}
|
||||
|
||||
public String beforeTransform(BufferedImage bufferedImage, String formatType) {
|
||||
// int type = bufferedImage.getType();
|
||||
// if (BufferedImage.TYPE_4BYTE_ABGR == type) {
|
||||
// // png , 如果转换的是jpg的话
|
||||
// if (CaptchaImageUtils.isJpeg(formatType)) {
|
||||
// // bufferedImage为 png, 但是转换的图片为 jpg
|
||||
// if (log.isWarnEnabled()) {
|
||||
// log.warn("图片验证码转换警告, 原图为 png格式时,指定转换的图片为jpg格式时可能会导致转换异常,如果转换的图片为出现错误,请设置指定转换的类型与原图的类型一致");
|
||||
// } else {
|
||||
// System.err.println("图片验证码转换警告, 原图为 png格式时,指定转换的图片为jpg格式时可能会导致转换异常,如果转换的图片为出现错误,请设置指定转换的类型与原图的类型一致");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// 其它的暂时不考虑
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user