java web中图片验证码功能的简单实现方法

论坛 期权论坛 脚本     
niminba   2021-5-16 07:10   12   0

用户在注册网站信息的时候基本上都要数据验证码验证。那么图片验证码功能该如何实现呢?

大概步骤是:

1.在内存中创建缓存图片

2.设置背景色

3.画边框

4.写字母

5.绘制干扰信息

6.图片输出

废话不多说,直接上代码

package com.lsgjzhuwei.servlet.response;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class VerificationCode
 */
@WebServlet(asyncSupported = true, urlPatterns = { "/VerificationCode" })
public class VerificationCode extends HttpServlet {
 private static final long serialVersionUID = 1L;
    
  /**
   * @see HttpServlet#HttpServlet()
   */
  public VerificationCode() {
    super();
    // TODO Auto-generated constructor stub
  }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  
  int width = 120;
  int height = 30;
  
  //创建一张内存中的缓存图片
  BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  
  ///背景色
  //通过graphics绘制图像
  Graphics graphics = bufferedImage.getGraphics();
  //设置颜色
  graphics.setColor(Color.yellow);
  //填充
  graphics.fillRect(0, 0, width, height);
  
  ///画边框
  graphics.setColor(Color.blue);
  graphics.drawRect(0, 0, width-1, height-1);
  
  //写字母
  String content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
  Random random = new Random();
  //设置字体颜色
  graphics.setColor(Color.red);
  //设置字体及大小
  graphics.setFont(new Font("宋体", Font.BOLD, 20));
  int x=20;
  int y=20;
  for(int i = 0; i < 4; i++)
  {
   int index = random.nextInt(content.length());
   char letter = content.charAt(index);
   graphics.drawString(letter+" ", x, y);
   x = x+20;
  }
  
  //绘制干扰线
  int x1;
  int x2;
  int y1;
  int y2;
  graphics.setColor(Color.LIGHT_GRAY);
  for(int i = 0;i <50;i++)
  {
   x1=random.nextInt(width);
   x2=random.nextInt(width);
   y1=random.nextInt(height);
   y2=random.nextInt(height);
   graphics.drawLine(x1, y1, x2, y2);
  }
  
  //将图片输出到浏览器
  //将内存的图片通过浏览器输出流输出成jpg图片
  ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
  
  
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }

}

以上这篇java web中图片验证码功能的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持社区。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP