滑块验证码 主要就是一个X、Y轴多少的问题
X轴,控制图片缺口的横向移动距离
Y轴,控制你缺口滑块的高度,然后X轴移动到指定距离才对的上
话不多说,上代码,具体请看注释,或者下方提问!欢迎各位大佬提出更好的意见!
controller层
@RequestMapping("/get")
public Result<Object> getCode(HttpServletRequest request, HttpServletResponse response, String tempCode) throws Exception {
Result<Object> result = new Result<>();
log.info("getCode start");
Random random = new Random();
//有多少张图片 设置多少个随机数,随机选出一张图
int i = random.nextInt(19) + 1;
//拼接绝对路径 我这里放在了项目部署的服务器上,你们可以随意
String path = "/home/ftp/identify/verification/original/bg" + i + ".png";
//String path = "C:\\Users\\admin\\Desktop\\original\\bg" + i + ".png";
log.info("path:{}", path);
VerifyImage verifyImage = VerifyImageUtil.getVerifyImage(path);
log.info("X坐标:{}", verifyImage.getX());
String s = DigestUtils.md5Hex(sKey + verifyImage.getY());
redisMapper.set("code::" + tempCode, String.valueOf(verifyImage.getX()), codeExpireTime);
redisMapper.set("code::" + tempCode + "_Y", s, codeExpireTime);
verifyImage.setX(null);
result.setDatas(verifyImage);
return result;
}
实体类:
package com.idc.utils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author jiexu
* @version 1.0.0
* @ClassName VerifyImage.java
* @Description TODO
* @createTime 2021年04月29日 18:35:00
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class VerifyImage {
private String srcImage;
private String markImage;
private Integer x;
private Integer y;
}
工具类:
package com.java.utils;
import lombok.extern.slf4j.Slf4j;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author wcybaonier
* @version 1.0.0
* @ClassName VerifyImageUtil.java
* @Description TODO
* @createTime 2021年04月29日 18:34:00
*/
@Slf4j
public class VerifyImageUtil {
/**
* 源文件宽度
*/
private static int ORI_WIDTH = 300;
/**
* 源文件高度
*/
private static int ORI_HEIGHT = 150;
/**
* 模板图宽度
*/
private static int CUT_WIDTH = 50;
/**
* 模板图高度
*/
private static int CUT_HEIGHT = 50;
/**
* 抠图凸起