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日

相关文章

  • 10个Java程序员熟悉的面向对象设计原则

    为了让Java程序员编写高质量的面向对象代码,需要了解并应用常见的面向对象设计原则。下面介绍的是10个Java程序员熟悉的面向对象设计原则的完整攻略。 1. 单一职责原则(SRP) 单一职责原则规定一个类只有一个职责,即一个类只负责实现单一的功能。如果一个类承担了多个职责,则这个类变得难以修改,测试和复用,会导致代码的混乱和不可维护性。 示例说明:例如,假设…

    Java 2023年5月26日
    00
  • 20个非常实用的Java程序代码片段

    以下是“20个非常实用的Java程序代码片段”的完整攻略: 1. 倒序输出字符串 可以使用StringBuilder的reverse()方法,将字符串倒序输出: String str = "hello world"; String reversedStr = new StringBuilder(str).reverse().toStrin…

    Java 2023年5月19日
    00
  • Java基础之ArrayList的扩容机制

    Java基础之ArrayList的扩容机制 ArrayList简介 在Java中,ArrayList是一种常见的数据结构之一。它继承了AbstractList这个类,并且实现了List接口。ArrayList是基于数组实现的,可以动态地增加或减少数组的大小,所以可以自动扩容和缩容。 扩容机制 ArrayList的扩容机制指的是当ArrayList内部的元素个…

    Java 2023年5月26日
    00
  • jsp Request获取url信息的各种方法对比

    JSP Request获取URL信息的各种方法对比 当我们在JSP文件中需要获取URL信息时,可以使用多种方式,本文将对比一下常用的几种方法。 request.getRequestURL() request.getRequestURL() 方法可以获取当前请求的URL。 示例: <% String url = request.getRequestURL…

    Java 2023年6月15日
    00
  • 最终幻想14白魔学者常用宏大全

    最终幻想14(Final Fantasy XIV)是一个非常经典的MMORPG游戏,其中白魔学者是非常重要的职业之一。使用宏可以大大增强玩家的游戏体验和提高游戏效率。在本篇攻略中,我们将介绍一些白魔学者常用的宏。 宏的概念及使用方法 宏是一种由玩家自定义的命令组合。玩家可以将多个命令组合成一个宏,并通过一个按键或鼠标点击来执行这个宏。使用宏可以让玩家快速执行…

    Java 2023年6月15日
    00
  • Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)

    下面我会给出一份详细的攻略,帮助你快速了解如何通过使用Eclipse、Java、Swing和Mysql来实现电影购票系统。 准备工作 安装 JDK 和 Eclipse 下载该电影购票系统所需的Java类库和驱动程序mysql-connector-java-5.1.47-bin.jar,并在Eclipse的项目中添加这些类库 搭建Mysql数据库 设计数据库 …

    Java 2023年5月23日
    00
  • Java String字符串和Unicode字符相互转换代码

    下面是Java String字符串和Unicode字符相互转换代码的完整攻略: Unicode字符和Java String字符串的相互转换 在Java编程中,我们有时需要将Unicode字符和Java String字符串相互转换。Unicode字符是一个标准,它规定了所有字符及其对应的码点。而Java String字符串是由Unicode字符序列组成的。 U…

    Java 2023年5月20日
    00
  • 较详细的JNI简介

    较详细的JNI简介 什么是JNI? JNI(Java Native Interface)是一种可用于Java代码与其他编程语言进行交互的编程接口。通过JNI,Java程序可以调用C、C++、汇编等语言编写的本地程序库,也可以让其他语言的程序调用Java本身的API。 JNI使用流程 编写本地程序库 首先,我们需要编写用其他编程语言如C、C++、汇编等编写的本…

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