Java web中图片验证码功能实现

jopen 5年前

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

大概步骤是:

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            }                }  
来自:http://blog.csdn.net/longshengguoji/article/details/39437241