登錄界面模塊解析——生成圖片驗證碼

文章來自個人博客git

正文以前

以前作過一個練手的Web項目登錄界面,其中有一個驗證碼模塊,涉及到JavaIO和Java AWT工具因此打算寫一篇介紹,順便對練手項目的源碼作一點小變更github

正文

1. 變量

首先先定義幾個須要的變量bash

private int width=50;                               //圖片緩衝區的寬
    private int height=15;                              //圖片緩衝區的高
    private Random random=new Random();                 //隨機數字
    private Color color=new Color(255,255,255);         //白色背景
    private String text;                                //圖片上的文本
複製代碼
2. 隨機字符、顏色

隨機字符包括了10位數字和26個字母app

//生成隨機字符
    private char randomChar()
    {
        //選取隨機數字,生成字符
        String numbers = "1234567890qwertyuiopasdfghjklzxcvbnm";
        int index=random.nextInt(numbers.length());
        //轉換爲char類型
        return numbers.charAt(index);
    }

    //生成隨機顏色
    private Color randomColor()
    {
        //以RGB形式表示顏色
        int red=random.nextInt(255);
        int green=random.nextInt(255);
        int blue=random.nextInt(255);
        //返回隨機生成的顏色
        return new Color(red,green,blue);
    }
複製代碼
3. 干擾線
//畫干擾線
    private void drawLine(Graphics g){
        for (int i = 0; i < 2; i++) {
            //設置線的顏色
            g.setColor(randomColor());
            //線的長度從(x1,y1)到(x2,y2)
            g.drawLine(random.nextInt(width), random.nextInt(height),
                    random.nextInt(width), random.nextInt(height));
        }
    }
複製代碼
4. 驗證碼中的文本
//返回驗證碼圖片中的文本
    public String getText()
    {
        return text;
    }
複製代碼
5. 圖片緩衝區
//創造圖片緩衝區
    private BufferedImage createImage()
    {
        //參數爲寬度,高度和圖像類型
        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g=image.getGraphics();
        //設置顏色
        g.setColor(color);
        //填充內容
        g.fillRect(0,0,width,height);
        return image;
    }
複製代碼
//獲得圖片緩衝區
    public BufferedImage getImage()
    {
        BufferedImage image = createImage();                    //建立緩衝區
        Graphics g = image.getGraphics();                       //獲得繪製環境
        StringBuilder stringBuilder = new StringBuilder();      //驗證碼文本

        //驗證碼長度爲4
        for (int i=0;i<4;i++)
        {
            String str = String.valueOf(randomChar());           //產生隨機字符,將char類型轉爲String類型
            stringBuilder.append(str);                           //將生成的隨機字符添加至stringBuilder
            g.setColor(randomColor());                           //產生隨機顏色
            g.drawString(str, i * width / 4, height);           //繪製文本
        }
        drawLine(g);                                             //添加干擾線
        text = stringBuilder.toString();                         //把生成字符串賦給文本,以便於驗證
        return image;
    }
複製代碼
6. 輸出圖片
//使用輸出流打印圖片
    public static void output(BufferedImage image, OutputStream out) throws IOException {
        //做爲JPEG格式輸出圖片
        ImageIO.write(image,"JPG",out);
    }
複製代碼
Demo

直接輸出圖片到個人桌面dom

運行以後的結果:工具

就這樣,簡單的驗證碼就作完了ui

相關文章
相關標籤/搜索