Java web中圖片驗證碼功能實現

jopen 11年前發布 | 86K 次閱讀 驗證碼 驗證碼(Captcha)

用戶在注冊網站信息的時候基本上都要數據驗證碼驗證。那么圖片驗證碼功能該如何實現呢?

大概步驟是:

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!