java 图片滑动验证码_java实现图片滑动验证(包含前端代码)

本文介绍了如何使用Java实现图片滑动验证功能,包括后端图片裁剪与生成、前端展示图片的详细步骤。作者提供了核心代码,并指出现有资料的不足,分享了自己的实践过程,适合需要实现该功能的开发者参考。
摘要由CSDN通过智能技术生成

前言

1、下面是一个效果展示;

2、先抱怨一下,在博客上面的抄袭真的非常严重,为了实现一个图片滑动验证,我搜索了挺久的资料,不过内容翻来覆去就是同样的内容,千篇一律,作者还各不相同;内容相同我就不多说了,毕竟能解决问题就行,然而恰恰相反,这些东西都没有为我实质性地解决问题。可能图片验证是一个需要前后台同时交互的功能吧,从业的人员大部分都是偏向后台或者偏向前台的,所以写出来的博客都不能完整阐述整个流程,下面是我自己实践完成的内容,记录一下,供各位参阅斧正。

注:由于使用到的控件和工具较多,有许多地方做了省略,这里只做核心流程的记录。

ae2ca3d7687cfaf488755377026f3ed6.png

一、后端图片裁剪与生成

首先是一个图片处理工具VerifyImageUtil.class,它主要的作用是生成两张图片:一张被扣除了一部分的原始图片;一张抠出来图片。两两结合,可以组成一张完整的图片。原始图片(target目录)提供了20张,规格都是590*360的;抠图需要的模板图(template目录)有4张,规格都是93*360的(图片等各种资源会在文末给出)。将图片资源导入到我们项目的静态资源路径下(你也可以通过其他方式存储它们),我这边是Spring Boot的项目,所以就放在resource下的static目录下了:

1cb57e7d98ca44f7e6eaa5e7bcf86e5e.png

下面是 VerifyImageUtil.class

package com.mine.risk.util;

import org.apache.commons.lang.StringUtils;

import javax.imageio.ImageIO;

import javax.imageio.ImageReadParam;

import javax.imageio.ImageReader;

import javax.imageio.stream.ImageInputStream;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.text.NumberFormat;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Random;

/**

* 滑块验证工具类

* @author : spirit

* @date : Created in 10:57 2019/9/05

*/

public class VerifyImageUtil {

/** 源文件宽度 */

private static final int ORI_WIDTH = 590;

/** 源文件高度 */

private static final int ORI_HEIGHT = 360;

/** 抠图坐标x */

private static int X;

/** 抠图坐标y */

private static int Y;

/** 模板图宽度 */

private static int WIDTH;

/** 模板图高度 */

private static int HEIGHT;

public static int getX() {

return X;

}

public static int getY() {

return Y;

}

/**

* 根据模板切图

* @param templateFile 模板文件

* @param targetFile 目标文件

* @param templateType 模板文件类型

* @param targetType 目标文件类型

* @return 切图map集合

* @throws Exception 异常

*/

public static Map pictureTemplatesCut(File templateFile, File targetFile, String templateType, String targetType) throws Exception {

Map pictureMap = new HashMap<>(2);

if (StringUtils.isEmpty(templateType) || StringUtils.isEmpty(targetType)) {

throw new RuntimeException("file type is empty");

}

InputStream targetIs = new FileInputStream(targetFile);

// 模板图

BufferedImage imageTemplate = ImageIO.read(templateFile);

WIDTH = imageTemplate.getWidth();

HEIGHT = imageTemplate.getHeight();

// 随机生成抠图坐标

generateCutoutCoordinates();

// 最终图像

BufferedImage newImage = new BufferedImage(WIDTH, HEIGHT, imageTemplate.getType());

Graphics2D graphics

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Java 图片滑动验证码的示例代码,使用 Java Swing 库实现: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Random; public class ImageSliderVerificationCode extends JFrame { private static final long serialVersionUID = 1L; private final int WIDTH = 400; private final int HEIGHT = 300; private final int BLOCK_SIZE = 50; private Image bgImage; private Image blockImage; private int blockX; private int blockY; private int mouseX; private int mouseY; private boolean isDragging; public ImageSliderVerificationCode() { setTitle("Image Slider Verification Code"); setSize(WIDTH, HEIGHT); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setLocationRelativeTo(null); bgImage = new ImageIcon("background.jpg").getImage(); blockImage = new ImageIcon("block.png").getImage(); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.getX() >= blockX && e.getX() <= blockX + BLOCK_SIZE && e.getY() >= blockY && e.getY() <= blockY + BLOCK_SIZE) { isDragging = true; mouseX = e.getX(); mouseY = e.getY(); } } public void mouseReleased(MouseEvent e) { isDragging = false; if (blockX >= WIDTH - BLOCK_SIZE) { JOptionPane.showMessageDialog(null, "Verification passed!"); System.exit(0); } else { blockX = 0; blockY = new Random().nextInt(HEIGHT - BLOCK_SIZE); repaint(); } } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if (isDragging) { blockX += e.getX() - mouseX; blockY += e.getY() - mouseY; if (blockX < 0) { blockX = 0; } if (blockX > WIDTH - BLOCK_SIZE) { blockX = WIDTH - BLOCK_SIZE; } if (blockY < 0) { blockY = 0; } if (blockY > HEIGHT - BLOCK_SIZE) { blockY = HEIGHT - BLOCK_SIZE; } mouseX = e.getX(); mouseY = e.getY(); repaint(); } } }); } public void paint(Graphics g) { g.drawImage(bgImage, 0, 0, null); g.drawImage(blockImage, blockX, blockY, null); } public static void main(String[] args) { ImageSliderVerificationCode verCode = new ImageSliderVerificationCode(); verCode.setVisible(true); } } ``` 此代码将生成一个包含背景图片滑块图片的窗口。当用户按住滑块图片并拖动它时,窗口将显示移动后的滑块图片。如果用户将滑块图片拖动到窗口的右边缘,则显示验证通过的消息并退出程序。否则,滑块图片将被重置到窗口的左侧,并随机在窗口的垂直方向上移动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值