java生成图片验证码示例程序

下面就为您介绍一下生成图片验证码的示例程序。

生成图片验证码示例程序

步骤1:导入验证码库

Java中创建一个图片验证码需要用到非常多的API,用起来比较繁琐,因此我们可以使用一些第三方库来简化代码。这里我推荐使用Google的Guava库,该库提供了生成图片验证码的常用API,也可以方便的操作对象、字符串、集合等。

在Maven项目的pom.xml文件中添加以下依赖:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>29.0-jre</version>
</dependency>

步骤2:生成随机字符

Random random = new Random();
StringBuilder captcha = new StringBuilder();
for (int i = 0; i < 6; i++) {
   char c = (char) (random.nextInt(26) + 65);
   captcha.append(c);
}

这段代码使用Java的随机数生成器生成了一个长度为6的随机字符串,该字符串由英文字母(A-Z)组成。如果您需要生成数字、中文或其他字符的验证码,只需修改生成字符的范围即可。

步骤3:生成验证码图片

int width = 150;
int height = 50;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.setColor(Color.BLACK);
g.setFont(new Font("Arial", Font.BOLD, 32));
g.drawString(captcha.toString(), 25, 35);
g.dispose();

这段代码创建了一个150x50大小的空白图片,使用Java的2D绘图API将随机字符串绘制到图片上,然后返回该图片。

步骤4:将图片输出到HTTP响应中

response.setContentType("image/jpeg");
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpeg", out);
out.close();

这段代码设置HTTP响应的内容类型为image/jpeg,然后将生成的图片输出到HTTP响应流中。

示例1:结合Spring Boot使用

下面的代码演示了如何结合Spring Boot创建一个返回图片验证码的接口:

@RestController
public class CaptchaController {

    @GetMapping("/captcha")
    public void generateCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            char c = (char) (random.nextInt(26) + 65);
            captcha.append(c);
        }

        int width = 150;
        int height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.BLACK);
        g.setFont(new Font("Arial", Font.BOLD, 32));
        g.drawString(captcha.toString(), 25, 35);
        g.dispose();

        response.setContentType("image/jpeg");
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpeg", out);
        out.close();
    }
}

示例2:结合Servlet使用

下面的代码演示了如何结合Servlet创建一个返回图片验证码的接口:

public class CaptchaServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            char c = (char) (random.nextInt(26) + 65);
            captcha.append(c);
        }

        int width = 150;
        int height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.BLACK);
        g.setFont(new Font("Arial", Font.BOLD, 32));
        g.drawString(captcha.toString(), 25, 35);
        g.dispose();

        resp.setContentType("image/jpeg");
        ServletOutputStream out = resp.getOutputStream();
        ImageIO.write(image, "jpeg", out);
        out.close();
    }
}

建议将Servlet注册到某个servlet容器中,如Tomcat、Jetty等,然后通过访问 http://localhost:8080/captcha 获取验证码图片。

以上就是生成图片验证码的示例程序的完整攻略,希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java生成图片验证码示例程序 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java中实现map与对象相互转换的几种实现

    当我们需要将Java中的Map和对象进行相互转换时,可以使用以下几种实现方法: 方法一:手动转换 手动将Map中的键值对映射到Java Bean中的字段,并反之。这种方法的实现相对比较简单,但是存在缺陷是需要手动对属性进行处理,比较繁琐,不够自动化 public class User { private Long id; private String nam…

    Java 2023年5月26日
    00
  • Java实战之火车票预订系统的实现

    Java实战之火车票预订系统的实现 系统概述 本项目实现一个简单的火车票预订系统,用户可以查询车次、座位信息,并进行订票、改签和退票操作。系统采用Java语言和MySQL数据库进行开发,使用Spring Boot框架构建项目,并搭配Thymeleaf模板引擎实现前端页面渲染。 开发环境 本项目所需的开发环境如下: JDK 1.8+ Maven 3.6.2+ …

    Java 2023年5月18日
    00
  • Java中的数组越界异常如何避免?

    出现数组越界异常(ArrayIndexOutOfBoundsException)是因为尝试访问数组中不存在的元素或进行超出数组范围的操作所导致的。防止数组越界异常的方法包括以下几个步骤: 明确数组中可访问的元素范围:在访问数组元素之前,需要弄清楚数组的长度及下标范围,确保不会访问超出数组范围的位置。Java中提供了length属性来获得数组长度,例如: in…

    Java 2023年4月27日
    00
  • Java之数组在指定位置插入元素实现

    Java之数组在指定位置插入元素实现 介绍 数组是一种十分常见的数据结构,它用于存储一系列同类型的数据。在Java中,数组是一种对象,也被称为引用类型。数组实际上是只有一个变量名,而其它所有的元素都用一个索引来访问,所以在这个意义上,数组其实就是一个索引表。 在Java中,数组的长度是固定的。一旦创建了一个数组,它的大小就不能被改变了。然而,我们可以通过一些…

    Java 2023年5月26日
    00
  • Java基数排序radix sort原理及用法解析

    Java基数排序(radix sort)原理及用法解析 简介 基数排序(radix sort)是一种线性时间非比较排序算法。该算法按照元素的每个位数进行排序。 对于待排序的整数集合,基数排序将集合中的元素按照它们的个位、十位、百位……的大小排序(可以理解为在固定位数的情况下逐个进行桶排序)。 基数排序的时间复杂度为 $O(d \cdot (n+k))$,其中…

    Java 2023年5月26日
    00
  • asp程序定义变量比不定义变量速度快一倍

    在ASP程序中,定义变量和不定义变量对程序运行的速度有一定的影响。定义变量可以减少内存的开销,提高程序效率,从而让程序运行更快。 一般来说,在ASP程序中,定义变量可以采用如下语法: Dim variable1, variable2, …… 其中,variable1, variable2等表示所定义的变量名,多个变量名之间用逗号隔开。采用这种方式定义…

    Java 2023年6月16日
    00
  • 详解SpringBoot 处理异常的几种常见姿势

    详解SpringBoot处理异常的几种常见姿势 在SpringBoot开发中,异常处理是一个非常重要的环节。合理的异常处理能够提高系统的稳定性和可维护性。本文将介绍几种常见的SpringBoot处理异常的姿势。 1. @ControllerAdvice和@ExceptionHandler @ControllerAdvice是Spring4.0引入的一个注解,…

    Java 2023年5月15日
    00
  • java连接mysql数据库及测试是否连接成功的方法

    下面是Java连接MySQL数据库及测试是否连接成功的方法的完整攻略: 1. 准备工作 在开始操作前,需要先安装好MySQL数据库,并在其中创建好要使用的数据库以及相应的表。 此外,还需下载并安装Java的JDBC驱动程序,如MySQL官网提供的Connector/J驱动,下载地址:https://dev.mysql.com/downloads/connec…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部