一、滑动验证码生成思路
- 1、随机选择一张图片
- 2、生成滑块起点位置(x, y)
- 3、生成滑块轮廓
- 4、抠出滑块
- 5、将滑块部位去除颜色
二、主要方法
这里使用的方法是:先抠出中间的正方形,再将凹凸槽的RGB渲染上去
- 1、扣主体
- 将自定义滑块大小扩大三分之二,用来做凸槽
- 2、抠凸槽
- 因为凸槽是个圆,所以可通过圆的标准方程
三、生成代码
- 滑块验证码实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author: Yang
* @create: 2022-10-25
* @Description: 滑动验证码实体
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ImageSlideVerify {
private String bgImg;// 底部图片
private String blockImg;// 滑块图片
private Integer x;// 开始x
private Integer y;// 开始y
private Integer bound;// 误差值
}
- 生成滑块验证码
import com.yang.domain.vo.ImageSlideVerify;
import org.apache.tomcat.util.codec.binary.Base64;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Random;
import java.util.UUID;
import javax.imageio.ImageIO;
/**
* 滑动验证码
* @author Yang
*
*/
public class ImageSlideVerifyUtil {
private static Integer x, y;// x , y轴起点位置
private static Integer blockSize; // 块大小
public static void main(String[] args) throws IOException {
File file = new File("4.jpeg");
cutting(file, 80);
cutting(file);
}
// 切割
public static ImageSlideVerify cutting(File file, int size) {
FileInputStream fis;
blockSize = size;
try {
fis = new FileInputStream(file);
BufferedImage image = ImageIO.read(fis);// 将文件流转图像流
// 生成圆位置
Integer cp[] = circle();// 下标对应:上右下左
// 生成滑块
BufferedImage im