登陸介面模組解析——生成圖片驗證碼

胖若倆人發表於2019-02-25

文章來自我的部落格

正文之前

之前做過一個練手的Web專案登陸介面,其中有一個驗證碼模組,涉及到JavaIO和Java AWT工具所以打算寫一篇介紹,順便對練手專案的原始碼做一點小變動

正文

1. 變數

首先先定義幾個需要的變數

    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個字母

    //生成隨機字元
    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

直接輸出圖片到我的桌面

登陸介面模組解析——生成圖片驗證碼

執行之後的結果:

登陸介面模組解析——生成圖片驗證碼

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

相關文章