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; } }