package com.iplatform.base.captcha;
import com.iplatform.base.util.VerifyImgUtil;
import com.walker.web.CaptchaResult;
import com.walker.web.CaptchaType;
import java.awt.image.BufferedImage;
import java.util.Map;
/**
* 拼图滑动验证码,提供者实现。
* 所有验证拼图图像在初始化时加载如内存,提高性能。
* @author 时克英
* @date 2023-04-06
*/
//public class JigsawCaptchaProvider implements CaptchaProvider {
public class JigsawCaptchaProvider extends AbstractCaptchaProvider {
private final static int IMAGE_BG_SIZE = 10;
private final static int IMAGE_BLOCK_SIZE = 21;
/**
* 不能缓存图片,因为要在原图上扣背景,因此必须每次加载原始图片。
* @date 2023-06-27
*/
public JigsawCaptchaProvider(){
// String imageName = null;
// try{
// BufferedImage image = null;
// for(int i=1; i coord = VerifyImgUtil.generateCutoutCoordinates(w, h);
int x = coord.get("x");
int y = coord.get("y");
//获取抠图图形矩阵
int[][] templateData = VerifyImgUtil.getTemplateData(templateImg);
//抠图
Map r = VerifyImgUtil.initSlidingBlock(sourceImg, templateData, x, y, w, h);
// Map result = new HashMap();
// result.put("y", y);
// result.put("slider", VerifyImgUtil.getBase64(r.get("newTemplateImg")));
// result.put("bg", VerifyImgUtil.getBase64(r.get("newSourceImg")));
JigsawResult jigsawResult = new JigsawResult();
jigsawResult.setX(x);
jigsawResult.setY(y);
jigsawResult.setImageSourceBase64(VerifyImgUtil.getBase64(r.get("newSourceImg")));
jigsawResult.setImageBlockBase64(VerifyImgUtil.getBase64(r.get("newTemplateImg")));
return jigsawResult;
} catch (Exception ex){
logger.error("处理拼图验证图像错误, blockName={}", ex);
return null;
}
}
@Override
public CaptchaType getCaptchaType() {
return CaptchaType.Jigsaw;
}
}